2011-11-23 358 views
7

我開始玩弄git鉤子,並且我想創建一個以防止開發人員在特定分支上創建新分支。我們公司的當前進程是爲了看起來像這樣:Git鉤子阻止從特定分支創建新分支

git checkout master 
git fetch 
git reset --hard origin/master 
git checkout -b [branch name] 
do awesome things. 

然而,偶爾快速移動時,一些開發商最終從登臺回購開始這個新分支。這會導致悲傷。

所以,我想創建一個掛鉤,以便在開發人員開始創建新分支時檢查它們在哪個分支上,並且如果該分支不是master(或者只是通常停止該操作),則可以使用exit 1如果分支名稱是staging),或者以其他方式允許。

編輯:

當我搜索更多關於這個,我知道我想結帳前的鉤,這似乎不存在。除非有人有更好的主意,否則如果上述方案即將通過,我將在後結帳掛鉤中繼續打印非常大的警告。

+0

同樣,你爲什麼要阻止分支? – jman

+1

我們的暫存分支包含很多我們不希望推到生產中的代碼,必然。 – hookedonwinter

回答

0

我會在這個幸運的回購方面看到這一點。如果一個開發者在除了最新的主控器之外的其他事物上啓動了某個分支,則拒絕該分支的推送。他們可以通過脫離主人並重新推動來糾正。確保你的錯誤信息足夠描述,以便他們知道如何糾正他們的情況。

此外,更新主沒有檢查出來有:

git fetch 
git push . origin/master:master 

然後創建一個分支自己的最新大師:

git checkout -b somecoolfeature master 

你不必甚至有當地主最新日期:

git fetch 
git checkout -b somecoolfeature origin/master 
do awesome stuff :) 
1

對於客戶端,您可以創建一個文章-checkout使用git分支的掛鉤 - 併入以查看當前分支中合併的分支。如果你想防止分支的分支被合併到當前分支中,那麼你會拋出錯誤。在巴赫

代碼應該是這樣的:

 
#!/bin/sh 

getBranchName() 
{ 
    echo $(git rev-parse --abbrev-ref HEAD) 
} 

getMergedBranches() 
{ 
    echo $(git branch --merged) 
} 

if [ "$(getBranchName)" != "dev" ]; then 
    if [[ $(getMergedBranches) == *"dev"* ]]; then 
     echo "Don't create branches from the dev branch!" 
     exit 1 
    fi 
fi