2015-05-19 1 views
1

Я пытаюсь построить поточную историю файла, и у меня возникло странное поведение в git diff/git log ... командах при использовании режима --word-diff. Он иногда объединяет некоторые строки.Получите информацию о линиях слияния строк git 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); 

(Эти строки из this проекта распространяется с лицензией GPL)

Simple 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 на самом деле показывает мне лучший человеко-читаемый diff, потому что две строки после редактирования стали одной строкой, но это не очевидно для скриптов. Таким образом,

  • Предполагается ли такое поведение? (git 1.9.1)
  • Если это так, есть ли способ получить дополнительную информацию об этих слияниях (и, если есть, не работает)? Это не так, как найти их по-другому?

ответ

0

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

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

Информация о слияниях: git blame может быть здесь полезной.

+0

http://www.git-scm.com/docs/git-diff –

+0

Вы имеете в виду слово "[: space:] + \ n" как слово? Как я понимаю, \ n игнорируются как часть слова. –

+0

Я хочу рассматривать «[: пространство:] + \ n" как разделитель слов. Таким образом, строки ваших файлов станут «словами» для git. –

Смежные вопросы