Git(分布式版本管理工具)

Git(分布式版本管理工具)

  • 1. Git 概述
    • 1.1 什么是版本控制?
    • 1.2 版本控制工具都有哪些
      • 1.2.1 集中式版本控制工具
      • 1.2.2 分布式版本控制工具
    • 1.3 Git 简史
    • 1.4 Git工作机制
    • 1.5 Git 和代码托管中心
  • 2. Git 安装
    • 2.1 启动Git
  • 3. Git 常用命令
    • 3.1 设置用户签名
    • 3.2 初始化本地库
    • 3.3 查看本地库状态
    • 3.4 添加到暂存区
      • 3.4.1 将工作区的文件添加到暂存区
      • 3.4.2 查看本地库状态
    • 3.5 提交到本地仓库
      • 3.5.1 将暂存区的文件提交到本地库
      • 3.5.2 查看状态(显示没有文件需要被提交)
    • 3.6 文件修改
      • 3.6.1 查看文件状态(检测到文件是modified状态)
      • 3.6.2 将修改的文件再次添加暂存区
      • 3.6.3 查看状态(修改的文件已被添加到暂存区)
      • 3.6.4 文件提交
    • 3.7 历史版本
      • 3.7.1 查看历史版本
      • 3.7.2 版本穿梭
  • 4. Git 分支操作
    • 4.1 什么是分支?
    • 4.2 分支的好处
    • 4.3 分支的操作
      • 4.3.1 查看分支
      • 4.3.2 创建分支
      • 4.3.3 切换分支
      • 4.3.4 合并分支
    • 4.4 合并分支冲突
      • 4.4.1 冲突产生
      • 4.4.2 解决冲突
  • 5. Git 团队协作机制
    • 5.1 团队内协作
    • 5.2 跨团队协作
  • 6. GitHub 操作
    • 6.1 创建远程仓库
    • 6.2 远程仓库操作
      • 6.2.1 创建远程仓库别名
      • 6.2.2 推送本地分支到远程仓库
      • 6.2.3 拉取远程库同步到本地库
      • 6.2.3 克隆远程库到本地
      • 6.2.4 邀请加入团队
    • 6.3 跨团队协作
  • 7. IDEA 集成Git
    • 7.1 新建Maven项目
      • 7.1.1 定位Git程序
      • 7.1.2 初始化IDEA项目本地库
      • 7.1.3 添加到暂存区
      • 7.1.4 提交本地库
      • 7.1.5 切换提交的版本
      • 7.1.6. 创建分支
      • 7.1.7 切换分支
      • 7.1.8 合并分支
      • 7.1.9 合并冲突解决
  • 8. IDEA 集成Github
    • 8.1 添加GitHub账号
    • 8.2 推送项目到GitHub
    • 8.3 push推送本地库的内容到远程库
    • 8.4 pull拉取远程库到本地库
    • 8.5 clone克隆远程库到本地
  • 9. 码云(代码托管中心)
    • 9.1 码云账号注册
    • 9.2 码云创建远程库
    • 9.3 IDEA集成码云
      • 9.3.1 安装码云插件
      • 9.3.2 push代码到码云
    • 9.4 码云复制GitHub项目
  • 10 GitLab(自建代码托管平台)
    • 10.1 GitLab 简介
    • 10.2 GitLab 安装
      • 10.2.1 GitLab 安装包
      • 10.2.2 编写安装脚本
      • 10.2.3 初始化GitLab
      • 10.2.4 启动GitLab程序
      • 10.2.5 访问GitLab界面
      • 10.2.6 GitLab创建远程库
    • 10.3 IDEA 集成 GitLab
      • 10.3.1 push代码到GitLab

文章对应教程:https://www.bilibili.com/video/BV1vy4y1s7k6

1. Git 概述

  • Git 是一个免费的、开源的分布式版本控制系统。可以快速高效地处理从小型到大型的各种项目。Git易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于 Subversion、CVS、Perforce 和 ClearCase 等版本控制工具。

1.1 什么是版本控制?

  • 版本控制是一种记录文件内容变化,以便将来****查阅特定版本修订情况的系统。
  • **版本控制其实最重要的是可以记录文件修改历史记录,**从而让用户能够查看历史版本,方便版本切换。

1.2 版本控制工具都有哪些

1.2.1 集中式版本控制工具

CVS、SVN(Subversion)、VSS

  • 集中化的版本控制系统诸如 CVS、SVN 等,都有一个单一的集中管理的服务器保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。

  • 这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什
    么。管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松容易。

  • 事分两面,有好有坏。这么做显而易见的缺点是中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。

Git(分布式版本管理工具)_第1张图片

1.2.2 分布式版本控制工具

  • Git、Mercurial、Bazaar、Darcs…

  • 像Git这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。

  • 分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:

    1. 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)

    2. 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)

Git(分布式版本管理工具)_第2张图片

1.3 Git 简史

Git(分布式版本管理工具)_第3张图片

1.4 Git工作机制

Git(分布式版本管理工具)_第4张图片

1.5 Git 和代码托管中心

  • 代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。

  • 局域网中

  • GitLab

  • 互联网中(广域网)

  • GitHub(国外网站)

  • Gitee 码云(国内网站

2. Git 安装

官网地址:Git 下载

  • 1. 双击安装程序点击next

Git(分布式版本管理工具)_第5张图片

  1. 设置Git的安装位置

Git(分布式版本管理工具)_第6张图片

  1. 勾选Git 选项配置,推荐默认设置,然后下一步。

Git(分布式版本管理工具)_第7张图片

  1. Git 安装目录名,不用修改,直接点击下一步

Git(分布式版本管理工具)_第8张图片

  1. 选择 Git 的默认编辑器,建议使用默认的 Vim 编辑器,然后点击下一步。

Git(分布式版本管理工具)_第9张图片

  1. 选择默认分支名,勾选让 Git 决定,分支名默认为 master,下一步

Git(分布式版本管理工具)_第10张图片

  1. 修改 Git 的环境变量,选第一个,不修改环境变量,只在 Git Bash 里使用 Git。

Git(分布式版本管理工具)_第11张图片

  1. 选择可执行的ssh,默认即可

Git(分布式版本管理工具)_第12张图片

  1. 选择后台客户端连接协议,选默认值 OpenSSL,然后下一步。

Git(分布式版本管理工具)_第13张图片

  1. 配置 Git 文件的行末换行符,Windows 使用 CRLF,Linux 使用 LF,选择第一个自动转换,然后继续下一步。

Git(分布式版本管理工具)_第14张图片

  1. 选择终端的类型

Git(分布式版本管理工具)_第15张图片

  1. 选择 Git pull 合并的模式,默认即可,然后下一步

Git(分布式版本管理工具)_第16张图片

  1. 选择 Git 的凭据管理器,选择默认的跨平台的凭据管理器,然后下一步。

Git(分布式版本管理工具)_第17张图片

  1. 其他配置,选择默认设置,然后下一步

Git(分布式版本管理工具)_第18张图片

  1. 最后一步实验室功能,技术还不成熟,有已知的 bug,不要勾选,然后点击右下角的 Install按钮,开始安装 Git。

Git(分布式版本管理工具)_第19张图片

  1. 点击 Finsh 按钮,Git 安装成功!

Git(分布式版本管理工具)_第20张图片

2.1 启动Git

右键任意位置,在右键菜单里选择 Git Bash Here 即可打开 Git Bash 命令行终端。

Git(分布式版本管理工具)_第21张图片

在 Git Bash 终端里输入 git --version 查看 git 版本,如下图所示,说明 Git 安装成功

Git(分布式版本管理工具)_第22张图片

3. Git 常用命令

命令 功能
git config --global user.name 用户名 设置用户签名用户名
git config --global user.name 用户名 设置用户签名邮箱
git init 初始化本地仓库
git status 查看本地库状态
git add 文件名称 添加到暂存区
git commit -m “日志信息” 文件名 提交到本地库
git reflog 查看历史记录
git reset --hard 版本号 版本穿梭

3.1 设置用户签名

  • 基本语法

git config --global user.name 用户名

git config --global user.email 邮箱

  • 代码演示
# 设置用户名为Bear
git config --global user.name Bear 
# 设置用户邮箱为 [email protected]
git config --global user.email [email protected] 
  • 图文演示

Git(分布式版本管理工具)_第23张图片

  • 设置的用户名会被存放到本机用户的目录下

  • 使用命令查看设置的签名

  • Git(分布式版本管理工具)_第24张图片

PS: **签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。**Git 首次安装必须设置一下用户签名,否则无法提交代码。

3.2 初始化本地库

  • 基本语法

git init

  • 代码示例

  • 在D盘下的demo文件夹中初始化本地库

Bear@Xans MINGW64 /d/demo
$ git init
Initialized empty Git repository in D:/demo/.git/ # 表示初始化了一个空的git仓库
  • 结果查看

Git(分布式版本管理工具)_第25张图片

3.3 查看本地库状态

  • 基本语法

git status

  • 代码演示

  • 查看D盘的demo仓库状态(空目录则显示未提交未跟踪状态)

Bear@Xans MINGW64 /d/demo (master) 
$ git status 
On branch master # 在主分支上

No commits yet # 表示还没有提交

nothing to commit (create/copy files and use "git add" to track) # 没有被提交和跟踪的文件
  • 新增一个文件(1.txt)
Bear@Xans MINGW64 /d/demo (master)
$ vim 1.txt

# 添加以下内容
Hello China
Hello China
Hello China
  • 再次查看仓库状态(检测到未被跟踪的文件)
Bear@Xans MINGW64 /d/demo (master)
$ git status
On branch master

No commits yet

Untracked files: # 显示未被跟踪的文件
  (use "git add ..." to include in what will be committed)
        1.txt

nothing added to commit but untracked files present (use "git add" to track)

3.4 添加到暂存区

3.4.1 将工作区的文件添加到暂存区

  • 基本语法

git add 文件名称

  • 代码演示
Bear@Xans MINGW64 /d/demo (master)
$ git add 1.txt
warning: LF will be replaced by CRLF in 1.txt. # 警告信息
The file will have its original line endings in your working directory

3.4.2 查看本地库状态

Bear@Xans MINGW64 /d/demo (master)
$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached ..." to unstage)
        new file:   1.txt # 被提交到暂存区的新文件
  • 图文示例

Git(分布式版本管理工具)_第26张图片

3.5 提交到本地仓库

3.5.1 将暂存区的文件提交到本地库

  • 基本语法

    git commit -m “日志信息” 文件名

  • 代码示例

Bear@Xans MINGW64 /d/demo (master)
$ git commit -m "my first commit" 1.txt   # 提交1.txt文件
warning: LF will be replaced by CRLF in 1.txt.
The file will have its original line endings in your working directory

[master (root-commit) a0f668a] my first commit  # 备注的提交信息
 1 file changed, 3 insertions(+)
 create mode 100644 1.txt

3.5.2 查看状态(显示没有文件需要被提交)

 Bear@Xans MINGW64 /d/demo (master)
$ git status
On branch master
nothing to commit, working tree clean
  • 图文示例

Git(分布式版本管理工具)_第27张图片

3.6 文件修改

将已提交的文件内容进行修改,在这之后仍需将其添加到暂存区,并且再进行提交操作。

  • 代码示例
Bear@Xans MINGW64 /d/demo (master)
$ vim 1.txt

Hello China
Hello China
Hello China
Hello Bear # 新增这一行内容

3.6.1 查看文件状态(检测到文件是modified状态)

Bear@Xans MINGW64 /d/demo (master)
$ git status
On branch master
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git restore ..." to discard changes in working directory)
        modified:   1.txt

no changes added to commit (use "git add" and/or "git commit -a")

3.6.2 将修改的文件再次添加暂存区

Bear@Xans MINGW64 /d/demo (master)
$ git add 1.txt
warning: LF will be replaced by CRLF in 1.txt.
The file will have its original line endings in your working directory

3.6.3 查看状态(修改的文件已被添加到暂存区)

Bear@Xans MINGW64 /d/demo (master)
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged ..." to unstage)
        modified:   1.txt

3.6.4 文件提交

将修改过的文件提交到本地库,这时会将修改的内容增加。

Bear@Xans MINGW64 /d/demo (master)
$ git commit -m "second commit" 1.txt
warning: LF will be replaced by CRLF in 1.txt.
The file will have its original line endings in your working directory
[master c430c84] second commit
 1 file changed, 1 insertion(+)
  • 图文演示

Git(分布式版本管理工具)_第28张图片

3.7 历史版本

3.7.1 查看历史版本

  • 基本语法

    git reflog # 查看版本信息

    git log # 查看版本详细信息

  • 代码演示

  • 首先查看本地库的历史版本

Bear@Xans MINGW64 /d/demo (master)
$ git reflog
c430c84 (HEAD -> master) HEAD@{0}: commit: second commit # 指针指向了第二次提交的版本
a0f668a HEAD@{1}: commit (initial): my first commit

3.7.2 版本穿梭

git版本穿梭指的是可以在提交了多个版本的文件中自由的切换。

  • 基本语法

    git reset --hard 版本号

  • 代码演示

  • 使用命令切换到第一个提交的版本文件中去。

Bear@Xans MINGW64 /d/demo (master)
$ git reflog
c430c84 (HEAD -> master) HEAD@{0}: commit: second commit # 第二次提交的版本
a0f668a HEAD@{1}: commit (initial): my first commit # 第一次提交的文件版本

Bear@Xans MINGW64 /d/demo (master)
$ git reset --hard a0f668a  # 穿梭回到第一次提交的版本
HEAD is now at a0f668a my first commit

Bear@Xans MINGW64 /d/demo (master)
$ git reflog
a0f668a (HEAD -> master) HEAD@{0}: reset: moving to a0f668a
c430c84 HEAD@{1}: commit: second commit
a0f668a (HEAD -> master) HEAD@{2}: commit (initial): my first commit  # 指针已经指向了第一次提交的版本

Bear@Xans MINGW64 /d/demo (master)
$ cat 1.txt # 此时查看文件内容,发现已经切换到第一个版本文件添加的内容中去了。
Hello China
Hello China
Hello China

Git 切换版本,底层其实是移动的 HEAD 指针,具体原理如下图所示。
Git(分布式版本管理工具)_第29张图片

4. Git 分支操作

Git(分布式版本管理工具)_第30张图片

4.1 什么是分支?

在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)

Git(分布式版本管理工具)_第31张图片

4.2 分支的好处

  • 同时并行推进多个功能开发,提高开发效率。
  • **各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败
    ****的分支删除重新开始即可。
    **

4.3 分支的操作

命令 作用
git branch 分支名称 创建分支
git branch -v 查看分支
git checkout 分支名称 切换分支
git merge 分支名称 把指定的分支合并到当前分支上

4.3.1 查看分支

  • 基本语法

    git branch -v

  • 代码示例

Bear@Xans MINGW64 /d/demo (master)
$ git branch -v
* master a0f668a my first commit  # 指向当前所在的分支

4.3.2 创建分支

  • 基本语法

    git branch 分支名

  • 代码示例

Bear@Xans MINGW64 /d/demo (master)
$ git branch -v
  hot-fix a0f668a my first commit # 创建了一个hot-fix分支
* master  a0f668a my first commit

4.3.3 切换分支

  • 基本语法

git checkout 分支名称

  • 代码示例
Bear@Xans MINGW64 /d/demo (master)
$ git checkout hot-fix
Switched to branch 'hot-fix' # 切换到了hot-fix分支上
  • 在hot-fix分支上修改1.txt文件
Bear@Xans MINGW64 /d/demo (hot-fix)
$ vim 1.txt

Hello China
Hello China
Hello China
111 # 在hot-fix分支上添加这一行内容


Bear@Xans MINGW64 /d/demo (hot-fix)
$ git add 1.txt  # 添加到暂存区

Bear@Xans MINGW64 /d/demo (hot-fix)
$ git commit -m "third commit in hot-fix" 1.txt  # 在hot-fix分支上提交这个文件到本地库
[hot-fix 88a1225] third commit in hot-fix
 1 file changed, 2 insertions(+)
  • 切换到master分支
Bear@Xans MINGW64 /d/demo (hot-fix)
$ git checkout master
Switched to branch 'master'

Bear@Xans MINGW64 /d/demo (master)
$ cat 1.txt  # 查看master分支上的1.txt文件,两个分支的内容不同。
Hello China
Hello China
Hello China

在不同的分支上对文件做修改会有不同的显示结果,这时就需要进行分支内容的合并操作。

4.3.4 合并分支

  • 基本语法

git merge 分支名

  • 代码示例

  • 在master分支上合并新建的hot-fix分支

Bear@Xans MINGW64 /d/demo (master)
$ git merge hot-fix 			# 将hot-fix分支合并到master主分支上。
Updating a0f668a..88a1225
Fast-forward
 1.txt | 2 ++
 1 file changed, 2 insertions(+)

分支的合并会将内容同步到被合并的分支上。

4.4 合并分支冲突

在两个分支中修改同一个文件同一个位置时,进行合并会产生冲突的现象,git无法确定使用哪一个分支的内容。

4.4.1 冲突产生

  • 代码示例

  • 首先修改master分支所在的1.txt文件

Bear@Xans MINGW64 /d/demo (master)
$ vim 1.txt # 使用vim打开


Hello China
Hello China
Hello China
111 master test  # 在这一行添加上master test 内容

Bear@Xans MINGW64 /d/demo (master)
$ git add 1.txt  # 将修改后的文件添加到暂存区

Bear@Xans MINGW64 /d/demo (master)
$ git commit -m "master test" 1.txt  # 将修改后的文件提交到本地库。
[master 744007b] master test
 1 file changed, 1 insertion(+), 1 deletion(-)
  • 然后修改hot-fix分支所在的1.txt文件
Bear@Xans MINGW64 /d/demo (master)
$ git checkout hot-fix	# 切换到hot-fix分支下
Switched to branch 'hot-fix'

Bear@Xans MINGW64 /d/demo (hot-fix)
$ vim 1.txt # 使用vim打开hot-fix分支下的1.txt文件

Hello China
Hello China
Hello China
111 hot-fix test  # 在这一行添加上 hot-fix test 内容

Bear@Xans MINGW64 /d/demo (hot-fix)
$ git add 1.txt  # 添加到暂存区

Bear@Xans MINGW64 /d/demo (hot-fix)
$ git commit -m "hot-fix test" 1.txt   # 提交修改后的文件到本地库
[hot-fix 11f9851] hot-fix test
 1 file changed, 1 insertion(+), 1 deletion(-)
  • 再切换到master分支进行hot-fix分支的合并操作
Bear@Xans MINGW64 /d/demo (hot-fix)
$ git checkout master
Switched to branch 'master'

Bear@Xans MINGW64 /d/demo (master)
$ git merge hot-fix  # 合并hot-fix分支到master分支上
Auto-merging 1.txt
CONFLICT (content): Merge conflict in 1.txt  # 报错信息,表示合并分支失败
Automatic merge failed; fix conflicts and then commit the result.

4.4.2 解决冲突

通过手动修改文件的方式去解决冲突,决定要合并的内容

  • 代码示例
Bear@Xans MINGW64 /d/demo (master|MERGING)
$ vim 1.txt  # 在master分支打开1.txt文件

Hello China
Hello China
Hello China

<<<<<<< HEAD  # 删除掉这一行
111 master test  
=======				# 删除掉这一行
111 hot-fix test
>>>>>>> hot-fix  # 删除掉这一行

**特殊符号表示:<<<<<<< HEAD 是当前分支的代码 ======= 下面是合并过来的代码 >>>>>>> hot-fix**

  • 将在master分支上手动修改之后的文件再进行提交合并
Bear@Xans MINGW64 /d/demo (master|MERGING)
$ git add 1.txt

Bear@Xans MINGW64 /d/demo (master|MERGING)
$ git commit -m "merge hot-fix"
[master 7bf7b73] merge hot-fix  # 显示已合并

master、hot-fix 其实都是指向具体版本记录的指针。当前所在的分支,其实是由 HEAD决定的。

**所以创建分支的本质就是多创建一个指针。
****HEAD 如果指向 master,那么我们现在就在 master 分支上。
**HEAD 如果执行 hotfix,那么我们现在就在 hotfix 分支上

所以切换分支的本质就是移动 HEAD 指针。

5. Git 团队协作机制

5.1 团队内协作

Git(分布式版本管理工具)_第32张图片

5.2 跨团队协作

Git(分布式版本管理工具)_第33张图片

6. GitHub 操作

GitHub 网址:https://github.com/

6.1 创建远程仓库

  1. 登录Github官网,点击加号 New repository

Git(分布式版本管理工具)_第34张图片

  1. 填写基本信息

Git(分布式版本管理工具)_第35张图片

6.2 远程仓库操作

命令 作用
git remote -v 查看当前所有远程地址别名
git remote add 别名 远程地址 起别名
git push 别名 分支 推送本地分支到远程仓库中
git clone 远程地址 将远程仓库的内容克隆到本地
git pull 远程仓库地址别名 将远程仓库分支的最细内容拉去到本地与当前本地分支合并

6.2.1 创建远程仓库别名

  • 基本语法

**git remote -v 查看当前所有远程地址别名
**git remote add 别名 远程地址

  • 代码演示

  • https://github.com/BearPessimist/git-test.git 远程仓库创建一个别名

Bear@Xans MINGW64 /d/demo (master)
$ git remote add git-demo https://github.com/BearPessimist/git-test.git

Bear@Xans MINGW64 /d/demo (master)
$ git remote -v
git-demo        https://github.com/BearPessimist/git-test.git (fetch)  # 这个表示用来拉取
git-demo        https://github.com/BearPessimist/git-test.git (push)  # 这个表示用于推送

6.2.2 推送本地分支到远程仓库

  • 基本语法

git push 别名 分支

  • 代码示例

  • 将本地仓库分支推送到Github远程库

Bear@Xans MINGW64 /d/demo (master)
$ git push git-demo master  # 推送master分支到以git-demo别名的远程仓库中

Enumerating objects: 15, done.
Counting objects: 100% (15/15), done.
Delta compression using up to 8 threads
Compressing objects: 100% (8/8), done.
Writing objects: 100% (15/15), 1.11 KiB | 161.00 KiB/s, done.
Total 15 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), done.
To https://github.com/BearPessimist/git-test.git
 * [new branch]      master -> master
  • 此时刷新远程仓库会出现推送的内容

Git(分布式版本管理工具)_第36张图片

6.2.3 拉取远程库同步到本地库

在远程库的分支内容和本地库不相同时,可以命令进行双方的同步

  • 基本语法

git pull 远程库地址 分支名称

  • 示例

  • 修改远程库的文件内容

Git(分布式版本管理工具)_第37张图片

  • 在本地拉取并同步远程库的内容
Bear@Xans MINGW64 /d/demo (master)
$ cat 1.txt
Hello China
Hello China
Hello China

111 master test
111 hot-fix test

============= 上面是没有拉取同步之前的内容 ==============

Bear@Xans MINGW64 /d/demo (master)
$ git pull git-demo master		# 拉取别名为git-demo远程库的内容到本地master分支上。
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 650 bytes | 34.00 KiB/s, done.
From https://github.com/BearPessimist/git-test
 * branch            master     -> FETCH_HEAD
   7bf7b73..d9f8975  master     -> git-demo/master
Updating 7bf7b73..d9f8975
Fast-forward
 1.txt | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
 
 
 ============= 下面是拉取同步之后的内容 ==============

Bear@Xans MINGW64 /d/demo (master)
$ cat 1.txt
Hello China
Hello China
Hello China

master test
hot-fix test

6.2.3 克隆远程库到本地

  • 基本语法

git clone 远程库地址

  • 代码演示

  • 在D:\demo\clone_file 目录下克隆https://github.com/BearPessimist/git-test.git远程库的内容.

Bear@Xans MINGW64 /d/demo/clone_file (master)
$ git clone https://github.com/BearPessimist/git-test.git
Cloning into 'git-test'...
remote: Enumerating objects: 18, done.
remote: Counting objects: 100% (18/18), done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 18 (delta 1), reused 15 (delta 1), pack-reused 0
Receiving objects: 100% (18/18), done.
Resolving deltas: 100% (1/1), done.
  • 结果显示

Git(分布式版本管理工具)_第38张图片

PS:clone会进行如下操作:

  • 拉取代码、初始化本地库、 创建仓库别名

6.2.4 邀请加入团队

通过邀请其它GitHub用户一起参与到项目的开发

  • 在远程库中选择设置页面

Git(分布式版本管理工具)_第39张图片

  • 选择被邀请的人

Git(分布式版本管理工具)_第40张图片

  • 复制邀请地址发送给被邀请的用户

img

在Bears521这个账号输入邀请链接的时候,就可以点击接受邀请参与团队协作。

Git(分布式版本管理工具)_第41张图片

  • 在被邀请用户接受请求后,可以在账号中看到邀请方的远程仓库

img

  • 接下来就可以用Bears521账号进行修改文件内容,并且push到远程库,达到团队内协同开发的能力
Bear@Xans MINGW64 /d/demo (master)
$ git push https://github.com/BearPessimist/git-test.git master
warning: ----------------- SECURITY WARNING ----------------
warning: | TLS certificate verification has been disabled! |
warning: ---------------------------------------------------
warning: HTTPS connections may not be secure. See https://aka.ms/gcmcore-tlsverify for more information.
warning: ----------------- SECURITY WARNING ----------------
warning: | TLS certificate verification has been disabled! |
warning: ---------------------------------------------------
warning: HTTPS connections may not be secure. See https://aka.ms/gcmcore-tlsverify for more information.

Enumerating objects: 8, done.
Counting objects: 100% (8/8), done.
Delta compression using up to 8 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 473 bytes | 236.00 KiB/s, done.
Total 6 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), completed with 1 local object.
To https://github.com/BearPessimist/git-test.git
f6b4aeb..3cacf40  master -> master

PS:以上推送的用户是用的被邀请方Bears521操作的,因为这个用户被添加进了仓库的团队协同开发。

img

6.3 跨团队协作

将别人的项目fork一份到自己的本地库,进行修改和提交的操作。

  • 示例:在Bears521用户上fork BearPessimist用户下的git-test库到自己的本地库中

img

图中forked form … 说明是从BearPessimist用户中叉入过来的仓库。

  • fork了其它用户的仓库后就可以进行在线编辑

img

  • 点击标点进行编辑

Git(分布式版本管理工具)_第42张图片

  • 修改过内容后,填写描述信息并点击按钮进行提交操作。

Git(分布式版本管理工具)_第43张图片

  • 提交了修改请求后需要进行Pull requests,创建一个新的请求,等待仓库拥有者审核。

img

Git(分布式版本管理工具)_第44张图片

  • 填写提交的标题和描述信息

Git(分布式版本管理工具)_第45张图片

  • 在对仓库进行修改并拉取请求完成之后,仓库拥有者方就会收到一个pull requests请求

img

  • 查看提交的信息是否有问题,如果没问题则可以点击按钮进行合并请求,这样就可以在本仓库中看到对方提交修改的信息

Git(分布式版本管理工具)_第46张图片

  • 填写回复提交者的信息

Git(分布式版本管理工具)_第47张图片

7. IDEA 集成Git

7.1 新建Maven项目

Git(分布式版本管理工具)_第48张图片

7.1.1 定位Git程序

在idea中配置Git程序的安装目录

Git(分布式版本管理工具)_第49张图片

7.1.2 初始化IDEA项目本地库

Git(分布式版本管理工具)_第50张图片

7.1.3 添加到暂存区

Git(分布式版本管理工具)_第51张图片

7.1.4 提交本地库

Git(分布式版本管理工具)_第52张图片

Git(分布式版本管理工具)_第53张图片

7.1.5 切换提交的版本

在 IDEA 的左下角点击 Version Control,然后点击 Log 查看版本

Git(分布式版本管理工具)_第54张图片

右键选择要切换的版本,然后在菜单里点击 Checkout Revision。

Git(分布式版本管理工具)_第55张图片

7.1.6. 创建分支

选择 Git,在 Repository 里面,点击 Branches 按钮。

Git(分布式版本管理工具)_第56张图片

在弹出的 Git Branches 框里,点击 New Branch 按钮。

Git(分布式版本管理工具)_第57张图片

填写分支名称,创建 hot-fix 分支。

Git(分布式版本管理工具)_第58张图片

**然后再 IDEA 的右下角看到 hot-fix,说明分支创建成功,并且当前已经切换成 hot-fix 分支

**Git(分布式版本管理工具)_第59张图片

7.1.7 切换分支

在 IDEA 窗口的右下角,切换到 master 分支

Git(分布式版本管理工具)_第60张图片

7.1.8 合并分支

在 IDEA 窗口的右下角,将 hot-fix 分支合并到当前 master 分支。

Git(分布式版本管理工具)_第61张图片

如果代码没有冲突,分支直接合并成功,分支合并成功以后,代码自动提交,无需手动提交本地库。

7.1.9 合并冲突解决

例如在master分支和hot-fix分支都修改了代码,在合并分支的时候就会发生冲突

  • master分支下的代码

  • Git(分布式版本管理工具)_第62张图片

  • hot-fix分支下的代码

  • Git(分布式版本管理工具)_第63张图片

此时在master分支上合并hot-fix分支下的代码就会发生冲突

Git(分布式版本管理工具)_第64张图片

代码冲突时需要进行手动的合并,点击Merge按钮

Git(分布式版本管理工具)_第65张图片

将两边不一样的代码,进行转移合并到一起

Git(分布式版本管理工具)_第66张图片

8. IDEA 集成Github

8.1 添加GitHub账号

点击File->setting->Version Control->GitHub

Git(分布式版本管理工具)_第67张图片

使用密码登录很容易出现401等连接失败的情况,是由于网络的原因,可以使用token的方式。

Git(分布式版本管理工具)_第68张图片

  • token值需要在GitHub上面设置

Git(分布式版本管理工具)_第69张图片Git(分布式版本管理工具)_第70张图片

  • 点击创建token按钮

Git(分布式版本管理工具)_第71张图片

  • 填写token的名称,随意填写,并且勾选下面的所有选项

Git(分布式版本管理工具)_第72张图片

  • 复制token字符到idea中登录认证并绑定GitHub

Git(分布式版本管理工具)_第73张图片

  • 使用token登录

Git(分布式版本管理工具)_第74张图片

8.2 推送项目到GitHub

Git(分布式版本管理工具)_第75张图片

  • 填写仓库名称和别名

Git(分布式版本管理工具)_第76张图片

8.3 push推送本地库的内容到远程库

右键点击项目,可以将当前分支的内容 push 到 GitHub 的远程仓库中。

Git(分布式版本管理工具)_第77张图片

  • 点击push推送到GitHub上面

Git(分布式版本管理工具)_第78张图片

PS:push 是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致,push 的操作是会被拒绝的。也就是说,要想 push 成功,一定要保证本地库的版本要比远程库的版本高!因此一个成熟的程序员在动手改本地代码之前,一定会先检查下远程库跟本地代码的区别!如果本地的代码版本已经落后,切记要先 pull 拉取一下远程库的代码,将本地代码更新到最新以后,然后再修改,提交,推送

8.4 pull拉取远程库到本地库

在idea中拉取远程仓库最新的代码到项目当中。

Git(分布式版本管理工具)_第79张图片

  • 勾选指定的分支,进行pull操作

Git(分布式版本管理工具)_第80张图片

**注意:pull 是拉取远端仓库代码到本地同步,如果远程库代码和本地库代码不一致,会自动
**合并,如果自动合并失败,还会涉及到手动解决冲突的问题。

8.5 clone克隆远程库到本地

  • 在idea创建项目界面点击Get from Version Control按钮

Git(分布式版本管理工具)_第81张图片

  • 填写仓库URL和克隆的本地文件夹位置

Git(分布式版本管理工具)_第82张图片

9. 码云(代码托管中心)

码云是一个和GayHub有着相同功能的代码托管网站,区别是GayHub服务器在国外,访问会出现卡顿或登录失败的现象,而码云是国内的网站,访问速度相对要快很多。

9.1 码云账号注册

官网地址:https://gitee.com/

Git(分布式版本管理工具)_第83张图片

  • 输入个人信息,进行注册

Git(分布式版本管理工具)_第84张图片

9.2 码云创建远程库

点击首页右上角的加号,选择新建仓库

Git(分布式版本管理工具)_第85张图片

填写仓库名称,路径和选择是否开源(共开库或私有库),点击创建按钮即可。

Git(分布式版本管理工具)_第86张图片

9.3 IDEA集成码云

9.3.1 安装码云插件

Idea 默认不带码云插件,所以第一步要安装 Gitee 插件。

  • 在Plugins页面搜索gitee,点击install按钮下载。

Git(分布式版本管理工具)_第87张图片

  • 绑定gitee账号

Git(分布式版本管理工具)_第88张图片

9.3.2 push代码到码云

Git(分布式版本管理工具)_第89张图片

  • 自定义远程连接gitee仓库的链接地址

  • 给远程库链接定义个name,然后在URL里面填入码云远程库的 HTTPS 链接即可。

Git(分布式版本管理工具)_第90张图片

只要码云远程库链接定义好以后,对码云远程库进行 pull 和 clone 的操作和 Github 一致。

9.4 码云复制GitHub项目

码云提供了直接复制 GitHub 项目的功能,方便我们做项目的迁移和下载。

  • 在新建仓库界面点击导入按钮。

Git(分布式版本管理工具)_第91张图片

  • 此处填写GitHub的仓库连接即可

Git(分布式版本管理工具)_第92张图片

  • 如果GitHub上的仓库更新了,可以点击强制同步刷新按钮

Git(分布式版本管理工具)_第93张图片

10 GitLab(自建代码托管平台)

10.1 GitLab 简介

**GitLab 是由 GitLabInc.开发,使用 MIT 许可证的基于网络的 Git 仓库管理工具,且具有wiki 和 issue 跟踪功能。使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务。GitLab 由乌克兰程序员 DmitriyZaporozhets 和 ValerySizov 开发,它使用 Ruby 语言写成。后来,一些部分用 Go 语言重写。截止 2018 年 5 月,该公司约有 290 名团队成员,以及 2000 多名开源贡献者。GitLab 被 IBM,Sony,JülichResearchCenter,NASA,Alibaba,
**Invincea,O’ReillyMedia,Leibniz-Rechenzentrum(LRZ),CERN,SpaceX 等组织使用。

  • 官网地址

  • 官网地址:https://about.gitlab.com/

  • **安装说明:https://about.gitlab.com/installation

    **

10.2 GitLab 安装

需要一台CentOS7 虚拟机。

10.2.1 GitLab 安装包

Yum 在线安装 gitlab-ce 时,需要下载几百MB的安装文件,非常耗时,所以提前把所需 RPM 包下载到本地,然后使用离线 rpm 的方式安装。

  • 下载地址:

  • https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-13.10.2-ce.0.el7.x86_64.rpm

  • 这里将下载好的安装包拖动到/opt/module 目录下

img

10.2.2 编写安装脚本

安装 gitlab 步骤比较繁琐,因此我们可以参考官网编写 gitlab 的安装脚本。

  • 创建一个 gitlab-install.sh文件
sudo yum install -y curl policycoreutils-python openssh-server cronie
sudo lokkit -s http -s ssh
sudo yum install -y postfix
sudo service postfix start
sudo chkconfig postfix on
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo EXTERNAL_URL="http://gitlab.example.com" yum -y install gitlab-ce
  • 然后给脚本添加执行的权限
chmod 777 -R gitlab-install.sh
  • 执行脚本
./gitlab-install.sh

10.2.3 初始化GitLab

gitlab-ctl reconfigure

10.2.4 启动GitLab程序

执行以下命令启动 GitLab 服务,停止命令执行 gitlab-ctl stop

gitlab-ctl start

10.2.5 访问GitLab界面

使用主机名或者 IP 地址即可访问 GitLab 服务

Git(分布式版本管理工具)_第94张图片

第一次登陆需要设置账号密码。

  • 登录后的界面

Git(分布式版本管理工具)_第95张图片

10.2.6 GitLab创建远程库

在登录后的界面点击new project按钮

Git(分布式版本管理工具)_第96张图片

点击创建空项目

Git(分布式版本管理工具)_第97张图片

填写仓库名称并且创建项目

Git(分布式版本管理工具)_第98张图片

创建完成后的仓库界面

Git(分布式版本管理工具)_第99张图片

10.3 IDEA 集成 GitLab

  • 首先需要安装GitLab插件

Git(分布式版本管理工具)_第100张图片

第二步添加GitLab的服务器地址

Git(分布式版本管理工具)_第101张图片

10.3.1 push代码到GitLab

复制GitLab上的HTTPS方式clone地址,注意需要将中间的gitlab.example示例主机名改成自己的本地主机名称。

Git(分布式版本管理工具)_第102张图片

在idea中push代码。并创建自定义的远程连接

Git(分布式版本管理工具)_第103张图片

最后查看gitlab的仓库信息,可以看到本地项目成功的被push推送到了GitLab服务器上。

Git(分布式版本管理工具)_第104张图片

只要 GitLab 的远程库连接定义好以后,对 GitLab 远程库进行 pull 和 clone 的操作和 Github 和码云一致,此处不再赘述

你可能感兴趣的:(git,github)