Gitlab部署与应用_第1张图片

[root@localhost ~]# mkdir xgp 
[root@localhost ~]# cd xgp/
[root@localhost xgp]# git init 
初始化空的 Git 版本库于 /root/xgp/.git/
[root@localhost xgp]# vim xgp.txt
[root@localhost xgp]# cat xgp.txt 
111master
[root@localhost xgp]# git add  xgp.txt
[root@localhost xgp]# git commit -m "第一次提交从master分支"
[master(根提交) b211b8e] 第一次提交从master分支
 1 file changed, 1 insertion(+)
 create mode 100644 xgp.txt

首先,我们创建 dev 分支,然后切换到 dev 分支:
[root@localhost xgp]# git checkout -b dev
切换到一个新分支 'dev'

Gitlab部署与应用
git checkout 命令加上-b 参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev
Switched to branch 'dev'

然后,用 git branch 命令查看当前分支:
[root@localhost xgp]# git branch

  • dev
    Master
    Gitlab部署与应用

git branch 命令会列出所有分支,当前分支前面会标一个*号。

然后,我们就可以在 dev 分支上正常提交,比如对 xgp.txt 做个修改,加上一行:
[root@localhost xgp]# cat xgp.txt
111master
Qqqqdve 添加的

然后提交:

[root@localhost xgp]# git add xgp.txt
[root@localhost xgp]# git commit  -m "第一次dev"
[dev eac3426] 第一次dev
 1 file changed, 1 insertion(+)

现在, dev 分支的工作完成,我们就可以切换回 master 分支:
[root@localhost xgp]# git checkout master
切换到分支 'master'
Gitlab部署与应用_第2张图片
切换回 master 分支后,再查看一个 xgp.txt 文件,刚才添加的内容不见了!因为那个提交是在 dev 分支上,而 master分支此刻的提交点并没有变:
[root@localhost xgp]# cat xgp.txt
111master

现在,我们把 dev 分支的工作成果合并到 master 分支上:

[root@localhost xgp]# git merge dev 
更新 b211b8e..eac3426
Fast-forward
 xgp.txt | 1 +
 1 file changed, 1 insertion(+)

git merge 命令用于合并指定分支到当前分支。合并后,再查看 xgp.txt 的内容,就可以看到,和 dev 分支的最新提交是完全一样的。
注意到上面的 Fast-forward 信息, Git 告诉我们,这次合并是“快进模式”,也就是直接把 master 指向 dev 的当前提交,所以合并速度非常快。
当然,也不是每次合并都能 Fast-forward,我们后面会讲其他方式的合并。
合并完成后,就可以放心地删除 dev 分支了:

查看一下

[root@localhost xgp]# git log 
commit eac342633a72b3590a019e4d758f4a60707acda2
Author: admin 
Date:   Thu Nov 14 09:18:47 2019 +0800

    第一次dev

commit b211b8ef636e987166fb4a056fb778020f6518ae
Author: admin 
Date:   Thu Nov 14 09:12:11 2019 +0800

    第一次提交从master分支

删除dev分支
[root@localhost xgp]# git branch -d dev 
已删除分支 dev(曾为 eac3426)。

删除后,查看 branch,就只剩下 master 分支了:
[root@localhost xgp]# git branch 
* master

因为创建、合并和删除分支非常快,所以 Git 鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在 master
分支上工作效果是一样的,但过程更安全。
小结
Git 鼓励大量使用分支:
查看分支: git branch
创建分支: git branch
切换分支: git checkout
创建+切换分支: git checkout -b
合并某分支到当前分支: git merge
删除分支: git branch -d

解决冲突
人生不如意之事十之八九,合并分支往往也不是一帆风顺的。
准备新的 xgp 分支,继续我们的新分支开发:

[root@localhost xgp]# git checkout  -b xgp
切换到一个新分支 'xgp'
修改 xgp.txt 最后一行,改为:
[root@localhost xgp]# cat xgp.txt 
111master
qqqqdve
冲突    添加
在 xgp分支上提交:
[root@localhost xgp]# git add xgp.txt
[root@localhost xgp]# git commit -m "xgp 冲突"
[xgp 9a92c8f] xgp 冲突
 1 file changed, 1 insertion(+)

切换到 master 分支:
[root@localhost xgp]# git checkout  master 
切换到分支 'master'
[root@localhost xgp]# cat xgp.txt 
111master
Qqqqdve

在 master 分支上把 xgp.txt 文件的最后一行改为:
[root@localhost xgp]# cat xgp.txt 
111master
qqqqdve
bug冲突   添加

提交:
[root@localhost xgp]# git add xgp.txt
[root@localhost xgp]# git commit -m "1 提交 冲突"
[master 43f4ad7] 1 提交 冲突
 1 file changed, 1 insertion(+)

现在, master 分支和 xgp 分支各自都分别有新的提交,变成了这样:
Gitlab部署与应用_第3张图片
这种情况下, Git 无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,我们试试看:
[root@localhost xgp]# git merge xgp
自动合并 xgp.txt
冲突(内容):合并冲突于 xgp.txt
自动合并失败,修正冲突然后提交修正的结果。

果然冲突了! Git 告诉我们, xgp.txt 文件存在冲突,必须手动解决冲突后再提交。 git status 也可以告诉我们冲突的文件:

[root@localhost xgp]# git  status 
# 位于分支 master
# 您有尚未合并的路径。
#   (解决冲突并运行 "git commit")
#
# 未合并的路径:
#   (使用 "git add ..." 标记解决方案)
#
#   双方修改:     xgp.txt
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

我们可以直接查看 xgp.txt 的内容:
[root@localhost xgp]# cat xgp.txt 
111master
qqqqdve
<<<<<<< HEAD    #删除
bug冲突
=======   #删除
冲突
-----------xgp    #删除

再提交:
[root@localhost xgp]# vim xgp.txt 
[root@localhost xgp]# git add xgp.txt
[root@localhost xgp]# git commit -m "解决冲突"
[master 8a29ce6] 解决冲突

现在, master 分支和xgp分支变成了下图所示:

Gitlab部署与应用_第4张图片

用带参数的 git log 也可以看到分支的合并情况
[root@localhost xgp]# git log --graph --pretty=oneline --abbrev-commit

  • 8a29ce6 解决冲突
    |\
    | * 9a92c8f xgp 冲突
  • | 43f4ad7 1 提交 冲突
    |/ ``
  • eac3426 第一次dev
  • b211b8e 第一次提交从master分支

[root@localhost xgp]# cat xgp.txt
111master
qqqqdve
bug冲突
冲突

最后,删除 xgp 分支:

[root@localhost xgp]# git branch -d xgp 
已删除分支 xgp(曾为 9a92c8f)。

工作完成。
小结
当 Git 无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
用 git log --graph 命令可以看到分支合并图。

分支管理策略
通常,合并分支时,如果可能, Git 会用 Fast forward 模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用 Fast forward 模式, Git 就会在 merge 时生成一个新的 commit,这样,从分支历史上就可以看出分
支信息。
下面我们实战一下--no-ff 方式的 git merge:
首先,仍然创建并切换 dev 分支:

[root@localhost xgp]#  git checkout  -b dev
切换到一个新分支 'dev'

修改 readme.txt 文件,并提交一个新的 commit:
[root@localhost xgp]# cat xgp.txt 
111master
qqqqdve
bug冲突
冲突
强制禁用 Fast forward  #添加

[root@localhost xgp]# git add  xgp.txt   # 提交到缓存
[root@localhost xgp]# git commit -m "强制禁用 Fast forward "   #提交到版本库
[dev ea40f66] 强制禁用 Fast forward
 1 file changed, 1 insertion(+)

现在,我们切换回 master:

[root@localhost xgp]# git checkout master
切换到分支 'master'

准备合并 dev 分支,请注意--no-ff 参数,表示禁用 Fast forward:
[root@localhost xgp]# git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
 xgp.txt | 1 +
 1 file changed, 1 insertion(+)

因为本次合并要创建一个新的 commit,所以加上-m 参数,把 commit 描述写进去。
合并后,我们用 git log 看看分支历史:

[root@localhost xgp]# git log --graph --pretty=oneline --abbrev-commit
*   50623ba merge with no-ff
|\  
| * ea40f66 强制禁用 Fast forward
|/  
*   8a29ce6 解决冲突
|\  
| * 9a92c8f xgp 冲突
* | 43f4ad7 1 提交 冲突
|/  
* eac3426 第一次dev
* b211b8e 第一次提交从master分支

可以看到,不使用 Fast forward 模式, merge 后就像这样:
Gitlab部署与应用_第5张图片

Bug 分支
软件开发中, bug 就像家常便饭一样。有了 bug 就需要修复,在 Git 中,由于分支是如此的强大,所以,每个 bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。当你接到一个修复一个代号 101 的 bug 的任务时,很自然地,你想创建一个分支 issue-101 来修复它,但是,等等,当前正在 dev 上进行的工作还没有提交:

并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需 1 天时间。但是,必须在两个小时内修复该
bug,怎么办?
幸好, Git 还提供了一个 stash 功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:

制作一个测试文件

[root@localhost xgp]# vim xgp.txt
[root@localhost xgp]# cat xgp.txt 
111master
qqqqdve
bug冲突
冲突
强制禁用 Fast forward
测试存储区 #添加
[root@localhost xgp]# vim xxx.txt
[root@localhost xgp]# git add  xgp.txt  xxx.txt
[root@localhost xgp]# git status 
位于分支 dev
 要提交的变更:
   (使用 "git reset HEAD ..." 撤出暂存区)

修改:      xgp.txt

 未跟踪的文件:
   (使用 "git add ..." 以包含要提交的内容)

    xxx.txt 
[root@localhost xgp]# git stash 
Saved working directory and index state WIP on dev: ea40f66 强制禁用 Fast forward  HEAD 现在位于 ea40f66强制禁用 Fast forward
[root@localhost xgp]# git status 
# 位于分支 master
无文件要提交,干净的工作区

现在,用 git status 查看工作区,就是干净的(除非有没有被 Git 管理的文件),因此可以放心地创建分支来修复bug。
首先确定要在哪个分支上修复 bug,假定需要在 master 分支上修复,就从 master 创建临时分支:
[root@localhost xgp]# git checkout dev
切换到分支 'dev'
现在修复 bug,需要把“Git is free software ...”改为“Git is a free software ...”, 然后用 git stash pop,恢复的同时把 stash 内容也删了:
先查看一下

[root@localhost xgp]# git stash  list
stash@{0}: WIP on master: 88eeb08 提交
[root@localhost xgp]# git stash  show
 xgp.txt | 1 +
 xxx.txt | 1 +
 2 files changed, 2 insertions(+)
     恢复
[root@localhost xgp]# git stash  pop 
位于分支 dev
 要提交的变更:
   (使用 "git reset HEAD ..." 撤出暂存区)

    新文件:    xxx.txt

 尚未暂存以备提交的变更:
   (使用 "git add ..." 更新要提交的内容)
   (使用 "git checkout -- ..." 丢弃工作区的改动)

    修改:      xgp.txt

丢弃了 refs/stash@{0} (f5b7fdc796da9978e268083f6985ed5ba28ec373)

[root@localhost xgp]# git status 
位于分支 dev
要提交的变更:
   (使用 "git reset HEAD ..." 撤出暂存区)

    新文件:    xxx.txt

 尚未暂存以备提交的变更:
   (使用 "git add ..." 更新要提交的内容)
  (使用 "git checkout -- ..." 丢弃工作区的改动)

修改:      xgp.txt

[root@localhost xgp]# git commit  -m "测试存储区 master提交暂存区 devtij交版本"
[dev 1256166] 测试存储区 master提交暂存区 devtij交版本
 1 file changed, 1 insertion(+)
 create mode 100644 xxx.txt

[root@localhost xgp]# git status 
 位于分支 dev
尚未暂存以备提交的变更:
   (使用 "git add ..." 更新要提交的内容)
   (使用 "git checkout -- ..." 丢弃工作区的改动)

    修改:      xgp.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")   #需要提交

[root@localhost xgp]# git add *      #提交

查看一下
[root@localhost xgp]# ls
xgp.txt xxx.txt #可以看到已经恢复成功

切换到master分支合并分支
[root@localhost xgp]# git merge dev
更新 88eeb08..a1a9698
Fast-forward
xgp.txt | 1 +
xxx.txt | 1 +
2 files changed, 2 insertions(+)
create mode 100644 xxx.txt

小结
修复 bug 时,我们会通过创建新的 bug 分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场 git stash 一下,然后去修复 bug,修复后,再 git stash pop,回到工作现场。

Feature 分支
软件开发中,总有无穷无尽的新的功能要不断添加进来。
添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建
一个 feature 分支,在上面开发,完成后,合并,最后,删除该 feature 分支。
现在,你终于接到了一个新任务:开发代号为 Vulcan 的新功能,该功能计划用于下一代星际飞船。
于是准备开发:

[root@localhost xgp]# git checkout dev 
A   xx.txt
切换到分支 'dev'
[root@localhost xgp]# git checkout dev 
A   xx.txt
切换到分支 'dev'
[root@localhost xgp]# vim xgp.txt 
[root@localhost xgp]# vim xx.txt 
[root@localhost xgp]# git add  *
[root@localhost xgp]# git stash 
Saved working directory and index state WIP on dev: a1a9698 存储qu
HEAD 现在位于 a1a9698 存储qu
[root@localhost xgp]# git status 
# 位于分支 dev
无文件要提交,干净的工作区
[root@localhost xgp]# git stash apply 
 位于分支 dev
 要提交的变更:
   (使用 "git reset HEAD ..." 撤出暂存区)

    新文件:    xx.txt

 尚未暂存以备提交的变更:
   (使用 "git add ..." 更新要提交的内容)
  (使用 "git checkout -- ..." 丢弃工作区的改动)

    修改:      xgp.txt

[root@localhost xgp]# git stash list 
stash@{0}: WIP on dev: a1a9698 存储qu
[root@localhost xgp]# git stash drop 
丢弃了 refs/stash@{0} (0ab463ebbc4ee7f3a19cd8cadafd9ebe7b390aa9)

5 分钟后,开发完毕:

[root@localhost xgp]# git commit  -m "强制删除分支"
[dev 81d2812] 强制删除分支
 1 file changed, 2 insertions(+)
 create mode 100644 xx.txt

切回 dev,准备合并:

[root@localhost xgp]# git checkout  master 
M   xgp.txt
切换到分支 'master'
[root@localhost xgp]# git branch  -d dev 
error: 分支 'dev' 没有完全合并。
如果您确认要删除它,执行 'git branch -D dev'。
强制删除
[root@localhost xgp]# git branch -D dev
已删除分支 dev(曾为 81d2812)。

多人协作
推送分支
推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样, Git 就会把该分支推送
到远程库对应的远程分支上:
浏览器登陆github换个密钥
Gitlab部署与应用_第6张图片
Gitlab部署与应用_第7张图片
[root@localhost ~]# ssh-keygen -t rsa -C “[email protected]“ #linux生成密钥
然后把密钥放在githup放置密钥的地方
Gitlab部署与应用_第8张图片
把刚刚复制的到Linux里克隆到根目录和xgp目录
Gitlab部署与应用_第9张图片
Gitlab部署与应用_第10张图片

  302  cd
  303  ssh-keygen -t rsa -C "[email protected]"
  304  cat /root/.ssh/id_rsa.pub 
  305  git clone [email protected]:xgp666/xgp.git
  306  git clone [email protected]:xgp666/test.git
  307  cd xgp/
  308  git clone [email protected]:xgp666/test.git
  309  cd test/
  310  git checkout -b dev
  311  vim index.html
  312  ls
  313  git add index.html
  314  git commit -m "from /xgp"
  315  git push origin dev

浏览器查看一下
Gitlab部署与应用_第11张图片

删除远程分支
[root@localhost test]# git branch -d dev
error: 无法删除您当前所在的分支 'dev'。
[root@localhost test]# git branch -r -d origin/dev
已删除远程分支 origin/dev(曾为 63aeb0a)。
[root@localhost test]# git push origin :dev
To [email protected]:xgp666/test.git

  • [deleted] dev
    Gitlab部署与应用_第12张图片
    删除库

    Gitlab部署与应用
    Gitlab部署与应用_第13张图片
    Gitlab部署与应用_第14张图片
    持续集成之 Gitlab 安装
    Gitlab部署与应用_第15张图片
    rpm -ivh gitlab-ce-11.9.8-ce.0.el6.x86_64.rpm #安装

  1. 配置启动 gitlab
    gitlab-ctl reconfigure
  2. 查看端口
    Gitlab部署与应用
  3. 浏览器登陆
    Gitlab部署与应用_第16张图片

Gitlab部署与应用_第17张图片

Gitlab部署与应用_第18张图片

创建项目

Gitlab部署与应用_第19张图片

Gitlab部署与应用_第20张图片

克隆项目到本地
项目路径:
Gitlab部署与应用_第21张图片
Linux克隆项目
git clone [email protected]:root/xgp-demo.git
Gitlab部署与应用_第22张图片


336  git clone  [email protected]:root/xgp-demo.git
  337  cd xgp-demo/
  338  vim xgp.txt
  339  git add  xgp.txt
  340  git commit -m "test"
  341  git push  origin master

修改git配置文件

vim  /etc/gitlab/gitlab.rb  修改
external_url 'http://192.168.1.30'  #13
初始化一下,重启一下
gitlab-ctl  reconfigure
gitlab-ctl  restart

浏览器查看,时间比较长

Gitlab部署与应用_第23张图片
Gitlab部署与应用_第24张图片