在GIT中,我如何防止他人更改或删除已经推送的提交记录?

6
我们最近有一个实习生运行了“git reset --hard”命令,意外地撤销了我们主GIT库上的很多工作。我们正在恢复这些工作,但我想确保以后不会再发生这样的事情。
我知道有很多关于这个问题的问题,但它们似乎都是关于恢复而不是预防。有没有办法防止向我们的主要存储库推送更改或删除已推送的提交记录?是否有配置设置或推送钩子可以完成此任务?

@Sean:实习生是直接在主仓库上工作,还是在本地克隆上工作的? - Fred Foo
谢谢您的回复。这是否需要更改我们的工作流程,以便管理员在每个提交成为我们主要存储库的一部分之前都必须进行审核和拉取? - Sean
@larsmans 他正在本地克隆上工作。可能是我对发生的事情有所误解。我们注意到我们做的一些更改不再在仓库中,并将它们作为悬空提交找到了。我们猜测这可能是因为实习生执行了硬重置然后推送导致的。 - Sean
@larsmans 一个 push 可能会将远程仓库的提交推送到远程,但是所有拥有该仓库副本的人仍然拥有所有提交,并且可以将它们推回去。 - Mark Dominus
3
push -f 实际上会删除提交记录吗,还是只是使它们无法访问?我倾向于后者(这样它们可能最终会被 git gc 删除,但应该保留足够长的时间以便恢复)。 - William Pursell
显示剩余3条评论
1个回答

9

在您的中央(裸)仓库上,有2个配置选项可设置,以帮助防止此问题:

receive.denyNonFastForwards
receive.denyDeletes

第一个选项要求所有的推送只能添加历史记录。执行 git reset 接着 git push 将被拒绝。
第二个选项关闭了一种漏洞,即有人可以使用 git push : 删除远程分支,然后再用普通的 git push 推送任何更改。

这听起来就是我正在寻找的东西。我会尝试一下。谢谢! - Sean

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