2012-01-05 2 views
2

Je suis en train d'exporter une liste des fichiers modifiés de deux commits avec git, avec cette commande:git diff --name de Split-état en ligne pause

read -ra ADDR <<< `git diff --name-only HEAD..HEAD~1 | sed -e "s/ /\\\ /g"` 
for i in "${ADDR[@]}"; do 
    echo "$i" 
done 

Cela fonctionne très bien. Je reçois une belle liste imprimée sur le terminal avec chaque fichier sur une nouvelle ligne.

file1.txt 
file2.txt 
file3.txt 

Cependant, je veux utiliser --name-status au lieu de --name-only. La raison en est que je peux faire plus tard des choses différentes en fonction du type de changement effectué (par exemple M ou D).

Cela ne fonctionne pas cependant. Je reçois une liste dans le format suivant:

M 
file1.txt 
M 
file2.txt 
M 
file3.txt 

J'ai essayé de changer la variable IFS à $'\n' (retourne tout sur une ligne), $'\t' (retourne première ligne, par exemple M file1.txt) et ' ' (comme \t) sans succès.

+0

pouvez-vous ajouter juste ';/^ M $/d' à votre script sed pour supprimer les lignes qui sont juste M. Bonne chance. – shellter

+0

Quand je lance 'git diff --name-status .. ' J'obtiens une liste de noms de fichiers, avec le statut dans la première colonne. Je ne suis pas sûr de ce que votre commande 'sed' vous offre. Mon bash n'est pas le meilleur, donc je ne peux pas donner un exemple, mais je pense que vous pouvez obtenir ce que vous voulez avec 'awk', ce qui vous permettra de saisir les champs par position, et de les sortir. http://www.thegeekstuff.com/2010/01/awk-introduction-tutorial-7-awk-print-examples/ – lhagemann

Répondre

1
while read STATUS ADDR 
do 
    echo "$ADDR ($STATUS)" 
done < <(git diff --name-status HEAD..HEAD~1) 

E.g. pour la sortie git comme

M  INSTALL 
M  debian/changelog 
M  src/lib/libnvpair/SConscript 
M  src/lib/libzfscommon/SConscript 
M  src/lib/libzpool/SConscript 
M  src/zfs-fuse/main.c 

ce qui suit est imprimée par la boucle while:

INSTALL (M) 
debian/changelog (M) 
src/lib/libnvpair/SConscript (M) 
src/lib/libzfscommon/SConscript (M) 
src/lib/libzpool/SConscript (M) 
src/zfs-fuse/main.c (M) 
+0

soupir. Il m'a fallu quelques modifications ninja pour bien faire les choses. Fait maintenant :) – sehe

+0

Fonctionne comme un charme, merci! – Magnus