在中央git repo上,我需要忽略特定文件在推送到repo时的更改。我不想拒绝(失败)整个推送,而只是忽略这些改变。我可以使用git hook来简单地过滤掉一些变化吗?
我考虑使用filters,但我不确定它们是否会在中央仓库中使用,因为它是“裸露的”,例如,没有工作副本。
详细信息:在类似于this的场景中,有数十个开发者正在推动对这些文件的更改。 我尝试在中央仓库上使用git update-index --assume-unchanged,但是它会被“流浪”开发的每次推送重置,然后当它们拉动时会传播到其他开发者。我不能马上改变所有开发者的回购。我想在中央仓库上进行一次更改,然后忽略对这些文件的更改。
答案 0 :(得分:1)
您根本无法做到这一点,因为从提交中排除文件会改变哈希值。我的意思是你可以这样做,但你绝对不想要它。
在您的情况下,最合理的解决方案实际上是拒绝修改具有有意义错误的文件的提交,例如“您无法修改以下文件:...”并教育您的提交者。
答案 1 :(得分:0)
这在技术上是可行的,但它带来了巨大的实际麻烦(更不用说钩子写起来相当麻烦):客户端仍然会有未经过滤的历史记录,因此在下一次推送时它会将客户端视为如果服务器与其自己的历史完全不同。用户最终会将过滤后的历史记录与未经过滤的历史记录合并,然后按下您的钩子进行过滤,故事将继续重复。
出于这个原因,通常最好拒绝挂钩或让所有开发人员安装预先提交的钩子来做类似的事情。
如果您喜欢痛苦,请在此处概述如何在预接收/更新挂钩中执行此操作:
git rev-list
的内容检查是否有任何相关文件被触及。如果没有,只需纾困,因为接下来的步骤将非常痛苦。git-new-workdir
contrib脚本)。