[英]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 fetch
或git pull
或git 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.