2009-04-03 11 views
105

Je voudrais voir une liste de fichiers modifiés depuis le dernier commit, comme le montre 'git status', mais je ne m'intéresse qu'aux fichiers situés dans un seul répertoire. Y a-t-il un moyen de faire cela? J'ai essayé 'git status < répertoire >', mais il semble que cela fasse quelque chose de complètement différent (liste tous les fichiers modifiés, comme ils le seraient si j'ai écrit 'git add < répertoire >' d'abord).git status - existe-t-il un moyen de montrer les changements seulement dans un répertoire spécifique?

La documentation pour git-status ne dit pas grand-chose, sauf qu'elle accepte les mêmes options que git-commit (mais git-commit n'a pas pour but de montrer les listes de fichiers modifiés ...) .

Répondre

144

De l'annuaire:

git status . 

Vous pouvez utiliser un chemin vraiment, utilisez cette syntaxe:

git status <directoryPath> 

Par exemple pour le répertoire avec le chemin "mon/froid/chemin/ici"

git status my/cool/path/here 
+2

Merci! En outre, 'git status ' semble faire ce que je m'attendais - honnêtement, je ne me souviens plus du problème que j'avais avec ... auparavant, c'est peut-être une version différente de git, non. –

+0

Pas de problème, et peut-être - les nouvelles versions de git semblent faciliter les choses. –

+1

Oui, le comportement a définitivement changé de 1,6 à 1,7. Il répond à l'exigence OP dans 1,7 mais 1,6 continue sur l'ensemble du repo. – colgur

13

Solution la plus simple:

  1. Aller dans le répertoire
  2. git status | grep -v '\.\.\/'

Bien sûr, ce couleurs défausse.

+0

Love it. Pas de fioritures. – redolent

26

La raison pour laquelle git status prend les mêmes options que git commit est que le but de git status est de montrer ce qui se passerait si vous avez commis les mêmes options que vous avez passé à git status. À cet égard git status est vraiment git commit --preview.

obtenir ce que vous voulez, vous pouvez le faire qui montre mis en scène des changements:

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

et ce qui montre les changements Unstaged:

git diff --stat -- <directory_of_interest> 

ou ce qui montre à la fois:

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

Ceci fonctionne partiellement, bien qu'il n'affiche pas les fichiers nouvellement créés (non-suivis), comme git-status le fait ... –

+0

OK, je n'étais pas sûr des rapports dont vous aviez besoin. Si vous devez rechercher des fichiers non statiques, essayez 'git ls-files --others ' ou 'ls-files -o'. –

+0

'git ls-files -o' montre récursivement les fichiers dans les répertoires non statiques, alors que' git status' montre uniquement le répertoire de premier niveau. Et il faudrait composer la sortie 'git diff',' git ls-files' et recréer tous les codes de couleur, etc., que 'git status' fournit si cela doit remplacer 'git status'. J'aimerais aussi vraiment voir une solution à cela! –

0

En notez, si vous simplifiez pour vérifier les stats git sans aller au répertoire 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 

Appelez ce script simple: gitstat /path/to/foo-project. Vous pouvez également l'utiliser en foo-project juste en faisant gitstat . et donc supposer plus court que git status -s, git diff --stat ou git diff --stat HEAD si vous utilisez toujours la console au lieu de gui.

Crédits: