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.
pouvez-vous ajouter juste ';/^ M $/d' à votre script sed pour supprimer les lignes qui sont juste M. Bonne chance. – shellter
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