2015-03-03 181 views
1

有沒有一種簡單的方法來配置我們的git倉庫,這種方式只允許預先定義的一組用戶在原產地推入主分支?管理git - 主分支推送權限

我發現某些工具需要爲這樣的任務付款,但想知道這是否默認支持git,而不需要git服務器工具。

任何意見和指示將受到歡迎。

+0

你可以使用你的linux或windows用戶的權限來源於你的目錄 – 2015-03-03 11:37:39

+0

gitlab是一個免費的git服務器,這是非常好的。你可以看看這個答案:http://stackoverflow.com/a/22906383/2082964 – 2015-03-03 11:39:17

+0

可能重複的[git分支權限](http://stackoverflow.com/questions/13248246/git-branch-permissions) – 2015-03-03 11:40:02

回答

1

一個簡單的解決方案是編寫一個自定義鉤子來監聽每個更新並擁有一個自定義身份驗證解決方案。

在.git文件中有一個掛鉤目錄,其中包含自定義掛鉤的示例實現。刪除.sample後綴將使該鉤子變得可操作(默認情況下鉤子示例有回調註冊)。

更新掛鉤將在每次推送後觸發,退出1將簡單地禁止該推送被應用。一些線上的:

refname="$1" 
oldrev="$2" 
newrev="$3" 

author="$(git log $newrev -1)" 

# user names on the white list 
whitelist=('Admin1' 'Admin2' 'Admin3' ) 

# branches to be controlled 
master="refs/heads/master" 
test="refs/heads/test" 

if [[ "$refname" == "$master" || "$refname" == "$test" ]] 
then 
       for name in "${whitelist[@]}" 
       do 
           echo $name 
           if [[ "$author" == *"$name"* ]] 
           then 
               exit 0 
           fi 
       done 
else 
       exit 0 
fi 

echo "Master or test branch is not within your reach ! Contact your supervisor ! " 
exit 1 

我強烈建議您根據您的身份驗證策略編寫自己的腳本。上面的腳本只是給出一個想法,並且很容易被破解。

0

Git沒有自己的權限系統。您將不得不使用其他方式來管理它們,如GitLabgitolite。你也可以使用git hook來構建你自己的。

+0

Thx爲您的答覆,但我需要更多的細節,我如何可以寫一個預先接受鉤。我們通過基本的http進行認證。我沒有看到我將如何從服務器端接收攜帶auth信息的stdin參數。 – Pumpkin 2015-03-03 15:06:41

+0

這就是說,您提到的工具在我們的案例中希望付款,而且即使他們不需要付款,我也不能認爲這些解決方案是可行的解決方案,請參閱其他選項。 – Pumpkin 2015-03-03 15:07:54

+0

你可以在你自己的服務器上安裝GitLab Community Edition和gitolite,而無需支付任何費用。如果你真的想要推出自己的產品,首先閱讀文檔(http://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols)。 – orkoden 2015-03-03 15:39:29