no, "estado git". da carpetas de hermanos como, por ejemplo, "../sibling"
EoghanM
¿Le importaría dar un poco más de contexto sobre por qué desea filtrar los cambios en otras partes de su árbol? ¿En qué situaciones le gustaría utilizar esta función?
Greg Bacon
1
Si hay más de una pantalla completa de salida del comando normal "git status"
mostrará el estado del directorio y subdirectorios actuales.
Por ejemplo, archivos dados (números) en este árbol:
a/1
a/2
b/3
b/4
b/c/5
b/c/6
del subdirectorio "b", git statusmuestra nuevos archivos en todo el árbol:
% git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: ../a/1
# new file: ../a/2
# new file: 3
# new file: 4
# new file: c/5
# new file: c/6
#
pero git status .solo muestra archivos en "b" e inferiores.
% git status .
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: 3
# new file: 4
# new file: c/5
# new file: c/6
#
Solo este subdirectorio, no debajo
git status .muestra todos los archivos debajo de "b" de forma recursiva. Para mostrar solo los archivos en la "b", pero no debajo, debe pasar una lista de solo los archivos (y no los directorios) a git status. Esto es un poco complicado, dependiendo de tu caparazón.
Zsh
En zsh puede seleccionar archivos ordinarios con el "calificador glob" (.). Por ejemplo:
% git status *(.)
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: 3
new file: 4
Intento
Bash no tiene calificadores glob, pero puede usar GNU findpara seleccionar archivos ordinarios y luego pasarlos git statusasí:
bash-3.2$ find . -type f -maxdepth 1 -exec git status {} +
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: 3
new file: 4
Esto usa -maxdepthque es una extensión de búsqueda de GNU . POSIX find no tiene -maxdepth, pero puede hacer esto:
bash-3.2$ find . -path '*/*' -prune -type f -exec git status {} +
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: 3
new file: 4
Lo siento, tardé tanto en volver a esta respuesta: ¡simple y correcta! Me pregunto si <pathspec> se agregó al estado de git después de mi pregunta.
EoghanM
¿Qué sucede si solo está interesado en la carpeta actual a la que se .refiere, pero no en sus subcarpetas? ¿Alguna solución para eso? ¡Gracias!
benjaminz
@benjaminz depende de su uso; para cosas como esa, utilizo el globbing de shell para seleccionar archivos pero no subdirectorios, por ejemplo (para zsh) git status *(.). Bash no tiene una forma abreviada de agrupar solo archivos, pero podría usar un findejemplo extendido find . -type f -maxdepth 1 -exec git status {} +. Parece el tipo de cosas que le gustaría poner en un alias o script en lugar de escribir todo el tiempo.
Matt Curtis
3
Algunos comandos de plomería toman un directorio como parámetro:
git ls-files -t -o -m aDirectory
le daría todos los archivos modificados pero no actualizados (no agregados al escenario), o sin seguimiento. Y eso para un directorio.
Como está escrito en este hilo , git ls-files no admite la --addedopción ' .
La razón más fundamental es que la ls-filesplomería se trata del índice .
Agregado no se trata de una comparación entre el índice y el árbol de trabajo.
Está entre la confirmación HEAD y el índice, y no pertenece a la plomería de archivos ls.
¡Esto funciona muy bien! ¡Exactamente lo que estaba buscando!
poindexter
1
Cuando probé git, no encontré la manera de hacerlo.
Terminé haciendo:
x@x:~/x$ git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# b
# main/a
nothing added to commit but untracked files present (use "git add" to track)
x@x:~/x$ git status | grep main
# main/a
Este es el método que estaba usando ... lo siguiente también obtiene los encabezados de estado: git status | grep "main \ |: \ $" ... desafortunadamente, pierde el color.
EoghanM
Encontré esta pregunta buscando una coincidencia global genérica. Este es, con mucho, el más fácil y funciona para mí, por ejemplo, git status | grep extdonde ext es la extensión. ¡Gracias!
Respuestas:
mostrará el estado del directorio y subdirectorios actuales.
Por ejemplo, archivos dados (números) en este árbol:
del subdirectorio "b",
git status
muestra nuevos archivos en todo el árbol:pero
git status .
solo muestra archivos en "b" e inferiores.Solo este subdirectorio, no debajo
git status .
muestra todos los archivos debajo de "b" de forma recursiva. Para mostrar solo los archivos en la "b", pero no debajo, debe pasar una lista de solo los archivos (y no los directorios) agit status
. Esto es un poco complicado, dependiendo de tu caparazón.Zsh
En zsh puede seleccionar archivos ordinarios con el "calificador glob"
(.)
. Por ejemplo:Intento
Bash no tiene calificadores glob, pero puede usar GNU
find
para seleccionar archivos ordinarios y luego pasarlosgit status
así:Esto usa
-maxdepth
que es una extensión de búsqueda de GNU . POSIX find no tiene-maxdepth
, pero puede hacer esto:fuente
.
refiere, pero no en sus subcarpetas? ¿Alguna solución para eso? ¡Gracias!git status *(.)
. Bash no tiene una forma abreviada de agrupar solo archivos, pero podría usar unfind
ejemplo extendidofind . -type f -maxdepth 1 -exec git status {} +
. Parece el tipo de cosas que le gustaría poner en un alias o script en lugar de escribir todo el tiempo.Algunos comandos de plomería toman un directorio como parámetro:
le daría todos los archivos modificados pero no actualizados (no agregados al escenario), o sin seguimiento. Y eso para un directorio.
Como está escrito en este hilo , git ls-files no admite la
--added
opción ' .Entonces, usando los comandos mencionados aquí :
le daría archivos agregados y no agregados
le daría solo archivos no agregados. (mientras detecta reescrituras, renombramientos, copias, ...)
Como es habitual con los comandos de plomería, algunas secuencias de comandos están en orden;)
fuente
Imperfecto, pero esto también funciona desde el directorio que le interesa:
Eso ocultará todos los directorios que requerirían una referencia ascendente en su ruta relativa.
Si desea que el color salga por el otro extremo, establezca
color.status
enalways
:fuente
Es posible restringir
git status
al directorio actual (sin carpetas secundarias) dando una especificación de ruta usando la palabra mágicaglob
y*:
:git status ':(glob)*'
fuente
Cuando probé git, no encontré la manera de hacerlo.
Terminé haciendo:
fuente
git status | grep ext
donde ext es la extensión. ¡Gracias!cd YOUR_REQUIRED_DIRECTORY, luego,
git status.
fuente