GitLab快速上手指南上篇

尹正杰發表於2024-11-20

                                              作者:尹正傑

版權宣告:原創作品,謝絕轉載!否則將追究法律責任。

目錄
  • 一.gitlab的基本配置
    • 1 登入gitlab並配置漢化
    • 2 修改管理員密碼
    • 3 修改頭像
    • 4 關閉賬號註冊功能
    • 5 修改郵箱地址
  • 二.gitlab使用者,組,專案管理
    • 1.使用者,組,專案檢視
    • 2.使用者管理
      • 2.1 新建使用者
      • 2.2 使用者建立成功
      • 2.3 課堂練習-建立多個使用者
    • 3.組管理
      • 3.1 新建組
      • 3.2 組建立成功
      • 3.3 課堂練習-建立多個組
    • 4.將使用者加入組
      • 4.1 檢視某個組的詳細資訊
      • 4.2 邀請組成員
      • 4.3 課堂練習-將不同的使用者加入不同的組
    • 5.為使用者重置密碼
      • 5.1 修改使用者名稱的密碼
      • 5.2 修改密碼成功並登入
      • 5.3 課堂練習-給多個使用者重置密碼
    • 6.專案管理
      • 6.1 建立空白專案
      • 6.2 專案建立成功
      • 6.3 使用root使用者將已有的本地倉庫推送到遠端倉庫中
      • 6.4 使用jasonyin2020使用者開發程式碼
        • 6.4.1 生成公鑰
        • 6.4.2 使用jasonyin2020使用者拉取程式碼
        • 6.4.3 使用jasonyin2020使用者進行開發
      • 6.5 使用root使用者拉取最新dev程式碼
      • 6.6 使用yinzhengjie使用者拉取meta-data程式碼測試
        • 6.6.1 檢視meta-data專案使用者
        • 6.6.2 使用yinzhengjie使用者是無許可權拉取dev群組的專案
  • 三.gitlab保護分支
    • 1.開發者無法推送程式碼到master分支案例
      • 1.1 檢視jasonyin2020角色
      • 1.2 檢視jasonyin2020有許可權的相關專案
      • 1.3 使用jasonyin2020使用者拉取meta-data專案所有分支到本地
      • 1.4 使用jasonyin2020使用者推送資料到dev分支
      • 1.5 使用jasonyin2020使用者推送資料到master分支會失敗(gitlab預設的保護分支)
    • 2.使用管理員檢視gitlab專案的預設分支保護
      • 2.1 檢視群組資訊
      • 2.2 檢視dev組的meta-data專案
      • 2.3 檢視預設的分支保護
    • 3.解決分支保護的思路
    • 4.jasonyin2020使用者發起合併程式碼請求
      • 4.1 jasonyin2020使用者建立合併請求
      • 4.2 jasonyin2020使用者建立合併請求成功
      • 4.3 專案管理員root檢視合併請求
      • 4.4 專案管理員root批准合併請求
    • 5.jasonyin2020開發的程式碼成功合併

一.gitlab的基本配置

1 登入gitlab並配置漢化


如上圖所示,按照步驟依次點選即可。

如下圖所示,重新重新整理下頁面基本上都是中文了喲~儘管沒有100%翻譯,但是98%的翻譯程度也還算不錯嘛~


溫馨提示:
	對於相對較老的gitlab版本,內建的漢化程度貌似僅有67%。因此需要藉助第三方漢化。
	專案地址:
		https://gitlab.com/xhang/gitlab

2 修改管理員密碼

如上圖所示,我們可以修改管理員密碼喲~如果你需要的話按照提示做即可。

3 修改頭像

如上圖所示,官方預設的頭像貌似並沒有下載成功,因此我們可以改成咱們自己的頭像即可。

如下圖所示,上傳頭像後,一定要點選"更新個人資料設定"喲~

4 關閉賬號註冊功能

如上圖所示,預設情況下,是啟用了註冊功能喲。

如下圖所示,按照步驟依次點選後,一定要儲存配置喲,最後重新重新整理頁面,就會發現註冊功能被關閉啦!wordpress也是如此,建議禁用使用者註冊功能。

5 修改郵箱地址

如上圖所示,按照步驟依次配置郵箱後,會自動傳送郵箱到管理員郵箱的。

如下圖所示,點選"確認您的電子郵件地址",就可以完成驗證功能啦!

二.gitlab使用者,組,專案管理

1.使用者,組,專案檢視

如上圖所示,依次按照圖中方式操作,

2.使用者管理

2.1 新建使用者

如上圖所示,依次點選即可彈出如下圖所示的介面,填寫完整資訊後就可以建立新使用者啦。

2.2 使用者建立成功

Duang,如上圖所示,使用者建立成功啦。

2.3 課堂練習-建立多個使用者

按照剛剛的操作,建立以下2個使用者:
	- yinzhengjie
	- jasonyin2020
	
建立成功後,如上圖所示。

3.組管理

3.1 新建組

如上圖所示,依次點選即可彈出如下圖所示的介面,填寫完整資訊後就可以建立新使用者啦。

3.2 組建立成功

如上圖所示,組建立成功啦。

3.3 課堂練習-建立多個組

按照剛剛的操作,建立以下2個組:
	- dev
	- ops
	
建立成功後,如上圖所示。

4.將使用者加入組

4.1 檢視某個組的詳細資訊

如上圖所示,我們可以開啟我們關心的dev組。以檢視該組的詳細資訊。

如下圖所示,我們可以使用dev組的成員進行管理,預設建立的組的成員只有管理員。

4.2 邀請組成員

如上圖所示,按照步驟新增成員即可。

如下圖所示,成員邀請成功啦。

4.3 課堂練習-將不同的使用者加入不同的組

按照剛剛的操作,將不同的使用者加入不同的組:
	- 將jasonyin2020使用者新增到dev組,角色為"Developer"
	- 將yinzhengjie使用者新增到ops組,角色為"Maintainer"


建立成功後,如上,下圖所示。


溫馨提示:
	對於不用使用者歸屬於哪個組的哪個專案對應什麼許可權,我們可以實際需求來進行配置喲。
	關於官方的許可權大概分為: Guest,Reporter,Developer,Maintainer,Owner這幾類。
	參考連結:
		http://gitlab11.yinzhengjie.com/help/user/permissions

5.為使用者重置密碼

5.1 修改使用者名稱的密碼

如上圖所示,按照步驟點選就可以編輯使用者,密碼長度不得少於8個字元。

5.2 修改密碼成功並登入

如上圖所示,密碼修改成功後,我們可以使用密碼進行登入。


如下圖所示,使用者首次登入時,必須修改密碼。

5.3 課堂練習-給多個使用者重置密碼

按照剛剛的操作,將不同的使用者加入不同的組:
	- 將jasonyin2020使用者初始密碼為:"12345678",修改後的新密碼為:"yinzhengjie"。
	- 將yinzhengjie使用者初始密碼為:"12345678",修改後的新密碼為:"yinzhengjie"。

建立成功後,並完成登入,如上,下圖所示。

6.專案管理

6.1 建立空白專案

如上圖所示,按照步驟操作即可進入到建立新專案的介面。

如下圖所示,點選"建立空白專案"即可對新專案進行建立配置介面喲~

6.2 專案建立成功

如上圖所示,按照步驟建立專案成功後,會彈出如下圖所示的介面喲。



命令列指引
您還可以按照以下說明從計算機中上傳現有檔案。

	(1)Git 全域性設定
git config --global user.name "Administrator"
git config --global user.email "admin@example.com"
    
	(2)建立一個新倉庫
git clone http://gitlab11.yinzhengjie.com/dev/meta-data.git
cd meta-data
git switch -c main
touch README.md
git add README.md
git commit -m "add README"
git push -u origin main
    
	(3)推送現有資料夾
cd existing_folder
git init --initial-branch=main
git remote add origin http://gitlab11.yinzhengjie.com/dev/meta-data.git
git add .
git commit -m "Initial commit"
git push -u origin main
    
	(4)推送現有的 Git 倉庫
cd existing_repo
git remote rename origin old-origin
git remote add origin http://gitlab11.yinzhengjie.com/dev/meta-data.git
git push -u origin --all
git push -u origin --tags

6.3 使用root使用者將已有的本地倉庫推送到遠端倉庫中

[root@centos10.yinzhengjie.com ~]# cd /yinzhengjie/code/meta-data/
[root@centos10.yinzhengjie.com meta-data]# 
[root@centos10.yinzhengjie.com meta-data]# git tag
v1.0
v2.0
v3.0
[root@centos10.yinzhengjie.com meta-data]# 
[root@centos10.yinzhengjie.com meta-data]# git remote -v
origin	git@gitee.com:yinzhengjie/meta-data.git (fetch)
origin	git@gitee.com:yinzhengjie/meta-data.git (push)
[root@centos10.yinzhengjie.com meta-data]# 
[root@centos10.yinzhengjie.com meta-data]# 
[root@centos10.yinzhengjie.com meta-data]# git remote rename origin old-origin
Renaming remote references: 100% (4/4), done.
[root@centos10.yinzhengjie.com meta-data]#
[root@centos10.yinzhengjie.com meta-data]# git remote add origin http://gitlab11.yinzhengjie.com/dev/meta-data.git
[root@centos10.yinzhengjie.com meta-data]# 
[root@centos10.yinzhengjie.com meta-data]# git remote -v
old-origin	git@gitee.com:yinzhengjie/meta-data.git (fetch)
old-origin	git@gitee.com:yinzhengjie/meta-data.git (push)
origin	http://gitlab11.yinzhengjie.com/dev/meta-data.git (fetch)
origin	http://gitlab11.yinzhengjie.com/dev/meta-data.git (push)
[root@centos10.yinzhengjie.com meta-data]# 
[root@centos10.yinzhengjie.com meta-data]# git push -u origin --all  # 所有分支推送成功,如上圖所示。
Username for 'http://gitlab11.yinzhengjie.com': root
Password for 'http://root@gitlab11.yinzhengjie.com': 
Enumerating objects: 18, done.
Counting objects: 100% (18/18), done.
Delta compression using up to 4 threads
Compressing objects: 100% (10/10), done.
Writing objects: 100% (18/18), 1.59 KiB | 1.59 MiB/s, done.
Total 18 (delta 3), reused 11 (delta 2), pack-reused 0
remote: 
remote: To create a merge request for dev, visit:
remote:   http://gitlab11.yinzhengjie.com/dev/meta-data/-/merge_requests/new?merge_request%5Bsource_branch%5D=dev
remote: 
To http://gitlab11.yinzhengjie.com/dev/meta-data.git
 * [new branch]      dev -> dev
 * [new branch]      master -> master
branch 'dev' set up to track 'origin/dev'.
branch 'master' set up to track 'origin/master'.
[root@centos10.yinzhengjie.com meta-data]# 
[root@centos10.yinzhengjie.com meta-data]# git push -u origin --tags  # 所有標籤推送成功,如下圖所示。
Username for 'http://gitlab11.yinzhengjie.com': root
Password for 'http://root@gitlab11.yinzhengjie.com': 
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 475 bytes | 475.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To http://gitlab11.yinzhengjie.com/dev/meta-data.git
 * [new tag]         v1.0 -> v1.0
 * [new tag]         v2.0 -> v2.0
 * [new tag]         v3.0 -> v3.0
[root@centos10.yinzhengjie.com meta-data]# 

6.4 使用jasonyin2020使用者開發程式碼

6.4.1 生成公鑰

	(1)生成公鑰
# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa -q


	(2)使用jasonyin2020賬號進行登入
成功登入後再繼續後續的操作哈。

	(3)將公鑰複製到gitlab
如上圖所示,複製完成後,點選"新增秘鑰"即可,就可以看到如下圖所示的效果啦。

6.4.2 使用jasonyin2020使用者拉取程式碼

	(1)基於ssh協議拉取程式碼到本地倉庫
[root@ubuntu11.yinzhengjie.com tmp]# git clone git@gitlab11.yinzhengjie.com:dev/meta-data.git
Cloning into 'meta-data'...
The authenticity of host 'gitlab11.yinzhengjie.com (10.0.0.11)' can't be established.
ECDSA key fingerprint is SHA256:7iCtc1o1urdQ+s6pih5kK+MienvfVGzZnPL5khkcu8o.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'gitlab11.yinzhengjie.com,10.0.0.11' (ECDSA) to the list of known hosts.
remote: Enumerating objects: 21, done.
remote: Counting objects: 100% (21/21), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 21 (delta 3), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (21/21), done.
Resolving deltas: 100% (3/3), done.
[root@ubuntu11.yinzhengjie.com tmp]# 
[root@ubuntu11.yinzhengjie.com tmp]# cd meta-data/
[root@ubuntu11.yinzhengjie.com meta-data]# 
[root@ubuntu11.yinzhengjie.com meta-data]# git branch
* master
[root@ubuntu11.yinzhengjie.com meta-data]# 
[root@ubuntu11.yinzhengjie.com meta-data]# ll
total 16
drwxr-xr-x  3 root root 4096 Feb 12 00:12 ./
drwxrwxrwt 14 root root 4096 Feb 12 00:12 ../
drwxr-xr-x  8 root root 4096 Feb 12 00:12 .git/
-rw-r--r--  1 root root   84 Feb 12 00:12 index.html
[root@ubuntu11.yinzhengjie.com meta-data]# 
[root@ubuntu11.yinzhengjie.com meta-data]# cat index.html 
<h1>專案成立</h1>
<h1>VR功能</h1>
<h1>VIP功能</h1>
<h1>修復Bug成功</h1>
[root@ubuntu11.yinzhengjie.com meta-data]# 



	(2)拉取dev分支
[root@ubuntu11.yinzhengjie.com meta-data]# git branch
* master
[root@ubuntu11.yinzhengjie.com meta-data]# 
[root@ubuntu11.yinzhengjie.com meta-data]# 
[root@ubuntu11.yinzhengjie.com meta-data]# git checkout -b dev
Switched to a new branch 'dev'
[root@ubuntu11.yinzhengjie.com meta-data]# 
[root@ubuntu11.yinzhengjie.com meta-data]# git branch
* dev
  master
[root@ubuntu11.yinzhengjie.com meta-data]# 
[root@ubuntu11.yinzhengjie.com meta-data]# git pull origin dev
From gitlab11.yinzhengjie.com:dev/meta-data
 * branch            dev        -> FETCH_HEAD
Updating 37f7b35..c215653
Fast-forward
 .gitignore | 9 +++++++++
 index.html | 2 ++
 2 files changed, 11 insertions(+)
 create mode 100644 .gitignore
[root@ubuntu11.yinzhengjie.com meta-data]# 
[root@ubuntu11.yinzhengjie.com meta-data]# cat index.html 
<h1>專案成立</h1>
<h1>VR功能</h1>
<h1>VIP功能</h1>
<h1>修復Bug成功</h1>
<h1>真人秀</h1>
<h1>點贊,互動</h1>
[root@ubuntu11.yinzhengjie.com meta-data]# 

6.4.3 使用jasonyin2020使用者進行開發

	(1)修改程式碼
[root@ubuntu11.yinzhengjie.com meta-data]# cat index.html 
<h1>專案成立</h1>
<h1>VR功能</h1>
<h1>VIP功能</h1>
<h1>修復Bug成功</h1>
<h1>真人秀</h1>
<h1>點贊,互動</h1>
[root@ubuntu11.yinzhengjie.com meta-data]# 
[root@ubuntu11.yinzhengjie.com meta-data]# vim index.html 
[root@ubuntu11.yinzhengjie.com meta-data]# 
[root@ubuntu11.yinzhengjie.com meta-data]# cat index.html 
<h1>專案成立</h1>
<h1>VR功能</h1>
<h1>VIP功能</h1>
<h1>修復Bug成功</h1>
<h1>真人秀</h1>
<h1>點贊,互動</h1>
<h1>美顏,濾鏡</h1>
<h1>開直播,下播</h1>
[root@ubuntu11.yinzhengjie.com meta-data]# 



	(2)提交到原生代碼倉庫
[root@ubuntu11.yinzhengjie.com meta-data]# git add .; git commit -m '美顏,濾鏡,直播功能'
[dev 19587c5] 美顏,濾鏡,直播功能
 1 file changed, 2 insertions(+)
[root@ubuntu11.yinzhengjie.com meta-data]# 


	(3)推送程式碼到遠端倉庫,推送成功後,效果如上圖所示。
[root@ubuntu11.yinzhengjie.com meta-data]# git push origin dev
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 2 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 397 bytes | 397.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: 
remote: To create a merge request for dev, visit:
remote:   http://gitlab11.yinzhengjie.com/dev/meta-data/-/merge_requests/new?merge_request%5Bsource_branch%5D=dev
remote: 
To gitlab11.yinzhengjie.com:dev/meta-data.git
   c215653..19587c5  dev -> dev
[root@ubuntu11.yinzhengjie.com meta-data]# 

6.5 使用root使用者拉取最新dev程式碼

	(1)切換到dev分支
[root@centos10.yinzhengjie.com ~]# cd /yinzhengjie/code/meta-data/
[root@centos10.yinzhengjie.com meta-data]# 
[root@centos10.yinzhengjie.com meta-data]# git checkout dev
Switched to branch 'dev'
Your branch is up to date with 'origin/dev'.
[root@centos10.yinzhengjie.com meta-data]# 
[root@centos10.yinzhengjie.com meta-data]# git branch
* dev
  master
[root@centos10.yinzhengjie.com meta-data]# 
[root@centos10.yinzhengjie.com meta-data]# cat index.html   # 很明顯,程式碼並不是最新的喲~
<h1>專案成立</h1>
<h1>VR功能</h1>
<h1>VIP功能</h1>
<h1>修復Bug成功</h1>
<h1>真人秀</h1>
<h1>點贊,互動</h1>
[root@centos10.yinzhengjie.com meta-data]# 



	(2) 使用root使用者拉取程式碼
[root@centos10.yinzhengjie.com meta-data]# git pull origin dev  # 如下所示,我使用root使用者拉取了最新的程式碼喲~
Username for 'http://gitlab11.yinzhengjie.com': root
Password for 'http://root@gitlab11.yinzhengjie.com': 
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 377 bytes | 377.00 KiB/s, done.
From http://gitlab11.yinzhengjie.com/dev/meta-data
 * branch            dev        -> FETCH_HEAD
   c215653..19587c5  dev        -> origin/dev
Updating c215653..19587c5
Fast-forward
 index.html | 2 ++
 1 file changed, 2 insertions(+)
[root@centos10.yinzhengjie.com meta-data]# 
[root@centos10.yinzhengjie.com meta-data]# cat index.html   # 注意觀察內容,發現拉取最新的程式碼成功啦!
<h1>專案成立</h1>
<h1>VR功能</h1>
<h1>VIP功能</h1>
<h1>修復Bug成功</h1>
<h1>真人秀</h1>
<h1>點贊,互動</h1>
<h1>美顏,濾鏡</h1>
<h1>開直播,下播</h1>
[root@centos10.yinzhengjie.com meta-data]# 

6.6 使用yinzhengjie使用者拉取meta-data程式碼測試

6.6.1 檢視meta-data專案使用者

如上圖所示,對於meta-data目前只有管理員使用者和jasonyin2020兩個使用者喲。

6.6.2 使用yinzhengjie使用者是無許可權拉取dev群組的專案

如上圖所示,拉取dev群組的元宇宙專案失敗啦,原因是yinzhengjie使用者並沒有拉取程式碼的許可權喲!

三.gitlab保護分支

1.開發者無法推送程式碼到master分支案例

1.1 檢視jasonyin2020角色

如上圖所示,jasonyin2020使用者的角色是開發者(Developer)。

與此同時,jasonyin2020使用者屬於dev組喲。

1.2 檢視jasonyin2020有許可權的相關專案

如上圖所示,jasonyin2020使用者對dev組的meta-data專案有許可權喲。

1.3 使用jasonyin2020使用者拉取meta-data專案所有分支到本地

	(1)使用jasonyin2020使用者拉取meta-data專案的master分支
[root@ubuntu11.yinzhengjie.com ~]# cd /tmp/
[root@ubuntu11.yinzhengjie.com tmp]# 
[root@ubuntu11.yinzhengjie.com tmp]# git clone http://gitlab11.yinzhengjie.com/dev/meta-data.git
Cloning into 'meta-data'...
Username for 'http://gitlab11.yinzhengjie.com': jasonyin2020
Password for 'http://jasonyin2020@gitlab11.yinzhengjie.com': 
remote: Enumerating objects: 24, done.
remote: Counting objects: 100% (24/24), done.
remote: Compressing objects: 100% (18/18), done.
remote: Total 24 (delta 4), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (24/24), done.
Resolving deltas: 100% (4/4), done.
[root@ubuntu11.yinzhengjie.com tmp]# 
[root@ubuntu11.yinzhengjie.com tmp]# cd meta-data/
[root@ubuntu11.yinzhengjie.com meta-data]# 
[root@ubuntu11.yinzhengjie.com meta-data]# git branch
* master
[root@ubuntu11.yinzhengjie.com meta-data]# 



	(2)使用jasonyin2020使用者拉取meta-data專案的dev分支
[root@ubuntu11.yinzhengjie.com meta-data]# cat index.html   # 拉取資料前,先檢視首頁檔案內容。
<h1>專案成立</h1>
<h1>VR功能</h1>
<h1>VIP功能</h1>
<h1>修復Bug成功</h1>
[root@ubuntu11.yinzhengjie.com meta-data]# 
[root@ubuntu11.yinzhengjie.com meta-data]# git checkout -b dev
Switched to a new branch 'dev'
[root@ubuntu11.yinzhengjie.com meta-data]# 
[root@ubuntu11.yinzhengjie.com meta-data]# git branch
* dev
  master
[root@ubuntu11.yinzhengjie.com meta-data]# 
[root@ubuntu11.yinzhengjie.com meta-data]# git remote -v
origin	http://gitlab11.yinzhengjie.com/dev/meta-data.git (fetch)
origin	http://gitlab11.yinzhengjie.com/dev/meta-data.git (push)
[root@ubuntu11.yinzhengjie.com meta-data]# 

[root@ubuntu11.yinzhengjie.com meta-data]# git pull origin dev
Username for 'http://gitlab11.yinzhengjie.com': jasonyin2020
Password for 'http://jasonyin2020@gitlab11.yinzhengjie.com': 
From http://gitlab11.yinzhengjie.com/dev/meta-data
 * branch            dev        -> FETCH_HEAD
Updating 37f7b35..19587c5
Fast-forward
 .gitignore | 9 +++++++++
 index.html | 4 ++++
 2 files changed, 13 insertions(+)
 create mode 100644 .gitignore
[root@ubuntu11.yinzhengjie.com meta-data]# 
[root@ubuntu11.yinzhengjie.com meta-data]# cat index.html 
<h1>專案成立</h1>
<h1>VR功能</h1>
<h1>VIP功能</h1>
<h1>修復Bug成功</h1>
<h1>真人秀</h1>
<h1>點贊,互動</h1>
<h1>美顏,濾鏡</h1>
<h1>開直播,下播</h1>
[root@ubuntu11.yinzhengjie.com meta-data]# 


1.4 使用jasonyin2020使用者推送資料到dev分支

	(1)修改資料
[root@ubuntu11.yinzhengjie.com meta-data]# cat index.html 
<h1>專案成立</h1>
<h1>VR功能</h1>
<h1>VIP功能</h1>
<h1>修復Bug成功</h1>
<h1>真人秀</h1>
<h1>點贊,互動</h1>
<h1>美顏,濾鏡</h1>
<h1>開直播,下播</h1>
[root@ubuntu11.yinzhengjie.com meta-data]# 
[root@ubuntu11.yinzhengjie.com meta-data]# echo "<h1>電商平臺</h1>"  >> index.html 
[root@ubuntu11.yinzhengjie.com meta-data]# 
[root@ubuntu11.yinzhengjie.com meta-data]# 
[root@ubuntu11.yinzhengjie.com meta-data]# cat index.html 
<h1>專案成立</h1>
<h1>VR功能</h1>
<h1>VIP功能</h1>
<h1>修復Bug成功</h1>
<h1>真人秀</h1>
<h1>點贊,互動</h1>
<h1>美顏,濾鏡</h1>
<h1>開直播,下播</h1>
<h1>電商平臺</h1>
[root@ubuntu11.yinzhengjie.com meta-data]# 


	(2)提交資料到本地倉庫
[root@ubuntu11.yinzhengjie.com meta-data]# git add .; git commit -m '電商'
[dev 99222c1] 電商
 1 file changed, 1 insertion(+)
[root@ubuntu11.yinzhengjie.com meta-data]# 

	
	(3)推送程式碼到遠端倉庫
[root@ubuntu11.yinzhengjie.com meta-data]# git push origin dev
Username for 'http://gitlab11.yinzhengjie.com': jasonyin2020
Password for 'http://jasonyin2020@gitlab11.yinzhengjie.com': 
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 2 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 332 bytes | 332.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: 
remote: To create a merge request for dev, visit:
remote:   http://gitlab11.yinzhengjie.com/dev/meta-data/-/merge_requests/new?merge_request%5Bsource_branch%5D=dev
remote: 
To http://gitlab11.yinzhengjie.com/dev/meta-data.git
   19587c5..99222c1  dev -> dev
[root@ubuntu11.yinzhengjie.com meta-data]# 

1.5 使用jasonyin2020使用者推送資料到master分支會失敗(gitlab預設的保護分支)

	(1)修改資料並提交程式碼到本地倉庫
[root@ubuntu11.yinzhengjie.com meta-data]# git branch
* dev
  master
[root@ubuntu11.yinzhengjie.com meta-data]# 
[root@ubuntu11.yinzhengjie.com meta-data]# git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
[root@ubuntu11.yinzhengjie.com meta-data]# 
[root@ubuntu11.yinzhengjie.com meta-data]# git branch
  dev
* master
[root@ubuntu11.yinzhengjie.com meta-data]# 
[root@ubuntu11.yinzhengjie.com meta-data]# cat index.html 
<h1>專案成立</h1>
<h1>VR功能</h1>
<h1>VIP功能</h1>
<h1>修復Bug成功</h1>
[root@ubuntu11.yinzhengjie.com meta-data]# 
[root@ubuntu11.yinzhengjie.com meta-data]# echo "<h1>抖+投流...</h1>" >> index.html 
[root@ubuntu11.yinzhengjie.com meta-data]# 
[root@ubuntu11.yinzhengjie.com meta-data]# 
[root@ubuntu11.yinzhengjie.com meta-data]# cat index.html 
<h1>專案成立</h1>
<h1>VR功能</h1>
<h1>VIP功能</h1>
<h1>修復Bug成功</h1>
<h1>抖+投流...</h1>
[root@ubuntu11.yinzhengjie.com meta-data]# 
[root@ubuntu11.yinzhengjie.com meta-data]# git add .; git commit -m '抖加'
[master 3c59b67] 抖加
 1 file changed, 1 insertion(+)
[root@ubuntu11.yinzhengjie.com meta-data]# 


	(2)使用jasonyin2020使用者推送程式碼到master失敗,因為該分支被保護啦~
[root@ubuntu11.yinzhengjie.com meta-data]# git push origin master
Username for 'http://gitlab11.yinzhengjie.com': jasonyin2020
Password for 'http://jasonyin2020@gitlab11.yinzhengjie.com': 
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 2 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 295 bytes | 295.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: GitLab: You are not allowed to push code to protected branches on this project.
To http://gitlab11.yinzhengjie.com/dev/meta-data.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'http://gitlab11.yinzhengjie.com/dev/meta-data.git'
[root@ubuntu11.yinzhengjie.com meta-data]# 

2.使用管理員檢視gitlab專案的預設分支保護

2.1 檢視群組資訊

如上圖所示,使用管理員root使用者登入,檢視dev組的專案。

2.2 檢視dev組的meta-data專案

如上圖所示,檢視dev組的meta-data專案。

溫馨提示,不一定必須使用root使用者登入,凡是對dev組的meta-date擁有Owner許可權的使用者均可喲~

2.3 檢視預設的分支保護

如上圖所示,依次點選後,就可以檢視到"受保護的分支",點選"展開"按鈕,就可以看到如下圖所示的圖片。

很明顯,master分支屬於預設的分支保護,即預設情況下只有Maintainer及以上的角色許可權才能進行程式碼的合併和推送喲~

3.解決分支保護的思路

思路一:
	取消分支保護,這樣任意有許可權訪問專案的使用者均可以合併程式碼和推送程式碼。
	
	優勢:
		所有使用者都能推送程式碼,開發人員操作起來比較方便。
		
	缺點:
		正式因為所有人都能推送程式碼到master分支,很可能某個開發寫的程式未經過充分測試而在執行過程中差生bug,導致程式崩潰的現象。
		
		
思路二:
	使用預設的分支保護。
	優勢:
		只有部分擁有相應角色的使用者才能推送或合併程式碼到master分支。起到了一定的分支保護的作用。限制了大部分使用者的行為。
	缺點:
		需要運維或開發人員手動合併程式碼。

4.jasonyin2020使用者發起合併程式碼請求

4.1 jasonyin2020使用者建立合併請求

如上圖所示,我們可以發起"建立合併請求"。並按照下圖的方式進行提交即可。

4.2 jasonyin2020使用者建立合併請求成功

如上圖所示,成功建立了合併請求啦。重新重新整理頁面可以看到如下圖所示的資訊。

4.3 專案管理員root檢視合併請求

如上圖所示,使用meta-data管理員進行登入並檢視該專案,效果如下圖所示。

4.4 專案管理員root批准合併請求

如上圖所示,檢視到jasonyin2020使用者發起的合併請求,如下圖所示,點選"批准",和"合併"

5.jasonyin2020開發的程式碼成功合併

如上圖所示,程式碼和合併成功啦。

如下圖所示,程式碼合併成功發現dev分支也被刪除啦!

相關文章