版本管理之gitlab实践教程 基础篇 1
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.****.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
这几篇文章主要面向对git和gitlab稍有基础,但是又不太会用的使用者,通过这几文章你可以学到如下gitlab的使用方法:
- sshkey的设定
- 创建项目
- 分支操作
- 用户/权限/组的操作
- 配置项目可见性
- Merge Request
- Issues操作
- 创建Wiki
- 备份
- 还原
- Webhook
- Private Token
- API
基本会避开内容的解释,手边有环境的话每篇文章跟着命令行执行基本5分钟之内会结束。这篇文章会介绍一下sshkey的设定,以及project的创建,分支的创建合并删除等常见操作。
前提准备
使用docker-compose设定启动所需参数如下:
[[email protected] gitlab]$ cat docker-compose.yml version: '2' services: # Version Control service: Gitlab gitlab: image: 192.168.32.131:5000/gitlab:8.12.9 ports: - "80:80" - "30022:22" - "443:443" volumes: - /home/local/git/log/:/var/log/gitlab - /home/local/git/data/:/var/opt/gitlab - /home/local/git/conf/:/etc/gitlab restart: "no"[[email protected] gitlab]$
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
sshkey的设定
生成sshkey
使用ssh-******,一路enter,可以生成缺省的rsa方式的sshkey。
[[email protected]1 gitlab]# ssh-******Generating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa.Your public key has been saved in /root/.ssh/id_rsa.pub.The key fingerprint is:8b:c7:2d:9a:29:1a:70:e5:9e:bf:de:a1:ac:e0:7e:20 [email protected]1The key's randomart image is:+--[ RSA 2048]----+| || || . || o ||. . . S ||Eo.. . o o || .o.o . * . || . ooo B o || .+o.+X.. |+-----------------+[[email protected]1 gitlab]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
生成文件内容说明
项目 | 详细说明 |
---|---|
/root/.ssh/id_rsa | rsa私钥 |
/root/.ssh/id_rsa.pub | rsa公钥 |
设定gitlab
将上诉生成的rsa公钥内容拷到gitlab中,公钥信息如下:
[root@ku8-1 .ssh]# cat /root/.ssh/id_rsa.pubssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAeb/ZpgS459ji4+PgkruGsc2x5uswsAWu0Gb1xdUO1BmsBmbOoxcgAoLDepkJzM6O/Qy0oBpPdRbhkxQguqjOdtu9kYgaUrdTYhgAgliEuThQFsAOYKaNvUppAl1xYddO26xnBAxKBEEbA3WeHSM4T4qhlDyE12xjo71s/J2sKIGXeuZ3m2572MxTCSHYrvCdFKuUqaj3GTzVGhit8Jw1HcIyavYATXxVpYIQcQSK5EDjDPgOh8sM521czqKoWCXulq+PcvkvMuaLbQ7xQ2XZsOurLcMyeLY+T7xGH0mqCBBwGJrT8wFdB44Jv7vNuDmL0NKakuUgtRUwvhCo8LJZ root@ku8-1[root@ku8-1 .ssh]#
- 1
- 2
- 3
gitlab登录之后,profile settings -> ssh keys,添加ssh key
验证
使用container的IP进行直接确认,ssh连接[email protected]方式,git为此镜像内部创建的用户,最简单的方式可以使用Container的IP便可验证,只是IP分配可能会变,可以结合external_url进行设定,出现”Welcome to Gitlab, xxxx”的信息表示连接OK了。
[root@ku8-1 ~]# ssh -T [email protected]Welcome to GitLab, Administrator![root@ku8-1 ~]#
- 1
- 2
- 3
创建项目
首先使用git创建本地项目,然后将其push至gitlab远端仓库。其前提有如下两条:
项番 | 详细 | 版本 |
---|---|---|
No.1 | git已安装 | 1.8.3.1 |
No.2 | gitlab已运行,并且可以访问 | 8.12.9(CE) |
git版本确认
[root@hpdevops10 ~]# git versiongit version 1.8.3.1[root@hpdevops10 ~]#
- 1
- 2
- 3
创建demoprj
使用root用户登录,创建一个Private的仓库命令为demoprj,group为default的root
事前设定
git提交之前,需要设定如下项目以保证正常提交, 具体信息请设定为自己的信息。
[root@ku8-1 ~]# git config --global user.name "liumiaocn"[root@ku8-1 ~]# git config --global user.email "liumiaocn@outlook.com"[root@ku8-1 ~]#
- 1
- 2
- 3
创建第一个git仓库
使用git add/commit命令之后即可将本地内容push到remote
[[email protected]1 ~]# git clone [email protected]:root/demoprj.gitCloning into 'demoprj'...warning: You appear to have cloned an empty repository.[[email protected]1 ~]# cd demoprj
- 1
- 2
- 3
- 4
创建之后,通过
git add一个新建文件
[root@ku8-1 demoprj]# echo "Hello, LiuMiao" >README.md[root@ku8-1 demoprj]# git add *
- 1
- 2
确认状态
[[email protected]1 demoprj]# git status# On branch master## Initial commit## Changes to be committed:# (use "git rm --cached <file>..." to unstage)## new file: README.md#[[email protected]1 demoprj]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
git commit提交
[[email protected] demoprj]# git commit -m "initial"[master (root-commit) 70dfd04] initial 1 file changed, 1 insertion(+) create mode 100644 README.md[[email protected] demoprj]#
- 1
- 2
- 3
- 4
- 5
git push
[root@ku8-1 demoprj]# git push -u origin masterCounting objects: 3, done.Writing objects: 100% (3/3), 221 bytes | 0 bytes/s, done.Total 3 (delta 0), reused 0 (delta 0)To git@172.17.0.2:root/demoprj.git * [new branch] master -> masterBranch master set up to track remote branch master from origin.[root@ku8-1 demoprj]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
结果确认
在gitlab上确认project信息,可以看到刚刚更新的Hello, LiuMiao。
刚刚创建的仓库信息
分支操作
创建分支
创建一个名为develop的分支
[root@ku8-1 demoprj]# git branch develop[root@ku8-1 demoprj]#
- 1
- 2
确认分支情况,加上default的master分支,就两个,而且master分支前面的*表明当前活动分支为master
[root@ku8-1 demoprj]# git branch develop* master[root@ku8-1 demoprj]#
- 1
- 2
- 3
- 4
分支切换
使用checkout命令可以切换到创建的develop分支
[root@ku8-1 demoprj]# git checkout developSwitched to branch 'develop'[root@ku8-1 demoprj]#
- 1
- 2
- 3
确认当前活动分支已经是branch
[root@ku8-1 demoprj]# git branch* develop master[root@ku8-1 demoprj]#
- 1
- 2
- 3
- 4
- 5
当然也可以使用git checkout -b develop实现创建+切换的功能
分支更新
修改README.md到branch分支并push
[root@ku8-1 demoprj]# echo "Information from develop branch" >>README.md [root@ku8-1 demoprj]# git add README.md [root@ku8-1 demoprj]# git status# On branch develop# Changes to be committed:# (use "git reset HEAD <file>..." to unstage)## modified: README.md#[root@ku8-1 demoprj]# git commit -m "for branch"[develop 4b76d48] for branch 1 file changed, 1 insertion(+)[root@ku8-1 demoprj]# git push -u origin developCounting objects: 5, done.Writing objects: 100% (3/3), 285 bytes | 0 bytes/s, done.Total 3 (delta 0), reused 0 (delta 0)remote: remote: Create merge request for develop:remote: http://e5091e18d568/root/demoprj/merge_requests/new?merge_request%5Bsource_branch%5D=developremote: To git@172.17.0.2:root/demoprj.git * [new branch] develop -> developBranch develop set up to track remote branch develop from origin.[root@ku8-1 demoprj]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
结果确认
push之后可在gitlab上确认相关信息
切换回master
[root@ku8-1 demoprj]# cat README.md Hello, LiuMiaoInformation from develop branch[root@ku8-1 demoprj]# git checkout masterSwitched to branch 'master'[root@ku8-1 demoprj]# cat README.md Hello, LiuMiao[root@ku8-1 demoprj]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
merge操作
使用no-ff选项进行合并可以将comment一起转移,能够清晰的看出从哪儿来,做了哪些改变。
merge之前的log. ff是fast forward的缩写,ff方式在合并时不会生成一个新的合并节点,而no-ff则会生成。所以一般来说使用no-ff在管理起来更加方便。
[root@ku8-1 demoprj]# git logcommit 70dfd04b7c718318e5926ad5ee963c3573ff8f74Author: liumiaocn <liumiaocn@outlook.com>Date: Tue Jul 4 04:10:56 2017 -0400 initial[root@ku8-1 demoprj]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
merge操作进行合并
[root@ku8-1 demoprj]# git merge develop --no-ffMerge made by the 'recursive' strategy. README.md | 1 + 1 file changed, 1 insertion(+)[root@ku8-1 demoprj]#
- 1
- 2
- 3
- 4
- 5
合并之后的确认,可以看到合并节点的形成(Merge branch ‘develop’)
[[email protected] demoprj]# git logcommit 23c9620e51dbbce4715ce686e1d4ec48e496c894Merge: 70dfd04 4b76d48Author: liumiaocn <[email protected]>Date: Tue Jul 4 05:12:54 2017 -0400 Merge branch 'develop'commit 4b76d48f778bbcc8a88c38e65ba6734adbd53580Author: liumiaocn <[email protected]>Date: Tue Jul 4 04:49:42 2017 -0400 for branchcommit 70dfd04b7c718318e5926ad5ee963c3573ff8f74Author: liumiaocn <[email protected]>Date: Tue Jul 4 04:10:56 2017 -0400 initial[[email protected]1 demoprj]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
push操作
push之后就完成了将分支的内容合并回master的全部操作。
[root@ku8-1 demoprj]# git push origin masterCounting objects: 1, done.Writing objects: 100% (1/1), 218 bytes | 0 bytes/s, done.Total 1 (delta 0), reused 0 (delta 0)To git@172.17.0.2:root/demoprj.git 70dfd04..23c9620 master -> master[root@ku8-1 demoprj]# [root@ku8-1 demoprj]# cat README.md Hello, LiuMiaoInformation from develop branch[root@ku8-1 demoprj]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
分支删除
根据2017年DORA的DevOps报告提出的那样,分支尽量会控制在三条以下,其本质则是将持续集成和LeanIT进行扩展,减少中间环节的WIP,尽可能早集成,分支的原则也可以遵循“用后即焚”,删除分支使用–delete即可。
[root@ku8-1 demoprj]# git push origin --delete developTo git@172.17.0.2:root/demoprj.git - [deleted] develop[root@ku8-1 demoprj]#
- 1
- 2
- 3
- 4
结果确认
在gitlab上则看到,branch分支已经被删除了。
总结
这篇文章介绍了sshkey的设定,以及project的创建,分支的创建合并删除等常见操作,接下来会继续介绍rebase操作。
给我老师的人工智能教程打call!http://blog.****.net/jiangjunshow
这几篇文章主要面向对git和gitlab稍有基础,但是又不太会用的使用者,通过这几文章你可以学到如下gitlab的使用方法:
- sshkey的设定
- 创建项目
- 分支操作
- 用户/权限/组的操作
- 配置项目可见性
- Merge Request
- Issues操作
- 创建Wiki
- 备份
- 还原
- Webhook
- Private Token
- API
基本会避开内容的解释,手边有环境的话每篇文章跟着命令行执行基本5分钟之内会结束。这篇文章会介绍一下sshkey的设定,以及project的创建,分支的创建合并删除等常见操作。
前提准备
使用docker-compose设定启动所需参数如下:
[[email protected] gitlab]$ cat docker-compose.yml version: '2' services: # Version Control service: Gitlab gitlab: image: 192.168.32.131:5000/gitlab:8.12.9 ports: - "80:80" - "30022:22" - "443:443" volumes: - /home/local/git/log/:/var/log/gitlab - /home/local/git/data/:/var/opt/gitlab - /home/local/git/conf/:/etc/gitlab restart: "no"[[email protected] gitlab]$
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
sshkey的设定
生成sshkey
使用ssh-******,一路enter,可以生成缺省的rsa方式的sshkey。
[[email protected]1 gitlab]# ssh-******Generating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa.Your public key has been saved in /root/.ssh/id_rsa.pub.The key fingerprint is:8b:c7:2d:9a:29:1a:70:e5:9e:bf:de:a1:ac:e0:7e:20 [email protected]1The key's randomart image is:+--[ RSA 2048]----+| || || . || o ||. . . S ||Eo.. . o o || .o.o . * . || . ooo B o || .+o.+X.. |+-----------------+[[email protected]1 gitlab]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
生成文件内容说明
项目 | 详细说明 |
---|---|
/root/.ssh/id_rsa | rsa私钥 |
/root/.ssh/id_rsa.pub | rsa公钥 |
设定gitlab
将上诉生成的rsa公钥内容拷到gitlab中,公钥信息如下:
[root@ku8-1 .ssh]# cat /root/.ssh/id_rsa.pubssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAeb/ZpgS459ji4+PgkruGsc2x5uswsAWu0Gb1xdUO1BmsBmbOoxcgAoLDepkJzM6O/Qy0oBpPdRbhkxQguqjOdtu9kYgaUrdTYhgAgliEuThQFsAOYKaNvUppAl1xYddO26xnBAxKBEEbA3WeHSM4T4qhlDyE12xjo71s/J2sKIGXeuZ3m2572MxTCSHYrvCdFKuUqaj3GTzVGhit8Jw1HcIyavYATXxVpYIQcQSK5EDjDPgOh8sM521czqKoWCXulq+PcvkvMuaLbQ7xQ2XZsOurLcMyeLY+T7xGH0mqCBBwGJrT8wFdB44Jv7vNuDmL0NKakuUgtRUwvhCo8LJZ root@ku8-1[root@ku8-1 .ssh]#
- 1
- 2
- 3
gitlab登录之后,profile settings -> ssh keys,添加ssh key
验证
使用container的IP进行直接确认,ssh连接[email protected]方式,git为此镜像内部创建的用户,最简单的方式可以使用Container的IP便可验证,只是IP分配可能会变,可以结合external_url进行设定,出现”Welcome to Gitlab, xxxx”的信息表示连接OK了。
[root@ku8-1 ~]# ssh -T [email protected]Welcome to GitLab, Administrator![root@ku8-1 ~]#
- 1
- 2
- 3
创建项目
首先使用git创建本地项目,然后将其push至gitlab远端仓库。其前提有如下两条:
项番 | 详细 | 版本 |
---|---|---|
No.1 | git已安装 | 1.8.3.1 |
No.2 | gitlab已运行,并且可以访问 | 8.12.9(CE) |
git版本确认
[root@hpdevops10 ~]# git versiongit version 1.8.3.1[root@hpdevops10 ~]#
- 1
- 2
- 3
创建demoprj
使用root用户登录,创建一个Private的仓库命令为demoprj,group为default的root
事前设定
git提交之前,需要设定如下项目以保证正常提交, 具体信息请设定为自己的信息。
[root@ku8-1 ~]# git config --global user.name "liumiaocn"[root@ku8-1 ~]# git config --global user.email "liumiaocn@outlook.com"[root@ku8-1 ~]#
- 1
- 2
- 3
创建第一个git仓库
使用git add/commit命令之后即可将本地内容push到remote
[[email protected]1 ~]# git clone [email protected]:root/demoprj.gitCloning into 'demoprj'...warning: You appear to have cloned an empty repository.[[email protected]1 ~]# cd demoprj
- 1
- 2
- 3
- 4
创建之后,通过
git add一个新建文件
[root@ku8-1 demoprj]# echo "Hello, LiuMiao" >README.md[root@ku8-1 demoprj]# git add *
- 1
- 2
确认状态
[[email protected]1 demoprj]# git status# On branch master## Initial commit## Changes to be committed:# (use "git rm --cached <file>..." to unstage)## new file: README.md#[[email protected]1 demoprj]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
git commit提交
[[email protected] demoprj]# git commit -m "initial"[master (root-commit) 70dfd04] initial 1 file changed, 1 insertion(+) create mode 100644 README.md[[email protected] demoprj]#
- 1
- 2
- 3
- 4
- 5
git push
[root@ku8-1 demoprj]# git push -u origin masterCounting objects: 3, done.Writing objects: 100% (3/3), 221 bytes | 0 bytes/s, done.Total 3 (delta 0), reused 0 (delta 0)To git@172.17.0.2:root/demoprj.git * [new branch] master -> masterBranch master set up to track remote branch master from origin.[root@ku8-1 demoprj]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
结果确认
在gitlab上确认project信息,可以看到刚刚更新的Hello, LiuMiao。
刚刚创建的仓库信息
分支操作
创建分支
创建一个名为develop的分支
[root@ku8-1 demoprj]# git branch develop[root@ku8-1 demoprj]#
- 1
- 2
确认分支情况,加上default的master分支,就两个,而且master分支前面的*表明当前活动分支为master
[root@ku8-1 demoprj]# git branch develop* master[root@ku8-1 demoprj]#
- 1
- 2
- 3
- 4
分支切换
使用checkout命令可以切换到创建的develop分支
[root@ku8-1 demoprj]# git checkout developSwitched to branch 'develop'[root@ku8-1 demoprj]#
- 1
- 2
- 3
确认当前活动分支已经是branch
[root@ku8-1 demoprj]# git branch* develop master[root@ku8-1 demoprj]#
- 1
- 2
- 3
- 4
- 5
当然也可以使用git checkout -b develop实现创建+切换的功能
分支更新
修改README.md到branch分支并push
[root@ku8-1 demoprj]# echo "Information from develop branch" >>README.md [root@ku8-1 demoprj]# git add README.md [root@ku8-1 demoprj]# git status# On branch develop# Changes to be committed:# (use "git reset HEAD <file>..." to unstage)## modified: README.md#[root@ku8-1 demoprj]# git commit -m "for branch"[develop 4b76d48] for branch 1 file changed, 1 insertion(+)[root@ku8-1 demoprj]# git push -u origin developCounting objects: 5, done.Writing objects: 100% (3/3), 285 bytes | 0 bytes/s, done.Total 3 (delta 0), reused 0 (delta 0)remote: remote: Create merge request for develop:remote: http://e5091e18d568/root/demoprj/merge_requests/new?merge_request%5Bsource_branch%5D=developremote: To git@172.17.0.2:root/demoprj.git * [new branch] develop -> developBranch develop set up to track remote branch develop from origin.[root@ku8-1 demoprj]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
结果确认
push之后可在gitlab上确认相关信息
切换回master
[root@ku8-1 demoprj]# cat README.md Hello, LiuMiaoInformation from develop branch[root@ku8-1 demoprj]# git checkout masterSwitched to branch 'master'[root@ku8-1 demoprj]# cat README.md Hello, LiuMiao[root@ku8-1 demoprj]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
merge操作
使用no-ff选项进行合并可以将comment一起转移,能够清晰的看出从哪儿来,做了哪些改变。
merge之前的log. ff是fast forward的缩写,ff方式在合并时不会生成一个新的合并节点,而no-ff则会生成。所以一般来说使用no-ff在管理起来更加方便。
[root@ku8-1 demoprj]# git logcommit 70dfd04b7c718318e5926ad5ee963c3573ff8f74Author: liumiaocn <liumiaocn@outlook.com>Date: Tue Jul 4 04:10:56 2017 -0400 initial[root@ku8-1 demoprj]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
merge操作进行合并
[root@ku8-1 demoprj]# git merge develop --no-ffMerge made by the 'recursive' strategy. README.md | 1 + 1 file changed, 1 insertion(+)[root@ku8-1 demoprj]#
- 1
- 2
- 3
- 4
- 5
合并之后的确认,可以看到合并节点的形成(Merge branch ‘develop’)
[[email protected] demoprj]# git logcommit 23c9620e51dbbce4715ce686e1d4ec48e496c894Merge: 70dfd04 4b76d48Author: liumiaocn <[email protected]>Date: Tue Jul 4 05:12:54 2017 -0400 Merge branch 'develop'commit 4b76d48f778bbcc8a88c38e65ba6734adbd53580Author: liumiaocn <[email protected]>Date: Tue Jul 4 04:49:42 2017 -0400 for branchcommit 70dfd04b7c718318e5926ad5ee963c3573ff8f74Author: liumiaocn <[email protected]>Date: Tue Jul 4 04:10:56 2017 -0400 initial[[email protected]1 demoprj]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
push操作
push之后就完成了将分支的内容合并回master的全部操作。
[root@ku8-1 demoprj]# git push origin masterCounting objects: 1, done.Writing objects: 100% (1/1), 218 bytes | 0 bytes/s, done.Total 1 (delta 0), reused 0 (delta 0)To git@172.17.0.2:root/demoprj.git 70dfd04..23c9620 master -> master[root@ku8-1 demoprj]# [root@ku8-1 demoprj]# cat README.md Hello, LiuMiaoInformation from develop branch[root@ku8-1 demoprj]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
分支删除
根据2017年DORA的DevOps报告提出的那样,分支尽量会控制在三条以下,其本质则是将持续集成和LeanIT进行扩展,减少中间环节的WIP,尽可能早集成,分支的原则也可以遵循“用后即焚”,删除分支使用–delete即可。
[root@ku8-1 demoprj]# git push origin --delete developTo git@172.17.0.2:root/demoprj.git - [deleted] develop[root@ku8-1 demoprj]#
- 1
- 2
- 3
- 4
结果确认
在gitlab上则看到,branch分支已经被删除了。
总结
这篇文章介绍了sshkey的设定,以及project的创建,分支的创建合并删除等常见操作,接下来会继续介绍rebase操作。