我想要做什麼合併的提交:有遠程的Git倉庫拒絕推送
我想禁止任何合併提交是推到中央存儲庫。 唯一例外如果合併在中央存儲庫中存在的分支之間。我想在中央存儲庫執行此操作。
解釋我爲什麼要這麼做:
注:如果這份說明你天旋地轉的是我想做的線索,則忽略該項解釋。當然,我很高興聽到其他方法來解決我在下面解釋的問題,但我感興趣的答案是我想要如上所述做的。
我有一箇中央git存儲庫,有幾個開發人員跟蹤的分支。每個開發人員都爲該中央存儲庫的分支配置一個遠程。
我們遵循此項目的同步提交策略,因此每個開發人員在推送之前都必須始終在遠程分支頭頂部重新分配他們的最新工作。我想通過禁止任何合併提交被推送到中央存儲庫來執行此策略。唯一的例外是如果合併在中央存儲庫中存在的分支之間。
爲了簡化,我不希望開發人員的本地跟蹤分支與遠程分支合併。但總是在遠程分支上重新設計。
通過設置branch.NAME.rebase = true,我們已經在開發人員的機器上部分實施了這個功能,這有助於避免開發人員使用git pull時出現的問題,但是我們需要一個解決方案來在中央存儲庫一側執行此操作。
一個非常基礎的解決方案是拒絕提交註釋:「Merge branch'NAME'of GITURL」,但是,更多的檢查是否所有的父母都存在於中央存儲庫的分支路徑中更有趣。
對此提出建議?解決方案?
編輯:
這是我到目前爲止有:
#!/bin/sh
read sha1old sha1new refname
# check if this is merge commit
merge_commit="`git rev-list --parents --merges --no-walk $sha1new 2> /dev/null`"
if test -n "$merge_commit"
then
# this was a merge commit
# $merge_commit contains: sha1new sha1parent_1 ... sha1parent_n
fi
exit 0
它變得麻煩的地方是確定任何兩個父母的血統是否從單獨分支起源。另外,由於pre-receive鉤子在任何refs被更新之前被調用,如果一個push包含兩個分支在遠程存在的提交,包括這兩個分支之間的合併,那麼我不知道這裏的解決方案是什麼。
完全重複:http://stackoverflow.com/questions/1997916/git-post-receive-how-to-check-if-pushed-branch-is-merged-with-master – Dustin 2010-01-11 04:00:52
我完全不同意它是一個副本。它與我所問的事情很少有關。 – chris 2010-01-11 04:11:32