我正在尝试构建文件的副行历史记录,当使用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
实际上向我展示了人类可读的最佳差异,因为编辑后的两行变为一行,但对于脚本来说并不明显。所以,
答案 0 :(得分:0)
这看起来像--word-diff
应该做的。 Git将文件拆分为单词(使用""作为分隔符)并显示最小的块。你可以看到你的线总是在空格上分开。
尝试将--word-diff-regex=<regex>
与endline chars一起使用。
关于合并的信息:git blame在这里可能很有用。