1

我正在尝试查看在名为 IP.Board 的新版本软件中所做的一些更改。但是,当我在本地存储库中运行 git show 时,它们的版本 3.4.2 和 3.4.3 之间有很多文件刚刚更新了它们的版本号。

像这样:

- * IP.Board v3.4.2
+ * IP.Board v3.4.3

有什么简单的方法可以忽略唯一更改的文件吗?我猜他们的版本生成器会自动更新所有包含文件中的版本号。

4

3 回答 3

4

这不是非常强大,但可能已经足够好了。投入.git/config

[diff "remove-rev"]
    textconv=sed '/IP.Board v[0-9]*\\.[0-9]*\\.[0-9]*/d'

然后在.gitattributesor.git/info/attributes中,输入:

* diff=remove-rev

现在,无论何时git-diff运行,sed 脚本都会在 gitdiffcore 决定哪些文件对不同之前应用于文件。您可能需要调整sed命令以满足您的需要,但这应该会有所帮助。

于 2013-02-26T20:09:01.673 回答
0

不。git 使用文件内容的哈希来跟踪文件的内容。当版本发生变化时,内容会发生变化,哈希也会发生变化。

于 2013-02-26T19:33:15.877 回答
0

不,你不能。我知道这不是您想要的,但我建议您解决这个问题。

是的,这很糟糕。但是,尝试在 git 级别解决它(或减轻头痛)只会确保您能更长时间地忍受这个问题。事实是,这是设置构建时设计选择不佳的结果。

您可以忽略这些文件,但首先必须从 git 中删除它们:

  1. 备份您要删除的文件
  2. git rm <files>
  3. 犯罪
  4. 恢复文件。
  5. 编辑 .gitignore 并添加恢复的文件,直到 git 说你的工作树是干净的。

如果这不可行,您可以做的最好的事情是使用脚本组合作为提交挂钩,尽可能多地自动化管理这些文件的过程。它仍然会很痛苦,但不会那么痛苦。再次,我建议你不要走这条路。

更新:如果您不打算自己更改这些版本号,您还可以使用过滤器(一个需要两个命令的脚本 - 涂抹和清洁)。当命令被涂抹时,您的脚本将删除带有版本号的行,类似于 William 所指出的。当命令干净时,您的脚本将重新添加这些行。

请注意,这与威廉的方法之间的主要区别在于,使用它,即使您在普通文本编辑器中打开文件,您也不会看到版本行,因为这种方法实际上会修改文件的内容 - 而不是 git 的视图它。因此,这可能不是您想要的——最安全的方法是 William 所建议的,它正在改变 git 看待差异的方式。

这是有关这两种方法的更多信息

于 2013-02-26T19:51:51.513 回答