让git跟踪自动生成的文件,但忽略diff

时间:2015-06-28 12:58:17

标签: git code-generation gitignore auto-generate

我有一个包含源代码(主要是*.php*.js)和文档文件(主要是*.md*.html*.svg)的存储库从注释生成。所有文档都位于存储库中的单独子目录(./doc)中。

一方面,我希望通过git跟踪文档,如果它发生变化,我希望它可以提交/推送到服务器,因为它有一个可浏览的向上变化由github很好地展示的最新文档。

另一方面,在输出git diff命令期间看到自动生成的文件非常烦人。例如,如果在两次提交之间更改了一行源代码,那么git diff不仅会输出这一行,而且还会输出所有自动生成的文档,因为整个自动生成的文档已经更改。

有没有办法告诉git跟踪文档但默认情况下将其从diff中排除?如果git将所有文档文件视为blob,我也会对我好。然后,至少diff只会声明文件已更改,但不会显示所有文档的每行。

2 个答案:

答案 0 :(得分:11)

  

如果git会考虑所有文档,我也会对我好   文件为blob。

您可以使用属性。只需创建一个包含doc/.gitattributes的文件* -diff,然后该路径下的所有内容都将被视为差异的二进制文件。有关详细信息,请参阅man gitattributes

当您想要查看其差异时,可以使用git diff --text覆盖它。

答案 1 :(得分:1)

我最初提出了一个涉及本地修改的解决方案(更新doc/文件的索引(git update-index),以便不检测任何差异)

cd doc
git ls-files -z | xargs -0 git update-index --assume-unchanged

但是,OP正确评论:

  

--assume-unchanged之后,文件不会包含在提交中,直到我通过--no-assume-unchanged撤消对索引的更改。
  因此,我必须保证在每个git diff之前和之后直接调用它们。

     

我一直在寻找一种更“永久”的解决方案。一种解决方案,适用于每个用户在没有特别注意的情况下检出存储库,并且也可以在Github中工作   目前我无法真正使用Github的“显示历史/差异”功能,因为Github在处理了一定数量的文件后停止显示差异,不幸的是它只显示了自动生成的文档中不相关的更改部分但不是在实际重要的文件中

我同意。
然后另一种选择是通过以下方式隔离自己仓库中的所有doc/个文件:

那样(在git子模块更新后--init),你可以在你的主仓库中工作,并随时生成文档:git diff只会显示主(父)仓库的差异,而不是那些in(子模块)doc/

但是当您推送主仓库时,必须首先添加,提交并推入doc/(子模块),然后才能添加,提交和推送主仓库。
这是因为主要代表将doc/视为 gitlink (SHA1,special entry in the index),当您在{{1}提交时,它会发生变化需要由引用它的主回购记录。