2009-04-03 15 views
105

Me gustaría ver una lista de archivos modificados desde la última confirmación, como se muestra 'estado de git', pero solo me preocupan los archivos ubicados en un único directorio. ¿Hay alguna forma de hacer esto? Probé 'git status <directorio>', pero parece que esto hace algo completamente diferente (listas de todos los archivos modificados, como lo serían si escribía 'git add <directorio>' en primer lugar).estado de git: ¿hay alguna manera de mostrar los cambios solo en un directorio específico?

La documentación para git-status no dice mucho, aparte de que acepta las mismas opciones que git-commit (pero el propósito de git-commit no es mostrar listas de archivos modificados ...) .

Respuesta

144

Desde dentro del directorio:

git status . 

Se puede utilizar cualquier ruta realmente, utilice esta sintaxis:

git status <directoryPath> 

Por ejemplo para el directorio con la ruta "mi/frío/ruta/aquí"

git status my/cool/path/here 
+2

Gracias! Además, 'estado de git ' parece estar haciendo lo que esperaría, sinceramente, no recuerdo qué problema tuve con él antes ... tal vez sea una cuestión de una versión de git diferente, no sé. –

+0

No hay problema, y ​​posiblemente, las versiones más nuevas de git parecen facilitar las cosas. –

+1

Sí, el comportamiento definitivamente cambió de 1.6 a 1.7. Cumple con el requisito de OP en 1.7 pero 1.6 continúa en todo el repositorio. – colgur

13

solución más simple:

  1. vaya al directorio
  2. git status | grep -v '\.\.\/'

Por supuesto, esto descarta colores.

+0

encanta. Sin lujos. – redolent

26

La razón de que git status tiene las mismas opciones que git commit es que el propósito de git status es mostrar lo que sucedería si usted comprometido con las mismas opciones que usted pasó a git status. En este sentido, git status es realmente git commit --preview.

para conseguir lo que desea, usted puede hacer esto, que muestra realizaron cambios:

git diff --stat --cached -- <directory_of_interest> 

y esto, que muestra los cambios unstaged:

git diff --stat -- <directory_of_interest> 

o presente, que muestra tanto:

git diff --stat HEAD -- <directory_of_interest> 
+1

Esto funciona parcialmente, aunque no muestra los archivos recién creados (sin seguimiento), como git-status does ... –

+0

OK, no estaba seguro de qué informes necesitaba. Si necesita verificar si no hay archivos, intente con 'git ls-files --others ' o 'ls-files -o'. –

+0

'git ls-files -o' muestra los archivos en directorios no escaneados recursivamente, mientras que' git status' muestra solo el directorio de nivel superior. Y uno tendría que componer la salida 'git diff',' git ls-files' y volver a crear todos los códigos de colores, etc. que 'git status' proporciona si es un reemplazo para' git status'. ¡También me gustaría ver una solución para esto! –

0

Como nota, si simplificas para verificar las estadísticas de git sin ir al directorio de git;

 
### create file 
sudo nano /usr/local/bin/gitstat 

### put this in 

#!/usr/bin/env bash 

dir=$1 

if [[ $dir == "" ]]; then 
    echo "Directory is required!" 
    exit 
fi 

echo "Git stat for '$dir'." 

git --git-dir=$dir/.git --work-tree=$dir diff --stat 

### give exec perm 
sudo chmod +x /usr/local/bin/gitstat 

y llamar a ese guión simple: gitstat /path/to/foo-project. También puede utilizarlo mientras que en foo-project simplemente haciendo gitstat . y así suponer más corto que git status -s, git diff --stat o si su git diff --stat HEAD siempre esté usando la consola en lugar de la interfaz gráfica de usuario.

Créditos:

Cuestiones relacionadas