Git - 根据内容忽略文件

时间:2018-05-23 15:50:40

标签: git gitignore

我们的构建过程会自动生成许多源代码文件,这些文件不遵循任何特定的命名约定。所有人都有一个共同点是评论说"(自动生成)"在文件里面。问题是因为这些文件是由构建自动生成的,并且从未手动修改过,我不想将它们检查到源代码控制中。

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

1 个答案:

答案 0 :(得分:1)

git中没有办法创建基于内容的忽略规则。你可以近似它。

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

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

并将其从索引中删除(如果找到)

    git rm --cached $file
done

当然,如果你能更好地保护自己免受误报,那将是件好事。即使是部分文件名/路径模式来限制git grep查找的内容也会有所帮助。

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

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

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

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

相关问题