在执行git fetch或git pull时,如何拒绝客户端上的GIT强制更新?

时间:2019-03-04 17:22:49

标签: git git-push git-fetch

可以通过设置receive.denyNonFastForwardsadding a git hook(或对于Gerrit或Github等特殊的GIT服务器以不同的方式)来拒绝服务器端的强制推送。在执行git fetchgit pullgit pull --rebase时,我想拒绝客户端的强制更新(另请参见here)。如果我无权访问GIT服务器以拒绝强制推送(或者如果我不信任该服务器,因为其他人也具有访问权限),则我可能希望GIT在错误更改时停止运行,然后再强制更改推送完成。这可能有助于注意到攻击者正在更改远程服务器,或者我是否只是想知道是否有人更改了我的提交(是的,如果我真的想避免其他人使用我的名字提交,我需要使用我的密钥签名我的提交)。

在使用钩子的fetch or pull命令之后,我似乎无法运行代码。我解析了git fetch的输出,如果已经打印了“强制更新”,则会引发错误。但是实际上最好在更改引用之前检测到这一点。

有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

编辑git config中的remote.fetch行g,从中删除“ +”,然后非快进提取将失败。它不能防止分支删除

答案 1 :(得分:0)

max630's solution很好,但请注意,当您只想检查可以提取/提取的内容时,无需任何配置即可进行试运行:

git fetch --dry-run

,您将看到,而无需修改远程跟踪分支中的任何内容。

没有类似的拉动技巧,但由于拉动是获取+合并,因此请先进行空运行获取,您将知道会被拉动什么。


此技术的局限性,如kan在下面的注释中正确指出的那样,是它的非原子性:远程状态可能在几秒钟后在您的fetch --dry-run和真实事物之间改变。无论如何,知道它的存在无害。