Gitlab倉庫管理 設置保護分支


 

 

設置保護分支

把認為哪個個分支不想讓別人動,就把這個分支設置為保護分支,並且只有授權的用戶才可以向這個分支推送代碼

 

在實際使用過程中,我們通常會保持 master 分支穩定,用於生產環境的版本發布,只有授權的用戶才可以向 master 合並代碼。

要實現此功能,我們需要將 master 設置為保護分支,並授權什么用戶可以向 master 用戶推送代碼。


使用 root 用戶點擊 git_test 倉庫頁面左下角的 Settings

 

 

 進入設置頁面,選擇設置菜單欄下面的 Repository 選項

 

 

 

 進入 repository 設置頁面

 

 

 

展開 Protected Branches 

 

 

 

設置完成后,在倉庫分支頁面,可看到 master 分支后面出現一個綠色的 protected 標記。意味着master分支被保護

 

 

 

 

 

只有master角色可以合並申請到master分支,才可以push代碼到master分支,對於master分支操作,只有master才可以做

admin是master身份

dev沒有權限往master分支push推送代碼,也沒有權限往master合並申請

 

 

 

 

ci-node1 對應master

ci-node2對應dev用戶

 

此時我們再嘗試在 ci-node2 上推送 master 分支到 GitLab

 在dev分支 切換到master分支

 

[root@ci-node2 git_test]# git branch
* dev
  master

[root@ci-node2 git_test]# git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'

 

創建新文件,然后提交,在ci-node2客戶端推送

 

 

[root@ci-node2 git_test]# touch ci-node2
[root@ci-node2 git_test]# git add .
[root@ci-node2 git_test]# git commit -m "commit ci-node2 on ci-node2"
[master 2bd2e88] commit ci-node2 on ci-node2
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 ci-node2

報錯 

我們發現此時我們已經不能在 ci-node2 上向 GitLab 上推送 master 分支,因為我們ci-node2 綁定的是 dev 用戶,dev 用戶屬於 developer 角色,

master 分支不允許 developer角色向其推送內容。

[root@ci-node2 git_test]# git push -u origin master
Counting objects: 2, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 234 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
remote: GitLab: You are not allowed to push code to protected branches on this project. To 192.168.31.11:test/git_test.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@192.168.31.11:test/git_test.git

 

 

例子2

在dev分支

[root@ci-node2 git_test]# git branch
* dev
  master

 

[root@ci-node2 git_test]# ll
total 4
-rw-r--r-- 1 root root 21 Mar 30 00:11 a
-rw-r--r-- 1 root root  0 Mar 30 00:34 dev
-rw-r--r-- 1 root root  0 Mar 30 00:11 master
-rw-r--r-- 1 root root  0 Mar 30 00:11 test

 

創建一個文件 然后提交

[root@ci-node2 git_test]# touch ci-node2
[root@ci
-node2 git_test]# ll total 4 -rw-r--r-- 1 root root 21 Mar 30 00:11 a -rw-r--r-- 1 root root 0 Apr 1 23:05 ci-node2 -rw-r--r-- 1 root root 0 Mar 30 00:34 dev -rw-r--r-- 1 root root 0 Mar 30 00:11 master -rw-r--r-- 1 root root 0 Mar 30 00:11 test

[root@ci
-node2 git_test]# git add . [root@ci-node2 git_test]# git commit -m "touch ci-node2 file on dev branch" [dev be5cdbe] touch ci-node2 file on dev branch 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ci-node2

推送到dev用戶

 

[root@ci-node2 git_test]# git push -u origin dev
Counting objects: 2, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 247 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
remote: 
remote: To create a merge request for dev, visit:
remote:   http://192.168.31.11/test/git_test/merge_requests/new?merge_request%5Bsource_branch%5D=dev
remote: 
To 192.168.31.11:test/git_test.git
   a0e7b8d..be5cdbe  dev -> dev
Branch dev set up to track remote branch dev from origin.

 

推上去了

 

切換到master分支

 

[root@ci-node2 git_test]# git checkout master
Switched to branch 'master'

把dev分支合並到master 分支

[root@ci-node2 git_test]# git merge dev
Updating cc7da0e..be5cdbe
Fast-forward
 ci-node2 | 0
 dev      | 0
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 ci-node2
 create mode 100644 dev

推送到master分支

報錯原因 因為ci-node2 公鑰綁定gitlab dev用戶上 ,gitlab上設置dev用戶是開發者,開發者沒有權限推送到master

[root@ci-node2 git_test]# git push -u origin master
Total 0 (delta 0), reused 0 (delta 0)
remote: GitLab: You are not allowed to push code to protected branches on this project.
To 192.168.31.11:test/git_test.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@192.168.31.11:test/git_test.git'

 

回到ci-node1 上 推master分支

 

[root@ci-node1 git_test]# git push -u gitlab master
Branch master set up to track remote branch master from gitlab.
Everything up-to-date

ci-node2 上做了修改 推送了倉庫內容,ci-node1現在本地倉庫和遠程倉庫 內容 不一致,導致以上情況

 

這時候需要 用git fetch命令

 

 

git fetch 使用

上面我們在 ci-node2 向 gitlab 上的遠程倉庫推送了新的內容,此時對於 ci-node1 上的 git_test 倉庫來說,它的遠程倉庫已經更新,所以需要將這些更新取回本地,這時就需 要用到 git fetch 命令。

fetch到本地,然后合並,再推送

 

 

[root@ci-node1 git_test]# git fetch
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (4/4), done.
From 192.168.31.11:test/git_test
 * [new branch]      dev        -> gitlab/dev

 

合並   把更新內容合並到本地

[root@ci-node1 git_test]# git merge gitlab/dev
Updating cc7da0e..be5cdbe
Fast-forward
 ci-node2 | 0
 dev      | 0
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 ci-node2
 create mode 100644 dev

有ci-node2文件

 

[root@ci-node1 git_test]# ll
total 4
-rw-r--r-- 1 root root 21 Mar 21 23:53 a
-rw-r--r-- 1 root root  0 Apr  2 23:49 ci-node2
-rw-r--r-- 1 root root  0 Apr  2 23:49 dev
-rw-r--r-- 1 root root  0 Mar 21 18:31 master
-rw-r--r-- 1 root root  0 Mar 18 00:20 test

 

再推送 

推成功了

 

[root@ci-node1 git_test]# git push -u gitlab master
Total 0 (delta 0), reused 0 (delta 0)
To 192.168.31.11:test/git_test.git
   cc7da0e..be5cdbe  master -> master
Branch master set up to track remote branch master from gitlab.

 

再看看gitlab 有ci-node2文件

 現在ci-node1 客戶端上 對ci-node2 文件追加內容 ,提交

[root@ci-node1 git_test]# echo "222" >> ci-node2 

[root@ci-node1 git_test]# git add .
[root@ci-node1 git_test]# git commit -m "modify ci-node2 file on master branch"
[master b5692cb] modify ci-node2 file on master branch
 1 file changed, 1 insertion(+)

再推送

[root@ci-node1 git_test]# git push -u gitlab master
Counting objects: 3, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 273 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To 192.168.31.11:test/git_test.git
   be5cdbe..b5692cb  master -> master
Branch master set up to track remote branch master from gitlab

推送成功再去看看 gitlab,推上來了,dev用戶推不上來,ci-node1 可以推上來,ci-node1 公鑰綁定的是root用戶 admin用戶,

ci-node2 公鑰綁定要dev用戶,我們設置master分支只有master角色才能推送

 

 

 不讓dev用戶推到master分支,dev用戶只能推到dev分支上,做完還可以提個申請,申請把代碼合並到master

 

 

切換到dev分支

 

[root@ci-node2 git_test]# git branch
  dev
* master
[root@ci-node2 git_test]# git checkout dev
Switched to branch 'dev'
Your branch is up-to-date with 'origin/dev'.

 

 

 

 

我們創建一個文件 ci-node2 然后提交 推送到gitlab 上的dev用戶

 

[root@ci-node2 git_test]# touch ci-node2
[root@ci-node2 git_test]# ll
total 4
-rw-r--r-- 1 root root 21 Mar 30 00:11 a
-rw-r--r-- 1 root root  0 Apr  4 18:36 ci-node2
-rw-r--r-- 1 root root  0 Mar 30 00:34 dev
-rw-r--r-- 1 root root  0 Mar 30 00:11 master
-rw-r--r-- 1 root root  0 Mar 30 00:11 test

[root@ci-node2 git_test]# git add .
[root@ci-node2 git_test]# git commit -m "touch ci-node2 file on dev branch"
[dev 30de0f6] touch ci-node2 file on dev branch
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 ci-node2

 

 

[root@ci-node2 git_test]# git remote
origin
[root@ci
-node2 git_test]# git push -u origin dev Counting objects: 2, done. Compressing objects: 100% (2/2), done. Writing objects: 100% (2/2), 247 bytes | 0 bytes/s, done. Total 2 (delta 1), reused 0 (delta 0) remote: remote: To create a merge request for dev, visit: remote: http://192.168.31.11/test/git_test/merge_requests/new?merge_request%5Bsource_branch%5D=dev remote: To 192.168.31.11:test/git_test.git a0e7b8d..30de0f6 dev -> dev Branch dev set up to track remote branch dev from origin.

 

 

 

在gitlab登錄dev用戶 在dev分支上做了改動  ,然后可以在web界面提交合並申請 把dev分支合並到master分支

dev分支上收到推送的ci-node2文件

 

 

 

 

出現界面填信息

 

 

 

 

然后退出來,登錄root用戶 發現合並請求

 

 

 

 

 

 

 

 這里可以看合並了什么東西 有什么改變

 

 沒有問題就merge

 

 

點完merge以后,他會告訴你 已經合並過來了

 

 再看看 master分支的倉庫 ci-node2 合並進來master

 

 沒有權限推送到master,你可以在提合並申請,合並申請有合並內容,


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM