J'essaye cette commande dans mon script shell bash:
git log --oneline --no-decorate --pretty=format:"%s" $oldrev..$newrev
git log --oneline --no-decorate --pretty=format:"%s" $oldrev..$newrev | while read -r line; do
echo "$line"
done
le premier journal git peut imprimer la sortie, mais le second suivi de while n'imprimera rien. Pourquoi ?
J'invoque mon script comme ceci: (deuxième et troisième arguments passés à $ oldrev et $ newrev)
./check master a735c2f eb23992
si j'ajoute l'option --no-pager, les deux n'imprimeront rien.
J'utilise bash 4.4.23 (1) -release sur fedora 28.
Au lieu de pretty=format
, vous devez utiliser pretty=tformat
:
'
tformat:
'Le
tformat:
format « » fonctionne exactement comme «format:
», sauf qu'il fournit une sémantique de «terminateur» au lieu d'une sémantique de «séparateur».En d'autres termes, chaque validation a le caractère de fin de message (généralement une nouvelle ligne) ajouté, plutôt qu'un séparateur placé entre les entrées.
Cela signifie que l'entrée finale d'un format sur une seule ligne se terminera correctement par une nouvelle ligne, tout comme le fait le format «en ligne». Par exemple:
$ git log -2 --pretty=format:%h 4da45bef \ | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/' 4da45be 7134973 -- NO NEWLINE $ git log -2 --pretty=tformat:%h 4da45bef \ | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/' 4da45be 7134973
En outre, toute chaîne non reconnue qui contient un
%
est interprétée comme si elle étaittformat:
devant elle.
Par exemple, ces deux sont équivalents:$ git log -2 --pretty=tformat:%h 4da45bef $ git log -2 --pretty=%h 4da45bef
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots