[英]Git - require merging commits from master before allowing push to branches
我們希望通過允許這些分支從主分支中拉出/合並,然后再允許推送到開發分支(如果對主分支進行任何更改)來防止開發分支之間的長時間合並沖突。 可以強制執行嗎?
是的,取決於中央存儲庫的托管方式。 如果將其托管在GitHub或GitLab.com之類的網站上,則可能無法實現,因為這些類型的提供程序不允許您提供自己的代碼來檢查推送(您可以通過其網絡界面配置一些限制,但我不能)認為您想要的東西在那里可能)。
對於自托管的存儲庫,您可以在update
掛鈎中執行此操作(請參閱有關掛鈎的文檔 )。 這是我尚未實際測試過的示例:
#!/bin/sh
if [ "$1" = "refs/heads/development" -a "$(git rev-list $3..master)" ]; then
echo "ERROR: master is not merged into development, please try again" >&2
exit 1
fi
如果從master
上的提交集中減去新的development
狀態中的提交集,這實際上將檢查是否“一無所有”。 如果已合並,則development
將具有master
的所有提交,因此結果將為空集。
這相當簡單,但有一些小缺點:
master
,則此掛鈎中的檢查可能尚未意識到對master
的新更改,因此在這種情況下,您可能會得到錯誤的否定消息(未合並更改,但推送通過了)。 master
上發生的最后一個(也是唯一的)新事件是來自development
的合並,則該鈎子會給出某種錯誤的肯定,因為master
會具有合並提交,而development
則不會。 當然,我們知道這是兩個分支之間的非實質性區別,但是掛鈎中的簡單設置算法無法理解這些區別。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.