Git: ¿enumera todos los archivos que están actualmente bajo control de origen?

122

¿Hay alguna manera de enumerar todos los archivos actualmente bajo control de fuente en git? (No solo los que han sido modificados).

Anónimo
fuente

Respuestas:

129

Si desea enumerar todos los archivos para una rama específica, por ejemplo master:

git ls-tree -r master --name-only

La -ropción le permitirá recurrir a subdirectorios e imprimir cada archivo actualmente bajo control de versiones. También puede especificar en HEADlugar de masterobtener la lista de cualquier otra rama en la que pueda estar.

Si desea obtener una lista de todos los archivos que alguna vez existieron, consulte aquí :

git log --pretty = formato: --name-only --diff-filter = A | ordenar -u
slhck
fuente
1
Gracias slhck, exactamente lo que estaba buscando, y útil para saber sobre el segundo también. Marcará como correcto en 5 minutos y medio cuando se me permita. :-)
Anónimo
3
Gracias por la respuesta. Yo estaba buscando esto. Tenga en cuenta que git ls-tree -r master --name-onlyharía lo mismo que la primera opción, sin necesidad de cut. Ah, y puede especificar en HEADlugar de mastersi solo desea esta lista para cualquier rama en la que se encuentre actualmente.
maurits
66
Ejecutar "git ls-files" te ahorrará algunos caracteres :)
Zain R
¿Por qué se cortó dado el final -? Hace que algunas líneas adicionales muestren algunos archivos en una segunda columna que se repiten desde la primera.
Adrian
@ Adrian No tengo idea, copiado en aquel entonces, arreglado ahora.
slhck
61

El git ls-filescomando hará lo que necesites.

Fuente: http://www.kernel.org/pub/software/scm/git/docs/git-ls-files.html

Mihai Capotă
fuente
44
git ls-filesen lugar de git ls-tree -r master --name-onlyes ciertamente más simple.
karatedog
1
Lo siento pero mi edición no fue inválida. En git actual no hay git-ls-filesbinario. Existe el gitbinario con el ls-filescomando. El enlace a la documentación es correcto en contenido, pero técnicamente para un binario desactualizado.
JonnyJD
@JonnyJD, probablemente marcado como no válido porque su edición debería ser un comentario.
Ascherer
1
Todo @JonnyJD Git-hombre páginas se nombran como git-commit, git-init, git-ls-files, etc a pesar de que los programas son en realidad Subcomandos. Nunca hubo un git-ls-filesbinario, lo más probable. El razonamiento es que es coherente con el mecanismo de subcomando externo, que le permite registrar un git foocomando escribiendo un git-foobinario.
Radon Rosborough
4

git ls-files solo imprimirá archivos en el directorio de trabajo actual.

Si, por ejemplo, tiene un repositorio git para dotfiles ( core.worktree = /), entonces tendrá archivos fuera de la raíz git y ese simple comando ya no funcionará.

En resumen, esto funcionará:

git --git-dir "`git rev-parse --git-dir`" \
    -C "`git config core.worktree || pwd`" \
    ls-files

Ejemplo:

mkdir ~/dotfiles
cd ~/dotfiles
git config core.worktree /

# Ignore all files by default, else Git will find all files under "/"
echo "*" > .git/info/exclude

# Add files at the git repo's root and somewhere in the work tree
touch README
git add -f README
git add -f /etc/ssh/sshd_config

# `git status` would now print:
# new file:   ../../../etc/ssh/sshd_config
# new file:   README
git status

git commit -m "Initial commit"

# At this point, `git ls-files` prints only:
# README
git ls-files

# But you can print all files inside the work tree. This will print:
# etc/ssh/sshd_config
# home/yourusername/dotfiles/README
git --git-dir "`git rev-parse --git-dir`" -C "`git config core.worktree || pwd`" ls-files

Si desea rutas especificadas en relación con su directorio actual (shell), esto hace el trabajo:

alias gls='git ls-tree -r master --name-only HEAD "`git config core.worktree`"'

y en el ejemplo anterior, imprimiría

README
../../../etc/ssh/sshd_config
AndiDog
fuente
En git v2.21, git ls-filesmuestra todo en el directorio actual y a continuación. Simplemente no muestra los archivos que se eliminaron en el repositorio.
Adrian
0

También puede usar el gitkvisor de repositorio interactivo.

JPaget
fuente
1
Esto menciona una herramienta, pero realmente no responde el "cómo". ¿Puedes ampliar esto en una solución procesable? Simplemente señalar a alguien en una dirección de investigación para que desarrolle su propia solución es más apropiado como comentario. Gracias. De la revisión
Fixer1234
-2

Captura de pantalla

Eche un vistazo a la imagen, en el lado derecho hay dos opciones de parche y Árbol. Si selecciona el árbol, puede ver la estructura de carpetas para cada confirmación.

Amarnath MB
fuente
Considere una mejor confirmación de la captura de pantalla para que no tenga que censurar tanto.
Thorbjørn Ravn Andersen