我刚刚避免了一次国际事件。我们的其中一位开发人员执行了git push origin --prune
(而不是git fetch origin --prune
)!
这导致所有远程分支在远程代码库上都被删除了(除了当前分支)。
幸运的是,另一位开发人员的克隆没有进行获取,所以我可以重新推送所有远程分支。
这对我来说似乎相当危险;有没有办法防止这种情况发生,或者至少让它更难发生?
您可以在服务器端更改更新钩子。
您可以在此处找到有关此的文档: http://git-scm.com/docs/githooks 并在此处找到更详细的示例: An Example Git Enforced Policy
我认为您可以编写一个钩子,以拒绝删除多个分支。
update
钩子确实每个引用调用一次,但pre-receive
钩子会一次性调用更新的完整引用列表。 - Sven Marnach这取决于您如何管理授权。 如果您使用gitolite,您只需要确保标准用户在存储库上没有RW+权限。
gitolite中访问规则的语法表明,如果没有RW+,用户将无法推送任何会删除存储库中任何内容的操作。
git reflog remotes/origin/master
命令,查询被拷贝到本地库的某些分支信息。如果您确实有一些未被拷贝到任何克隆库上的服务器分支(怎么可能?),那么您可能会失去对它们的 head 指针。 - Sven Marnach