【发布时间】:2015-07-31 00:06:01
【问题描述】:
我正在尝试构建文件的逐行历史记录,但在使用 --word-diff 模式时,我在 git diff/git log... 命令中出现了奇怪的行为。它有时会合并一些行。
例如,如果旧版本的文件是:
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);
(这些行来自this项目,使用 GPL 许可证分发)
简单的 git 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)
- 如果是,有没有办法获得一些关于这些合并的额外输出(如果有,取消合并)?不是,如何通过其他方式找到它们?
【问题讨论】: