1

我正在尝试构建文件的逐行历史记录,并且在使用模式时在git diff/ ... 命令中出现了奇怪的行为。它有时会合并一些行。git log--word-diff

例如,如果旧版本的文件是:

r = ioctl(hdev->control, VHOST_SET_LOG_BASE,
    (uint64_t)(unsigned long)hdev->log);

它被转换为:

r = hdev->vhost_ops->vhost_call(hdev, VHOST_SET_LOG_BASE, hdev->log);

(这些行来自这个项目,使用 GPL 许可证分发)

Simplegit diff给了我正常的输出(删除了 2 行,添加了 1 行),但git diff --word-diff给了我这个:

r = [-ioctl(hdev->control,-]{+hdev->vhost_ops->vhost_call(hdev,+}
    VHOST_SET_LOG_BASE, [-(uint64_t)(unsigned long)hdev->log);-]{hdev->log);}

将在--word-diff=porcelain模式下发出相同的输出,这不是文本模式错误。

当我试图获取文件的逐行历史记录时,我的方法在这段git log. 我看到这git实际上向我展示了人类可读的最佳差异,因为编辑后的两行变成了一行,但对于脚本来说并不明显。所以,

  • 这种行为是有意的吗?(git 1.9.1)
  • 如果是,有没有办法获得关于这些合并的一些额外输出(如果有,取消合并)?不是,如何通过其他方式找到它们?
4

1 回答 1

0

这看起来像是--word-diff应该做的。Git 将文件拆分为单词(以“”作为分隔符)并显示最小的块。您可以看到您的行总是以空格分隔。

尝试使用--word-diff-regex=<regex>endline 字符。

至于关于合并的信息:git blame在这里可能有用。

于 2015-05-19T11:52:02.327 回答