¿Cómo enumerar cada archivo para cada revisión en Git (como el manifiesto hg de Mercurial --todos)?

10

Mercurial tiene un comando para enumerar todos los archivos que tiene el repositorio para cada revisión:

hg manifest --all

¿Hay un comando equivalente en Git?

IT2
fuente
Algo como git log --stat?
jmreicha
44
git ls-files?
NN
Solo por curiosidad, ¿por qué razón necesitas esto?
Stephen Jennings
@StephenJennings: es una mejor manera de saber qué tipo de archivos tiene uno bajo control de versiones que haciendo mentalmente " ls -Rmenos .gitignore". La utilidad en general: uno puede saber más o menos lo que está sucediendo, pero la introspección del repositorio le da a uno la confianza de que uno sabe. Especialmente para los usuarios principiantes, tal confianza hace una gran diferencia en lo agradable que es usar el programa. Git no hace que tranquilizar a sus usuarios sea una prioridad, por lo que es comprensible que tanta gente lo odie hasta que lo aprenda.
Esteis

Respuestas:

3

Soy absolutamente terrible en los scripts de shell, por lo que esto es ciertamente subóptimo, pero este tipo de cosas podría hacerlo por usted, suponiendo que esté usando bash. Esperemos que alguien más pueda venir y limpiarlo, o reemplazarlo con algo mejor. Solo lo he probado en mi Mac, así que ten cuidado.

Debería imprimir todos los archivos en commits que son ancestros del HEAD actual. Guárdelo en un archivo llamado manifest.shen algún lugar de su ruta:

#!/bin/bash

TFILE=$(mktemp -t git-manifest)

for sha in $(git log --pretty=format:%H)
do
    git ls-tree --name-only --full-tree -r $sha >> $TFILE
done

sort -u $TFILE
rm $TFILE
Stephen Jennings
fuente
1
No es necesario, exportya que no necesita estar disponible en los procesos secundarios. Si el bucle está sobre los hash SHA, el bucle funciona bien, de lo contrario readsería mejor usar algo y citar la variable. sorttiene una -uopción que hace lo que uniqhace. El archivo no obtendrá rmd cuando cancele a mitad de camino, necesitaría un trappara eso, pero eso probablemente sería excesivo para este script.
Daniel Beck
@DanielBeck: Gracias, lo actualicé un poco. mktempno existe en Git Bash, debería encontrar una manera de lidiar con eso para que Windows también pueda jugar.
Stephen Jennings,