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

问题描述 投票:0回答:2

通过设置receive.denyNonFastForwardsadding a git hook(或者以特殊GIT服务器(如Gerrit或Github)的不同方式),可以拒绝服务器端的强制推送。在做heregit fetchgit pull时,我想拒绝客户端的强制更新(另请参阅git pull --rebase)。如果我没有访问GIT服务器来拒绝强制推送(或者如果我不信任服务器,因为其他人也有访问权限),我可能希望GIT在更改任何引用之前因错误而停止,当强制推送是完成。这可能有助于注意到攻击者更改了遥控器,或者如果我只是想知道是否有人更改了我的提交(是的,如果我真的想避免别人使用我的名字进行提交,我需要使用我的密钥签署我的提交)。

我似乎无法在使用hooks的fetch or pull命令后运行代码。我解析git fetch的输出并在打印“强制更新”时引发错误。但是在改变参考之前检测这个实际上会更好。

有一个更好的方法吗?

git git-push git-fetch
2个回答
2
投票

从git config编辑remote.fetch行以从中删除“+”,然后非快速提取将失败。它不保护分支删除


0
投票

max630's solution很好,但是我们要注意的是,当你只想检查什么会被提取/拉出时你可以,没有任何配置黑客,去干运行:

git fetch --dry-run

并且您将看到本来会发生的事情,而不会修改远程跟踪分支中的任何内容。

拉动没有类似的技巧,但是因为拉动是一个fetch +一个合并,所以请事先进行干运行获取,你就会知道什么会拉动。


正如kan在下面的评论中正确指出的那样,这种技术的极限是它的非原子性:远程状态可能在几秒钟之后在你的fetch --dry-run和真实事物之间发生变化。无论如何,知道它存在无害。

© www.soinside.com 2019 - 2024. All rights reserved.