检测/防止对git中的文件进行意外更改

检测/防止对git中的文件进行意外更改,git,Git,Git提供了大量的工具来管理更改、进行更改、恢复更改、移动更改、合并更改等等。是否有一种方法可以防止关键文件被无意中更改(或者更现实地说,检测到文件偏离了设置的“期望”状态,以便我可以将其提交审查)?不一定是一个直接的git特性,但可能是它们的组合,或者是一个允许这样做的一般策略?实现这一点的git特性是钩子 您可以使用本地钩子在提交时检查不需要的更改。这是你能得到的最接近理想的时机——问题越早被发现,建立在问题之上的工作就越少,因此修复它的成本就越低 但是,您不能强制用户在其克隆中运行钩子。(

Git提供了大量的工具来管理更改、进行更改、恢复更改、移动更改、合并更改等等。是否有一种方法可以防止关键文件被无意中更改(或者更现实地说,检测到文件偏离了设置的“期望”状态,以便我可以将其提交审查)?不一定是一个直接的git特性,但可能是它们的组合,或者是一个允许这样做的一般策略?

实现这一点的git特性是钩子

您可以使用本地钩子在提交时检查不需要的更改。这是你能得到的最接近理想的时机——问题越早被发现,建立在问题之上的工作就越少,因此修复它的成本就越低

但是,您不能强制用户在其克隆中运行钩子。(这不是一个bug;在git的一般用例中,陌生人可能会克隆您的repo,这将是一个安全问题,导致他们运行您选择的任意代码。)

您可以提供钩子脚本,甚至可以提供他们可以选择运行的脚本来安装钩子。除此之外,您唯一能做的就是鼓励使用脚本


实现这一点的主要方法是在服务器端预接收钩子中进行检查,以便拒绝违反规则的推送。现在,用户有了运行提交钩子的动机,因此他们可以尽早发现并解决问题,因为在问题得到解决之前,他们无法共享他们的工作。

Git钩子呢?它们呢?@Ааааааааааааааааааа107。检查一下。谢谢,但不是这样。有很多方法可以调用检查,但是我应该在存储库中的何处放置定义“所需”状态的引用?如果它不会受到意外错误合并的影响,就像我试图保护的文件一样?您可以在钩子处检查所需的状态。不,如果你在钩子中拒绝它,它就不能被合并。谢谢你,但就我而言,钩子是一个可选的便利机制。虽然它可能很有用,但我认为它并不意味着要建立一个远程防火墙。事实上,我们有预提交挂钩,但由于某些检查或其依赖性的长期运行问题,我们不得不不时禁用它们。理论上看起来不错,但事实证明,要在回购协议周围保持一个密闭的周界,并且不让所有人同时停止工作,是极其困难的。@Ааааааааааааааааа1072。说挂钩只是一种方便的机制实际上是不正确的。如上所述,客户端钩子由开发人员自行决定(有充分的理由),但是服务器端钩子可以并且正在被无数项目用于您描述的目的。如果它们不适用于你(或者你的主机设置不支持它们),那么你可以看看你的主机软件提供了什么功能,但是对于你要求做的事情,我不知道有什么东西在本质上不是钩子。我也不知道这样的功能,以防其他人被问到。这可能就是答案,根本就没有。我认为没有必要因为钩子依赖于人和其他软件来完成的事情而给予他们荣誉。@Аааааааааа-不,答案不是没有机制。答案是挂钩是一种机制。同样,您对该解决方案的厌恶并没有改变很多很多项目使用该机制来解决这个问题。说hooks“依靠人和其他软件”来做他们所做的事情,完全是错误的。