ver revisar registro que modificados mis listado hace filtrar eliminar commits cambios archivos archivo git git-status

revisar - ¿Cómo puedo restringir el estado de git a los archivos normales en el directorio actual solamente?



ver cambios en un archivo git (4)

Me gustaría ver el estado del directorio actual. Debido a que hay muchos cambios en los subdirectorios, que no quiero ver, el siguiente comando no funciona:

git status .

¿Hay alguna forma de obtener este tipo de informe, a no ser que se repita la salida del git status de git status ?


Usar git-status -- <pathspec>...

La sinopsis de la página del manual de git-status te dice que puedes filtrar por rutas:

git status [<options>...] [--] [<pathspec>...]

Por lo tanto, todo lo que tiene que hacer es obtener una lista de rutas correspondientes a los archivos normales (no de directorio) en el directorio actual, y pasarlo a git-status .

Hay un gotcha: dado que git status informa sobre todo el repositorio si se pasa un argumento <pathspec>... vacío, debe verificar si la lista está vacía o no.

Script de shell

Aquí hay un pequeño script de shell que hace lo que quieres.

#!/bin/sh # git-status-dot # # Show the status of non-directory files (if any) in the working directory # # To make a Git alias called ''status-dot'' out of this script, # put the latter on your search path, make it executable, and run # # git config --global alias.status-dot ''! git-status-dot'' # Because GIt aliases are run from the top-level directory of the repo, # we need to change directory back to $GIT_PREFIX. [ "$GIT_PREFIX" != "" ] && cd "$GIT_PREFIX" # List Non-Directory Files in the Current Directory lsnondirdot=$(ls -ap | grep -v /) # If "lsnondirdot" is not empty, pass its value to "git status". if [ -n "$lsnondirdot" ] then git status -- $lsnondirdot else printf "No non-directory files in the working directory/n" fi exit $?

Para obtener más detalles sobre por qué se requieren los chanchullos GIT_PREFIX , vea que los alias de git operan en el directorio incorrecto .

El script está disponible en Jubobs/git-aliases en GitHub.

Haz un alias de Git con él.

Para su comodidad, puede crear un alias de Git que llame al script; aunque asegúrate de que el script esté en tu camino.

git config --global alias.statusdot ''!sh git-status-dot.sh''

Ejemplo de juguete

Aquí hay un ejemplo de juguete que muestra cómo usar el alias resultante y lo que hace.

# initialize a repo $ mkdir testgit $ cd testgit $ git init # create two files $ mkdir foo $ touch foo/foo.txt $ touch bar.txt # good old git status reports that subdir/test1.txt is untracked... $ git status On branch master Initial commit Untracked files: (use "git add <file>..." to include in what will be committed) bar.txt foo/ nothing added to commit but untracked files present (use "git add" to track) # ... whereas our new alias, git status-dot, only cares # about regular files in the current directory $ git status-dot On branch master Initial commit Untracked files: (use "git add <file>..." to include in what will be committed) bar.txt nothing added to commit but untracked files present (use "git add" to track) # and if we delete README.md ... $ rm README.md # ... good old git status still bother us about /subdir ... $ git status Initial commit Untracked files: (use "git add <file>..." to include in what will be committed) foo/ nothing added to commit but untracked files present (use "git add" to track) # ... whereas git statusdot doesn''t $ git status-dot No non-directory files in the working directory $


Creo que la respuesta es no...

A menos que los archivos sean archivos sin seguimiento, submódulos o archivos ignorados. La documentación completa para el comando de estado no menciona nada acerca de limitar la salida al directorio actual.

Sin embargo, es posible que desee considerar el uso del comando stash para limpiar su árbol de trabajo. Si guarda todo lo que no está en su directorio actual (lo que requiere la opción --patch para solo ocultar partes selectivas), entonces el status solo mostrará lo que no ocultó. Sin embargo, si usa el stash varias veces mientras trabaja, entonces siempre debe tener un árbol de trabajo limpio y, para empezar, podría evitar este problema. Cada cuerpo de trabajo se empaquetará en un escondite por separado hasta que esté listo para cometerlo.

Por supuesto, eso no ayuda mucho con su situación actual (aparte de usar ( stash --patch ). Otra alternativa que podría querer probar es el modo interactivo del comando add . Luego puede revisar todos los archivos modificados y agregue selectivamente los que desee ( stash --patch funciona de la misma manera).

O bien, puede utilizar las soluciones grep sugeridas en otras respuestas.


Puedes usar:

git status | grep -v /

para filtrar las rutas que contienen una barra ( / ) lo que significa que están en subdirectorios.

También perderá el color rojo / verde de las rutas cambiadas.

Actualizar:

Esta solución no muestra los archivos que se mueven desde o hacia el directorio actual porque el origen y el destino de una operación de movimiento se muestran en la misma línea en la salida. Sin embargo, los archivos que fueron renombrados en el directorio actual (sin ser movidos entre directorios) se muestran.


Tal vez haya una forma más adecuada de hacer esto, pero simplemente puede

find . -maxdepth 1 -type f -print0 | xargs -0 git status

Por supuesto, esto falla si no hay archivos regulares en el directorio actual. En ese caso, puedes usar la versión extra fea.

find . -maxdepth 1 -type f -print0 | xargs -0 git status nonexistentfile

Y, no, no voy a abordar el caso en el que tiene un archivo con el nombre de archivo nonexistentfile .