1. 程式人生 > >版本管理之gitlab實踐教程 基礎篇 1

版本管理之gitlab實踐教程 基礎篇 1

這裡寫圖片描述
這幾篇文章主要面向對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-keygen,一路enter,可以生成預設的rsa方式的sshkey。

[[email protected]
1 gitlab]# ssh-keygen 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]1 The 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.pub
ssh-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 version
git 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.git
Cloning 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 master
Counting 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 -> master
Branch 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 develop
Switched 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 develop
Counting 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=develop
remote: 
To git@172.17.0.2:root/demoprj.git
 * [new branch]      develop -> develop
Branch 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, LiuMiao
Information from develop branch
[root@ku8-1 demoprj]# git checkout master
Switched 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 log
commit 70dfd04b7c718318e5926ad5ee963c3573ff8f74
Author: 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-ff
Merge 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 log
commit 23c9620e51dbbce4715ce686e1d4ec48e496c894
Merge: 70dfd04 4b76d48
Author: liumiaocn <[email protected]>
Date:   Tue Jul 4 05:12:54 2017 -0400

    Merge branch 'develop'

commit 4b76d48f778bbcc8a88c38e65ba6734adbd53580
Author: liumiaocn <[email protected]>
Date:   Tue Jul 4 04:49:42 2017 -0400

    for branch

commit 70dfd04b7c718318e5926ad5ee963c3573ff8f74
Author: 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 master
Counting 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, LiuMiao
Information 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 develop
To git@172.17.0.2:root/demoprj.git
 - [deleted]         develop
[root@ku8-1 demoprj]#
  • 1
  • 2
  • 3
  • 4

結果確認

在gitlab上則看到,branch分支已經被刪除了。

這裡寫圖片描述

總結

這篇文章介紹了sshkey的設定,以及project的建立,分支的建立合併刪除等常見操作,接下來會繼續介紹rebase操作。

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!希望你也加入到我們人工智慧的隊伍中來!http://www.captainbed.net