Git - Получить только новые слова из коммита по сравнению с мастер коммитом / предыдущим коммитом - PullRequest
0 голосов
/ 02 февраля 2020

Как получить только новый текст, добавленный в git коммит (по сравнению с предыдущим коммитом или мастером). Например, допустим, у меня есть текстовый файл из предыдущего коммита со следующим содержанием:

file 1:
-----------
hello my first name is john

И файл отредактирован и передан в:

file 1:
-----------
hello my last name is doe

Я хочу быть в состоянии получить только слова сравнения - например, в этом примере получить last doe, в стандартный вывод или в текстовый файл.

Какой самый простой способ сделать это?

1 Ответ

0 голосов
/ 02 февраля 2020

Попросите git сравнить слова вместо строк с git diff HASH --word-diff:

$ git diff HEAD^ --word-diff
diff --git a/file.txt b/file.txt
index 244f97f..ad2517e 100644
--- a/file.txt
+++ b/file.txt
@@ -1 +1 @@
hello my [-first-]{+last+} name is [-john-]{+doe+}

Передать вывод в grep / sed / awk, чтобы извлечь фактические слова, окруженные {+ и +}. Я сделал это с grep -oP, где -P включает регулярные выражения perl и -o отображает только найденные части вместо полной строки:

$ git diff HEAD^ --word-diff |grep -oP '(?<=(\{\+)).+?(?=(\+\}))'
last
doe

Разбивка регулярных выражений:

  • (?<=(\{\+)) положительное предположение для {+, поэтому эти символы необходимы для соответствия, но не включены в него
  • .+? ленивый поиск всех символов. Без лени будет жадно включать все между самыми первыми и самыми последними скобками: last+} name is [-john-]{+doe
  • (?=(\+\})) позитивный прогноз для +}, аналогичный прогнозу

Примечание: вывод не будет правильно включать +} и любой следующий текст, если эти символы фактически являются частью ваших изменений.

...