Git服务器钩子以静默方式忽略对特定文件的更改

Git服务器钩子以静默方式忽略对特定文件的更改,git,githooks,git-pull,git-post-receive,gitattributes,Git,Githooks,Git Pull,Git Post Receive,Gitattributes,在中央git repo上,当特定文件被推送到repo时,我需要忽略它们的更改。我不想拒绝(失败)整个推送,而只是忽略这些更改。是否有一个git钩子可以简单地过滤掉一些更改 我曾考虑过使用,但我不确定它们是否会用于中央回购,因为它是“裸”的,例如,没有工作副本 详细信息:在类似的场景中,数十个开发人员正在推动对这些文件的更改。 我试着在中央回购上使用,但它会被“游离”开发人员执行的每一次推送重置,然后在其他开发人员拉动时传播给他们。我不能一次改变所有开发者的回购协议。我想在中央回购协议上做一次更改

在中央git repo上,当特定文件被推送到repo时,我需要忽略它们的更改。我不想拒绝(失败)整个推送,而只是忽略这些更改。是否有一个git钩子可以简单地过滤掉一些更改

我曾考虑过使用,但我不确定它们是否会用于中央回购,因为它是“裸”的,例如,没有工作副本

详细信息:在类似的场景中,数十个开发人员正在推动对这些文件的更改。
我试着在中央回购上使用,但它会被“游离”开发人员执行的每一次推送重置,然后在其他开发人员拉动时传播给他们。我不能一次改变所有开发者的回购协议。我想在中央回购协议上做一次更改,然后忽略对这些文件的更改。

这在技术上是可能的,但会带来巨大的实际麻烦(更不用说编写钩子是相当麻烦的):客户端仍然会有未经过滤的历史,因此,在下一次推送时,它将在客户端看来,服务器的历史与它自己的历史完全不同。用户最终将合并过滤后的历史和未过滤的历史,推送时,这将被你的钩子过滤,故事将继续重复

出于这个原因,通常最好拒绝这个钩子,或者让所有的开发人员安装一个预提交钩子来做类似的事情

如果你喜欢痛苦,这里有一个如何在预接收/更新钩子中实现痛苦的概要:

  • 使用涉及git rev list的内容检查是否有任何文件被触动。如果没有,就退出吧,因为接下来的步骤将是相当痛苦的
  • 临时签出推送之前的历史记录(可以使用
    git new workdir
    contrib脚本)
  • 找出新提交的列表
  • 应用其中的每一项,立即修改相关文件的更改
  • 摆脱临时结帐
  • 更新分支,并使用非零代码退出钩子(这将导致向用户显示一个错误,但您可以随它一起发送一条漂亮的消息)。这会阻止正常的推送过程更新分支本身并取消您的繁重工作

您不能这样做,因为从提交中排除文件将更改哈希。我的意思是你可以这样做,但你绝对不想要

在您的情况下,最合理的解决方案实际上是拒绝使用有意义的错误修改这些文件的提交,例如“您不能修改以下文件:…”,并教育提交者