2016-12-02 5 views
3

J'utilise la commande suivante pour identifier le nombre de lignes qui ont été modifiées entre 2 validations. le b26e..and le e1f5 ... sont COMMIT hashComment filtrer uniquement les lignes qui sont modifiées dans le format de contexte git

git difftool -y -x "diff -c" b26ea5c511970d0211186c3b1e119224465ad365 e2f5104a2dd1afdc27803ead58b74cfd18ae50be 

ci-dessous est la sortie du fichier

*** /tmp/n90Z9a_Testing.txt 2016-12-02 11:47:59.027168926 +0530 
--- /tmp/19ymab_Testing.txt 2016-12-02 11:47:59.027168926 +0530 
*************** 
*** 1,3 **** 
    initial commit 
    added new line 
! added for modification 
--- 1,5 ---- 
    initial commit 
    added new line 
! added for modification, this is modified.This is modified again 
! after modifiying for the second time, this line is added 
! This line added for complete deletion and then replace with another 

de ce que je dois filtrer seulement les lignes qui sont modifiées par rapport à le premier commettras, en mots simples, je dois filtrer seulement cette partie de la sortie ci-dessus

*** /tmp/n90Z9a_Testing.txt 2016-12-02 11:47:59.027168926 +0530 
--- /tmp/19ymab_Testing.txt 2016-12-02 11:47:59.027168926 +0530 
*************** 
*** 1,3 **** 
    initial commit 
    added new line 
! added for modification 

Comment puis-je filtrer, merci à l'avance

+0

Pourquoi utilisez-vous pas '' git diff seulement? – Berkay92

+1

@ Berkay92 alors la sortie 'unifiée' est donnée qui n'a que les additions et les suppressions. dans le format «unifié», nous ne pouvons pas identifier le nombre réel de lignes qui ont été modifiées. par ex: 28 ajouts et 27 suppressions montrés dans 'diff' il pourrait être le résultat de 1) 28 nouveaux ajouts et 27 suppressions 2) 27 modificatins et une nouvelle ligne et etc ... –

Répondre

5

essayer cela

git difftool -y -x "diff -c" <commitHash1> <commithash2> | awk '/\*\*\*/{flag=1}/---/{print;flag=0}flag' 

Pour voir d'autres exemples de la sélection des lignes entre deux modèles de marqueurs avec awk see this

+2

S'il vous plaît ne pas poster des réponses de code nu, aussi fournissez quelques commentaires sur ce que fait votre code. –

1

Si cela est à peu près selecting lines between two markers, vous pouvez utiliser sed:

sed -n -e "/^\*\*\*/,/^---/{ /^---/d; p; }" 

C'est:

git difftool -y -x "diff -c" <shaX> <shaY> | sed -n -e "/^\*\*\*/,/^---/{ /^---/d; p; }" 

qui imprimera tout entre '***' (inclus) et '---' (exclu)