Yo creo que si. Pero no parece correcto marcar esto como dup cuando tiene una mejor respuesta.
Lindhe
55
en un universo paralelo, es sorprendente cuán similar es esta pregunta que incluye todas las respuestas, pero cada una con su propio estilo distintivo.
Jeff Puckett
Respuestas:
628
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):
Use git ls-tree -r HEAD --name-only-only si desea enumerar los archivos de la rama actual
Ramast
3
¿Por qué los directorios no están en la lista?
Shuzheng
13
@NicolasLykkeIversen: gitno versiona directorios directamente. En su lugar, almacena archivos y sus rutas. ls-treegenerará 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.
Tuxdude
2
Solo tenga en cuenta ls-tree masterque no muestra los archivos rastreados en el área de ensayo.
nn0p
¿Es posible mostrar solo el directorio de nivel superior si incluye muchos subdirectorios y archivos?
Blaszard
192
Los archivos administrados por git se muestran por git ls-files. Echa un vistazo a su página de manual.
Parece que solo muestra archivos en o debajo del directorio actual.
Lyle Z
11
¿Te importa si edito esto para incluir las secciones relevantes de la página del manual?
Nathan Basanese
1
@NathanBasanese quizás pueda agregar otra respuesta con esa información.
José Castro
@LyleZ Quizás esto está destinado a estar en consonancia con ls... ols -R
flow2k
1
@LyleZ Además, este comportamiento es el mismo con git ls-tree- es relativo al pwd.
flow2k
18
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.
-rrecurre en subdirectorios. Combinado con --full-treeesto, 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.
HEADespecifica para qué rama desea la lista de archivos rastreados y comprometidos. Puede cambiar esto a mastercualquier otro nombre de sucursal, pero HEADes la confirmación que ha verificado en este momento.
El glralias 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.1Debian 10.
Respuestas:
Si desea enumerar todos los archivos que actualmente se rastrean en la rama
master
, puede usar este comando:Si desea una lista de archivos que alguna vez existieron (es decir, incluidos los archivos eliminados):
fuente
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 engit
. 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.fuente
ls
... ols -R
git ls-tree
- es relativo alpwd
.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
--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 amaster
cualquier otro nombre de sucursal, peroHEAD
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 .
fuente
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:
Es posible que desee agregarlo como un alias:
Si desea enumerar archivos de forma recursiva:
Y un alias:
fuente
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 congit version 2.20.1
Debian 10.