На git version 2.17.1
, нет встроенного флага для достижения этой цели.
Вот пример команды для фильтрации имени файла и номеров строк из унифицированного diff:
git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
Например, унифицированный diff:
$ git diff --unified=0
diff --cc foobar
index b436f31,df63c58..0000000
--- a/foobar
+++ b/foobar
@@@ -1,2 -1,2 +1,6 @@@ Line abov
++<<<<<<< HEAD
+bar
++=======
+ foo
++>>>>>>> Commit message
приведет к:
❯ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
foobar:1
Для сопоставления выходных данных команд в общих результатах сопоставления grep:
$ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? )| @@@.*' | sed -e '0~3{s/ @@@[ ]\?//}' | sed '2~3 s/$/\n1/g' | sed "N;N;N;s/\n/:/g"
foobar:1:1:Line abov
grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? )
: сопоставить имя файла с diff --cc <filename>
ИЛИ сопоставить номер строки с @@@ <from-file-range> <from-file-range> <to-file-range>
ИЛИ сопоставить оставшийся текст после @@@
. sed -e '0~3{s/ @@@[ ]\?//}'
:Удалите @@@[ ]\?
из каждой 3-й строки, чтобы получить дополнительный 1-строчный контекст перед ++<<<<<<< HEAD
. sed '2~3 s/$/\n1/g'
: добавьте \n1
каждые 3 строки между 2-й и 3-й строкой для номера столбца. sed "N;N;N;s/\n/:/g"
: соединяйте каждые 3 строки с :
.