Estado de Git: ¿hay alguna manera de mostrar los cambios solo en un directorio específico?

136

Me gustaría ver una lista de archivos modificados desde la última confirmación, como se git statusmuestra, pero solo me interesan los archivos ubicados en un solo directorio. ¿Hay alguna forma de hacer esto? Lo intenté git status <directory>, pero parece que esto hace algo completamente diferente (enumera todos los archivos modificados, como lo harían si escribiera git add <directory>primero).

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

Kuba Suder
fuente

Respuestas:

199

Desde dentro del directorio:

git status .

Puede usar cualquier ruta realmente, use esta sintaxis:

git status <directoryPath>

Por ejemplo, para el directorio con la ruta "my / cool / path / here"

git status my/cool/path/here
Sam Doidge
fuente
3
¡Gracias! Además, 'git status <directory>' parece estar haciendo lo que esperaría: honestamente, no recuerdo qué problema tuve con él antes ... tal vez se trata de una versión diferente de git, no sé.
Kuba Suder
No hay problema, y ​​posiblemente, las versiones más nuevas de git parecen facilitar las cosas.
Sam Doidge
3
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 durante todo el repositorio.
colgur 12/12/2013
31

La razón por la que git statustoma las mismas opciones git commites que el propósito git statuses mostrar lo que sucedería si se comprometiera con las mismas opciones a las que pasó git status. A este respecto git statuses realmente git commit --preview.

Para obtener lo que desea, puede hacer esto que muestra los cambios por etapas:

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

y esto, que muestra cambios no organizados:

git diff --stat -- <directory_of_interest>

o esto que muestra ambos:

git diff --stat HEAD -- <directory_of_interest>
CB Bailey
fuente
2
Esto funciona parcialmente, aunque no muestra archivos recién creados (sin seguimiento), como lo hace git-status ...
Kuba Suder
OK, no estaba seguro de qué informes necesitabas. Si necesita verificar si hay archivos sin clasificar, pruebe git ls-files --others <directory_in_question>o ls-files -o.
CB Bailey, el
git ls-files -omuestra los archivos en directorios sin clasificar de forma recursiva, mientras que git statussolo muestra el directorio de nivel superior. Y uno tendría que componer git diff, git ls-filesgenerar y recrear toda la codificación de colores, etc. que git statusproporciona si se va a reemplazar git status. ¡También me gustaría ver una solución a esto!
Peter V. Mørch
14

La solución más simple:

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

Por supuesto, esto descarta los colores.

Can Berk Güder
fuente
Si es necesario, puede agregar algunas modificaciones para recuperar el color. ejemplo 1 ejemplo 2
Carson
2

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

### crea un archivo
sudo nano / usr / local / bin / gitstat

### poner esto en

#! / usr / bin / env bash

dir = $ 1

si [[$ dir == ""]]; luego
    echo "¡Se requiere directorio!"
    salida
fi

echo "Estadísticas de Git para '$ dir'".

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

### dar perm ejecutiva
sudo chmod + x / usr / local / bin / gitstat

Y llamar a ese guión simple: gitstat /path/to/foo-project. También puede usarlo mientras foo-projectlo hace gitstat .y, por lo tanto, suponga que es más corto que git status -s, git diff --stato git diff --stat HEADsi siempre está usando la consola en lugar de la gui.

Créditos

K-Gun
fuente