簡體   English   中英

Git-在允許推送到分支之前需要合並來自master的提交

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM