我有一个包含源代码的存储库(主要是 *.php
, *.js
)和文档文件(主要是 *.md
, *.html
, *.svg
)是从注释自动生成的。所有文档都位于单独的子目录中(./doc
)在存储库中。
一方面,我希望通过跟踪文档 git
如果它发生变化,我希望它被提交/推送到服务器,因为它具有可浏览和最新文档,并且由github很好地显示。
另一方面,在输出期间看到自动生成的文件是非常烦人的 git diff
命令。例如,如果在两次提交之间更改了一行源代码,那么 git diff
不仅输出这一行,而且还输出所有自动生成的文档,因为整个自动生成的文档已经更改。
有没有办法告诉git跟踪文档但是将其排除在外 diff
默认?如果git将所有文档文件视为blob,我也会对我好。然后至少 diff
只会声称文件已更改,但不会显示所有文档每行。
我最初提出了一个涉及本地修改的解决方案(更新索引(git update-index
)的 doc/
文件,以便不检测任何差异)
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只显示主(父)仓库的差异,而不是(仓库)子模块) doc/
。
但是当你推动主仓库时,你必须先添加,提交和推送 doc/
(子模块),在添加,提交和推送主回购之前。
那是因为 doc/
被主要的回购看作是一个 gitlink (一个SHA1, 索引中的特殊条目),当你提交时会改变 doc/
,需要由引用它的主回购记录。
我最初提出了一个涉及本地修改的解决方案(更新索引(git update-index
)的 doc/
文件,以便不检测任何差异)
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只显示主(父)仓库的差异,而不是(仓库)子模块) doc/
。
但是当你推动主仓库时,你必须先添加,提交和推送 doc/
(子模块),在添加,提交和推送主回购之前。
那是因为 doc/
被主要的回购看作是一个 gitlink (一个SHA1, 索引中的特殊条目),当你提交时会改变 doc/
,需要由引用它的主回购记录。
如果git会考虑所有文档,我也会对我好
文件为blob。
您可以使用属性。只需创建一个文件 doc/.gitattributes
其中包含 * -diff
,然后该路径下的所有内容将被视为差异的二进制。看到 man gitattributes
详情。
您可以使用 git diff --text
当你想要看到他们的差异时覆盖它。