Получить информацию о Git 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)

просто 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)
  • Если это так, есть ли способ получить какой-то дополнительный вывод об этих слияниях (и, если есть, unmerges)? Это не так, как их найти другим способом?

1 ответ

Это похоже на то, что --word-diff должен делать. Git разбивает файлы на слова (с " " в качестве разделителя) и показывает минимальные порции. Вы можете видеть, что ваши строки всегда разделены пробелами.

Попробуйте использовать --word-diff-regex=<regex> с конечными символами.

Что касается информации о слияниях, то здесь может пригодиться git blame.

Другие вопросы по тегам