获取有关git word-diff合并行

时间:2015-05-19 08:53:23

标签: git git-diff word-diff

我正在尝试构建文件的副行历史记录,当使用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许可一起分发的this项目)

简单git diff为我提供正常输出(删除了2行,添加了一行),但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)
  • 如果是,是否有办法获得有关这些合并的一些额外输出(如果有,还有未合并)?不是,如何以其他方式找到它们?

1 个答案:

答案 0 :(得分:0)

这看起来像--word-diff应该做的。 Git将文件拆分为单词(使用""作为分隔符)并显示最小的块。你可以看到你的线总是在空格上分开。

尝试将--word-diff-regex=<regex>与endline chars一起使用。

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