我正在尝试查看在名为 IP.Board 的新版本软件中所做的一些更改。但是,当我在本地存储库中运行 git show 时,它们的版本 3.4.2 和 3.4.3 之间有很多文件刚刚更新了它们的版本号。
像这样:
- * IP.Board v3.4.2
+ * IP.Board v3.4.3
有什么简单的方法可以忽略唯一更改的文件吗?我猜他们的版本生成器会自动更新所有包含文件中的版本号。
我正在尝试查看在名为 IP.Board 的新版本软件中所做的一些更改。但是,当我在本地存储库中运行 git show 时,它们的版本 3.4.2 和 3.4.3 之间有很多文件刚刚更新了它们的版本号。
像这样:
- * IP.Board v3.4.2
+ * IP.Board v3.4.3
有什么简单的方法可以忽略唯一更改的文件吗?我猜他们的版本生成器会自动更新所有包含文件中的版本号。
这不是非常强大,但可能已经足够好了。投入.git/config
:
[diff "remove-rev"]
textconv=sed '/IP.Board v[0-9]*\\.[0-9]*\\.[0-9]*/d'
然后在.gitattributes
or.git/info/attributes
中,输入:
* diff=remove-rev
现在,无论何时git-diff
运行,sed 脚本都会在 gitdiffcore 决定哪些文件对不同之前应用于文件。您可能需要调整sed
命令以满足您的需要,但这应该会有所帮助。
不。git 使用文件内容的哈希来跟踪文件的内容。当版本发生变化时,内容会发生变化,哈希也会发生变化。
不,你不能。我知道这不是您想要的,但我建议您解决这个问题。
是的,这很糟糕。但是,尝试在 git 级别解决它(或减轻头痛)只会确保您能更长时间地忍受这个问题。事实是,这是设置构建时设计选择不佳的结果。
您可以忽略这些文件,但首先必须从 git 中删除它们:
git rm <files>
如果这不可行,您可以做的最好的事情是使用脚本组合作为提交挂钩,尽可能多地自动化管理这些文件的过程。它仍然会很痛苦,但不会那么痛苦。再次,我建议你不要走这条路。
更新:如果您不打算自己更改这些版本号,您还可以使用过滤器(一个需要两个命令的脚本 - 涂抹和清洁)。当命令被涂抹时,您的脚本将删除带有版本号的行,类似于 William 所指出的。当命令干净时,您的脚本将重新添加这些行。
请注意,这与威廉的方法之间的主要区别在于,使用它,即使您在普通文本编辑器中打开文件,您也不会看到版本行,因为这种方法实际上会修改文件的内容 - 而不是 git 的视图它。因此,这可能不是您想要的——最安全的方法是 William 所建议的,它正在改变 git 看待差异的方式。
这是有关这两种方法的更多信息。