Statut Git - existe-t-il un moyen d'afficher les modifications uniquement dans un répertoire spécifique?

136

Je voudrais voir une liste des fichiers modifiés depuis le dernier commit, comme le git statusmontre, mais je ne me soucie que des fichiers situés dans un seul répertoire. Y a-t-il un moyen de faire cela? J'ai essayé git status <directory>, 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'écrivais en git add <directory>premier).

La documentation de git-status ne dit pas grand-chose, mis à part le fait qu'elle accepte les mêmes options que git-commit (mais le but de git-commit n'est pas d'afficher des listes de fichiers modifiés).

Kuba Suder
la source

Réponses:

199

Depuis l'annuaire:

git status .

Vous pouvez vraiment utiliser n'importe quel chemin, utilisez cette syntaxe:

git status <directoryPath>

Par exemple pour le répertoire avec le chemin "my / cool / path / here"

git status my/cool/path/here
Sam Doidge
la source
3
Merci! De plus, 'git status <directory>' semble faire ce à quoi je m'attendais - honnêtement, je ne me souviens pas du problème que j'ai eu avec lui auparavant ... peut-être que c'est une question de version de git différente, je sais pas.
Kuba Suder
Pas de problème, et peut-être - les nouvelles versions de git semblent rendre les choses plus faciles.
Sam Doidge
3
Oui, le comportement a définitivement changé de 1,6 à 1,7. Il répond à l'exigence du PO en 1.7 mais 1.6 se poursuit sur l'ensemble du repo.
colgur
31

La raison pour laquelle cela git statusprend les mêmes options que git commitc'est que le but de git statusest de montrer ce qui se passerait si vous vous engagiez avec les mêmes options que celles auxquelles vous avez passé git status. À cet égard, git statusc'est vraiment git commit --preview.

Pour obtenir ce que vous voulez, vous pouvez faire ceci qui montre les changements par étapes:

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

et ceci, qui montre des changements non organisés:

git diff --stat -- <directory_of_interest>

ou ceci qui montre à la fois:

git diff --stat HEAD -- <directory_of_interest>
CB Bailey
la source
2
Cela fonctionne partiellement, bien qu'il ne montre pas les fichiers nouvellement créés (non suivis), comme le fait git-status ...
Kuba Suder
OK, je n'étais pas sûr de quels rapports vous aviez besoin. Si vous avez besoin de rechercher des fichiers non mis en scène, essayez git ls-files --others <directory_in_question>ou ls-files -o.
CB Bailey
git ls-files -oaffiche de manière récursive les fichiers dans les répertoires non stagés, tandis que git statusmontre uniquement le répertoire de niveau supérieur. Et il faudrait composer git diff, git ls-fileséditer et recréer tout le codage couleur, etc. que cela git statusfournit s'il doit remplacer git status. J'aimerais aussi vraiment voir une solution à cela!
Peter V.Mørch
14

Solution la plus simple:

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

Bien sûr, cela élimine les couleurs.

Can Berk Güder
la source
Si nécessaire, vous pouvez ajouter quelques modifications pour laisser la couleur revenir. exemple 1 exemple 2
Carson
2

En guise de note, si vous simplifiez la vérification des statistiques git sans aller dans le répertoire git;

### créer un fichier
sudo nano / usr / local / bin / gitstat

### mettre ceci dans

#! / usr / bin / env bash

dir = 1 $

if [[$ dir == ""]]; puis
    echo "Le répertoire est requis!"
    sortie
Fi

echo "Git stat pour '$ dir'."

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

### donne la perm exécutive
sudo chmod + x / usr / local / bin / gitstat

Et d' appeler ce script simple: gitstat /path/to/foo-project. Vous pouvez également l'utiliser tout en foo-projectfaisant simplement gitstat .et supposons donc plus court que git status -s, git diff --statou git diff --stat HEADsi vous utilisez toujours la console au lieu de l'interface graphique.

Crédits:

K-Gun
la source