repositories - list git origin
cómo `git ls-files` para un solo nivel de directorio. (5)
Creo que git ls-tree --name-only [branch]
hará lo que estás buscando.
Estoy usando msysgit (1.7.9), y estoy buscando la invocación correcta del git ls-files
para mostrar solo los archivos y directorios (rastreados) en el nivel actual, ya sea desde el índice o desde el actual Directorio de trabajo si eso es más fácil.
Esencialmente daría un listado de directorios similar al que vería en Github. Viniendo de Windows, no estoy muy familiarizado con la forma correcta de hacer el globo (?).
Creo que quieres probar el git ls-tree HEAD
. La segunda palabra de la salida de ls-tree será tree
para directorios, blob
para archivos, commit
para submodulesm, el nombre del archivo es todo después de la pestaña ascii
Me sorprende que esto sea tan difícil ... pero no empiece a hablar de git.
Una variante de la respuesta de jthill parece ser aliasable (hey, soy lingüista, tengo una licencia para hacer nuevas palabras). La variante es
ls -d `git ls-tree HEAD | sed -e "s/^.*/t//"`
Esto usa ''ls'' para formatear la salida, por lo que obtienes un código de color (si lo usas), etc. También funciona como un alias:
alias gitls=''ls -d `git ls-tree HEAD | sed -e "s/^.*/t//"`''
FWIW, también puede asignar un alias al comando recursivo, de modo que utilizó el formato ''ls'' (por ejemplo, si su ruta + nombres de archivo no son demasiado largos, obtendrá una salida de dos columnas, codificación por colores de los ejecutables, etc.)
alias gitls-r=''ls `git ls-files`''
Para simplemente listar los archivos en el directorio de trabajo actual que son rastreados por git, encontré que lo siguiente es varias veces más rápido que usar git ls-tree...
:
ls | grep -f <(git ls-files)
Tomaría un poco de lío con sed si también quisiera incluir directorios, algo así como:
ls | grep -f <(git ls-files | sed ''s///.*//g'' | sort | uniq)
asumiendo que no tiene ningún carácter ''/'' en los nombres de sus archivos. Tanto como...
ls -a | grep -f <(git ls-files | sed ''s///.*//g'' | sort | uniq)
para listar también archivos "invisibles" (aún rastreados).
git ls-tree <tree-ish>
es bueno y todo, pero no puedo averiguar cómo especificar el índice como <tree-ish>
. (Aunque estoy seguro de que seguramente habrá alguna referencia de mayúsculas para hacer eso).
De todos modos, ls-files
funcionan de manera implícita en el índice, así que podría usar eso:
$ git ls-files | cut -d/ -f1 | uniq
Esto muestra archivos y directorios solo en el directorio actual.
Cambie el argumento de cut
de s para controlar la profundidad. Por ejemplo, -f-2
(que es el guión dos) muestra archivos y directorios con hasta dos niveles de profundidad:
$ git ls-files | cut -d/ -f-2 | uniq
SI especifica el argumento <path>
para ls-files
, asegúrese de aumentar -f
para acomodar los directorios principales:
$ git ls-files foo/bar | cut -d/ -f-3 | uniq