Usando la línea de comando git, ¿cómo puedo hacer que git muestre una lista de los archivos que se están rastreando en el repositorio?
Usando la línea de comando git, ¿cómo puedo hacer que git muestre una lista de los archivos que se están rastreando en el repositorio?
Respuestas:
Si desea enumerar todos los archivos que actualmente se rastrean en la rama master
, puede usar este comando:
git ls-tree -r master --name-only
Si desea una lista de archivos que alguna vez existieron (es decir, incluidos los archivos eliminados):
git log --pretty=format: --name-only --diff-filter=A | sort - | sed '/^$/d'
git
no versiona directorios directamente. En su lugar, almacena archivos y sus rutas. ls-tree
generará todos los archivos versionados. Para comprender mejor esta distinción, intente organizar un directorio vacío en git
. El directorio vacío nunca aparecerá en los cambios por etapas. La única forma de versionar un directorio tan vacío es en realidad versionar un archivo bajo el directorio. Para los casos de uso en los que necesita un directorio de marcador de posición vacío en el control de versiones, puede crear un archivo ficticio debajo del directorio y una versión de ese. Espero que la explicación sea clara.
ls-tree master
que no muestra los archivos rastreados en el área de ensayo.
Los archivos administrados por git se muestran por git ls-files
. Echa un vistazo a su página de manual.
ls
... ols -R
git ls-tree
- es relativo al pwd
.
La respuesta aceptada solo muestra archivos en el árbol del directorio actual. Para mostrar todos los archivos rastreados que se han confirmado (en la rama actual), use
git ls-tree --full-tree --name-only -r HEAD
--full-tree
hace que el comando se ejecute como si estuviera en el directorio raíz del repositorio.-r
recurre en subdirectorios. Combinado con --full-tree
esto, le proporciona todos los archivos rastreados y comprometidos.--name-only
elimina la información de permisos / SHA para cuando solo quieres las rutas de los archivos.HEAD
especifica para qué rama desea la lista de archivos rastreados y comprometidos. Puede cambiar esto a master
cualquier otro nombre de sucursal, pero HEAD
es la confirmación que ha verificado en este momento.Este es el método de la respuesta aceptada a la ~ pregunta duplicada https://stackoverflow.com/a/8533413/4880003 .
Es posible que desee una salida de color con esto.
Uso esta línea para enumerar los archivos y directorios rastreados en el directorio actual de la rama actual:
ls --group-directories-first --color=auto -d $(git ls-tree $(git branch | grep \* | cut -d " " -f2) --name-only)
Es posible que desee agregarlo como un alias:
alias gl='ls --group-directories-first --color=auto -d $(git ls-tree $(git branch | grep \* | cut -d " " -f2) --name-only)'
Si desea enumerar archivos de forma recursiva:
'ls' --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)
Y un alias:
alias glr="'ls' --color=auto -d \$(git ls-tree -rt \$(git branch | grep \\* | cut -d \" \" -f2) --name-only)"
glr
alias que ya ha proporcionado parecía un poco raro, así que hice una versión más compatible con el formato del primer alias que ya ha proporcionado: alias glr='ls --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)'
. Probado con git version 2.20.1
Debian 10.