【问题标题】:Get info about git word-diff merging lines获取有关 git word-diff 合并行的信息
【发布时间】: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)
  • 如果是,有没有办法获得一些关于这些合并的额外输出(如果有,取消合并)?不是,如何通过其他方式找到它们?

【问题讨论】:

    标签: git git-diff word-diff


    【解决方案1】:

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

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

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

    【讨论】:

    • 你的意思是把“[:space:]+\n”当作一个词来对待?据我了解,\n 作为单词部分被忽略。
    • 我的意思是将 "[:space:]+\n" 视为单词分隔符。所以你的文件字符串将成为 git 的“单词”。
    • 有什么用?我真的需要word-diff 并查找我使用标准(无--word-diff)模式的行。
    猜你喜欢
    • 2012-06-10
    • 2012-02-07
    • 2019-08-22
    • 1970-01-01
    • 2011-12-04
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    相关资源
    最近更新 更多