Cuando hago git status en una subcarpeta de mi repositorio, también incluye el estado de las carpetas principales.
¿Hay alguna forma de restringir git-status a solo una carpeta en particular?
Cuando hago git status en una subcarpeta de mi repositorio, también incluye el estado de las carpetas principales.
¿Hay alguna forma de restringir git-status a solo una carpeta en particular?
Respuestas:
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
#
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.
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
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
.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 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.
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.
Entonces, usando los comandos mencionados aquí :
git diff-index --name-only -B -R -M -C HEAD src
le daría archivos agregados y no agregados
git diff-files --name-only -B -R -M -C src
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;)
Imperfecto, pero esto también funciona desde el directorio que le interesa:
git status | grep -v ' \.\./'
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.statusen always:
git config color.status always
Es posible restringir git statusal directorio actual (sin carpetas secundarias) dando una especificación de ruta usando la palabra mágica globy *::
git status ':(glob)*'
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
cd YOUR_REQUIRED_DIRECTORY, luego,
git status.