首页 > 解决方案 > Git - 根据内容忽略文件

问题描述

我们的构建过程会自动生成许多不遵循任何特定命名约定的源代码文件。一个共同点是在文件中写着“(自动生成)”的注释。问题是因为这些文件是由构建自动生成的,并且从不手动修改,我不想将它们签入源代码管理。

据我所知,没有简单的方法可以添加这些文件,.gitignore因为它们不遵循任何特定的命名约定。手动添加所有这些也不是一种选择,因为它们有数百个,将来可能会出现更多。有没有办法让 git 忽略文件中包含“(自动生成)”这个词的所有文件?

标签: gitgitignore

解决方案


git 中没有办法创建基于内容的忽略规则。你可以大概算一下。

您可以使用预提交挂钩来检查包含模式 ( (Autogenerated)) 的文件,例如可能通过

for file in $(git grep -l --cached '(Autogenerated)') ; do

如果找到,则从索引中删除它们

    git rm --cached $file
done

当然,如果您能更好地使自己免受误报的影响,那就太好了。即使是限制git grep查找内容的部分文件名/路径模式也会有所帮助。

如果您希望(或发现)误报是您无法避免的问题,您可能希望让钩子打印出推荐的文件列表以取消暂存,然后拒绝提交,而不是取消暂存文件并继续。但是,您需要一种方法让用户将他们想要提交的文件“列入白名单”,并且钩子必须对此进行检查。

关于客户端钩子(如预提交)的事情是,您必须在每个克隆上单独设置它们。如果有人忘记了,那么他们将意外签入生成的文件。

此外,在构建和提交周期的过程中,用户将在他们的工作树中积累未跟踪(但未被忽略)的文件,这有时可能会干扰他们想要做的事情。

如果您可以修改构建过程以在工作树之外生成这些文件(或至少在您可以忽略的一致路径),那会更好。


推荐阅读