Sur git version 2.17.1
, il n'y a pas d'indicateur intégré pour atteindre cet objectif.
Voici un exemple de commande pour filtrer le nom de fichier et les numéros de ligne d'un diff unifié:
git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
Par exemple, le diff unifié:
$ 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
Aura pour résultat:
❯ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
foobar:1
Pour faire correspondre la sortie des commandes dans les résultats de correspondance grep courants:
$ 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]+)? )
: Faire correspondre le nom de fichier de diff --cc <filename>
OU Faire correspondre le numéro de ligne de @@@ <from-file-range> <from-file-range> <to-file-range>
OU Faire correspondre le texte restant après @@@
.
sed -e '0~3{s/ @@@[ ]\?//}'
: Supprimer @@@[ ]\?
de chaque 3ème ligne pour obtenir le contexte optionnel de 1 ligne avant ++<<<<<<< HEAD
.
sed '2~3 s/$/\n1/g'
: Ajoutez \n1
toutes les 3 lignes entre la 2e et la 3e ligne pour le numéro de colonne.
sed "N;N;N;s/\n/:/g"
: Joignez toutes les 3 lignes avec a :
.