簡體   English   中英

在執行git fetch或git pull時,如何拒絕客戶端上的GIT強制更新?

[英]How to reject a forced update by GIT on client side when doing a git fetch or git pull?

可以通過設置receive.denyNonFastForwards添加git鈎子 (或對於Gerrit或Github等特殊的GIT服務器以不同的方式)來拒絕服務器端的強制推送。 當執行git fetchgit pullgit pull --rebase時,我想拒絕客戶端的強制更新(另請參見此處 )。 如果我無權訪問GIT服務器以拒絕強制推送(或者如果我不信任該服務器,因為其他人也具有訪問權限),則我可能希望GIT在錯誤更改時停止運行,然后再強制更改推送完成。 這可能有助於注意到攻擊者正在更改遠程服務器,或者我是否只是想知道是否有人更改了我的提交(是的,如果我真的想避免其他人使用我的名字提交,我需要使用我的密鑰簽名我的提交)。

我似乎無法使用鈎子在fetch或pull命令之后運行代碼。 我分析了git fetch的輸出,如果已打印“強制更新”,則會引發錯誤。 但是實際上最好在更改引用之前進行檢測。

有一個更好的方法嗎?

編輯git config中的remote.fetch行g從其刪除“ +”,然后非快進提取將失敗。 它不能防止分支刪除

max630的解決方案很好,但請注意,當您只想檢查要提取/拉取的內容時,無需任何配置破解,就可以進行空運行:

git fetch --dry-run

您將看到發生什么,而無需在遠程跟蹤分支中進行任何修改。

拉取沒有類似的技巧,但是由於拉取是獲取+合並,因此請事先進行空運行獲取,您將知道會被拉取什么。


這種技術的限制,如在下面的評論指出理所當然,是其非原子性:遠程狀態可能你之間改變fetch --dry-run和真實的東西秒鍾后。 無論如何,知道它的存在無害。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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