La salida 'git log -<number> --pretty="format:%H"' NO agrega una nueva línea cuando se canaliza a 'cat -e'
Estoy creando un script de shell que muestra los ID de confirmación de las 5 últimas confirmaciones de git de mi repositorio de git.
Nombre del archivo de script: 'git_commit.sh' Por "ID de confirmación", me refiero a la cadena hexadecimal completa de 40 caracteres. Por repositorio git, me refiero a la rama actual.
El resultado que espero:
yossi@hostname$ bash git_commit.sh | cat -e
42dfd4bdba4646b28136c4b0d71f76ae352aac10$
63a7f8e9e7f5ab2f29c4227440d78fc731201b89$
57361b98c8cb9041759461093ed38b7b8930e12e$
a05251da02f6c677f38f3ab68c95b2dd8812a822$
d17402aa3e3835e1b9e444482cda233e97e032d6$
yossi@hostname$
El comando que se insertó en 'git_commit.sh':
git log -5 --pretty="format:%H"
Y aquí está el resultado que obtengo cuando ejecuto el script:
yossi@hostname$ bash git_commit.sh | cat -e
42dfd4bdba4646b28136c4b0d71f76ae352aac10$
63a7f8e9e7f5ab2f29c4227440d78fc731201b89$
57361b98c8cb9041759461093ed38b7b8930e12e$
a05251da02f6c677f38f3ab68c95b2dd8812a822$
d17402aa3e3835e1b9e444482cda233e97e032d6yossi@hostname$
PROBLEMA
- El quinto y último ID de confirmación no va seguido de un $ al final.
- No hay ningún salto de línea antes del siguiente símbolo del sistema.
Lo que significa que no hubo ninguna nueva línea después del quinto y último ID de confirmación cuando se canalizó al comando 'cat -e'.
Revisé detenidamente la página del manual de 'git log' y no pude encontrar nada que explique ese comportamiento.
ALTERNATIVAS QUE PROBÉ Probé el reemplazo de git log -5 --pretty="format:%H"
por los siguientes tres comandos:
git log -5 --format="%H" | cat -e
git log -5 --pretty="tformat:%H" | cat -e
git log -5 --pretty="%H" | cat -e
Cada uno de esos tres comandos alternativos insertados en 'git_commit.sh' proporciona el resultado esperado:
yossi@hostname$ bash git_commit.sh | cat -e
42dfd4bdba4646b28136c4b0d71f76ae352aac10$
63a7f8e9e7f5ab2f29c4227440d78fc731201b89$
57361b98c8cb9041759461093ed38b7b8930e12e$
a05251da02f6c677f38f3ab68c95b2dd8812a822$
d17402aa3e3835e1b9e444482cda233e97e032d6$
yossi@hostname$
¿ Alguien puede explicar la diferencia de comportamiento de git log -5 --pretty="format:%H"
?
La explicación está aquí:
•
tformat
:
Eltformat:
formato funciona exactamente igualformat:
, excepto que proporciona una semántica de "terminador" en lugar de una semántica de "separador". En otras palabras, a cada confirmación se le añade el carácter de terminación del mensaje (normalmente una nueva línea), en lugar de un separador colocado entre las entradas. Esto significa que la entrada final de un formato de una sola línea terminará correctamente con una nueva línea, tal como lo hace el formato "una línea". Por ejemplo:https://git-scm.com/docs/pretty-formats
Tenga en cuenta que ambos git log --format="%H"
y git log --pretty="%H"
son equivalentes a --pretty="tformat:%H"
:
--pretty[=<format>]
--format=<format>
Imprima de forma bonita el contenido de los registros de confirmación en un formato determinado, donde puede ser<format>
uno deoneline
,short
,medium
,full
,fuller
,reference
,raw
yformat:<string>
.tformat:<string>
Cuando<format>
no es ninguna de las anteriores, y la tiene%placeholder
en sí, se actúa como si--pretty=tformat:<format>
estuviera dada.https://git-scm.com/docs/git-log#Documentation/git-log.txt---prettyltformatgt