防止"git push origin -prune"命令?

5

我刚刚避免了一次国际事件。我们的其中一位开发人员执行了git push origin --prune(而不是git fetch origin --prune)!

这导致所有远程分支在远程代码库上都被删除了(除了当前分支)。

幸运的是,另一位开发人员的克隆没有进行获取,所以我可以重新推送所有远程分支。

这对我来说似乎相当危险;有没有办法防止这种情况发生,或者至少让它更难发生?


您可以始终从reflog中恢复所有分支的状态,因此它似乎并不真的很危险。实际提交并不会从对象存储中删除,只有指向头部的指针被删除。 - Sven Marnach
@SvenMarnach - 是的,我知道只有指向头部的指针被删除了。然而,reflog 似乎并不包含任何有用的信息。在我们这种情况下,它并不危险,因为我可以从另一个克隆中恢复分支。 - Steve Folly
reflog 仅包含已经被拷贝到本地库的分支信息。除非您指定了非标准的 refspec ,否则这应该是所有的分支信息。例如,尝试运行 git reflog remotes/origin/master 命令,查询被拷贝到本地库的某些分支信息。如果您确实有一些未被拷贝到任何克隆库上的服务器分支(怎么可能?),那么您可能会失去对它们的 head 指针。 - Sven Marnach
2个回答

0

我不确定。我认为更新钩子对于每个被更新的参考都会被调用一次 - 所以我认为远程永远不知道有多少参考被删除? - Steve Folly
1
@SteveFolly:虽然update钩子确实每个引用调用一次,但pre-receive钩子会一次性调用更新的完整引用列表。 - Sven Marnach
@SvenMarnach 如果你把那写成一个答案,我会接受它。 - Steve Folly

0

这取决于您如何管理授权。 如果您使用gitolite,您只需要确保标准用户在存储库上没有RW+权限。

gitolite中访问规则的语法表明,如果没有RW+,用户将无法推送任何会删除存储库中任何内容的操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接