可以通过设置receive.denyNonFastForwards或adding a git hook(或对于Gerrit或Github等特殊的GIT服务器以不同的方式)来拒绝服务器端的强制推送。在执行git fetch
或git pull
或git pull --rebase
时,我想拒绝客户端的强制更新(另请参见here)。如果我无权访问GIT服务器以拒绝强制推送(或者如果我不信任该服务器,因为其他人也具有访问权限),则我可能希望GIT在错误更改时停止运行,然后再强制更改推送完成。这可能有助于注意到攻击者正在更改远程服务器,或者我是否只是想知道是否有人更改了我的提交(是的,如果我真的想避免其他人使用我的名字提交,我需要使用我的密钥签名我的提交)。
在使用钩子的fetch or pull命令之后,我似乎无法运行代码。我解析了git fetch
的输出,如果已经打印了“强制更新”,则会引发错误。但是实际上最好在更改引用之前检测到这一点。
有更好的方法吗?
答案 0 :(得分:2)
编辑git config中的remote.fetch
行g,从中删除“ +”,然后非快进提取将失败。它不能防止分支删除
答案 1 :(得分:0)
max630's solution很好,但请注意,当您只想检查可以提取/提取的内容时,无需任何配置即可进行试运行:
git fetch --dry-run
,您将看到会,而无需修改远程跟踪分支中的任何内容。
没有类似的拉动技巧,但由于拉动是获取+合并,因此请先进行空运行获取,您将知道会被拉动什么。
此技术的局限性,如kan在下面的注释中正确指出的那样,是它的非原子性:远程状态可能在几秒钟后在您的fetch --dry-run
和真实事物之间改变。无论如何,知道它的存在无害。