2010-10-07 5 views
22

Pendant make, je crée des champs de chaîne que j'ai intégrés dans la sortie liée. Très utile.Qu'est-ce qu'un moyen facile de détecter les fichiers modifiés dans un espace de travail Git?

Autre qu'une analyse complexe sed/grep de la commande git status, comment puis-je déterminer facilement si les fichiers dans l'espace de travail ont été modifiés selon git?

+0

Si vous souciez seulement savoir si quelque chose a changé (pas ceux qui ont changé) voir [Comment puis-je déterminer par programme s'il y a des changements UNCOMMITED ?] (http://stackoverflow.com/q/3878624/193688) –

Répondre

24

git ls-files -m

Pour trouver ce que vous pourriez naviguerez à travers git help -a.

+0

C'est parfait. – Jamie

+8

@Jamie: Les fichiers avec des changements par étapes (mais non validés) n'apparaîtront pas avec 'git ls-files -m', ce qui peut être ou ne pas être ce que vous voulez. –

+1

Ah. Merci pour votre contribution. En vérité, 'git ls-files -m' n'est pas ce que je veux, mais il répond à ma question spécifique. +1 pour le commentaire et la réponse si. – Jamie

17

git status --porcelain semble donner une belle sortie analysable.

+0

Très bien. Sera utile pour d'autres raisons. – Jamie

+0

C'est génial, je l'ai juste utilisé pour automatiser les résumés de commit git (comme vous obtenez de l'interface web de GitHub) que je suis venu à cette question à la recherche: [one-liner à ajouter, valider et pousser] (https: // github. com/lmmx/devnotes/wiki/Résumé automatisé-git-status). –

26

Si vous voulez juste une plaine « Existe-t-il des différences de HEAD? »:

git diff-index --quiet HEAD 

Si le code de sortie est 0, alors il n'y avait pas de différence.

Si vous voulez « Quels fichiers ont changé de HEAD? »:

git diff-index --name-only HEAD 

Si vous voulez « Quels fichiers ont changé de tête, et de quelle manière ont-ils changé (ajoutés, supprimés, modifiés)? « :

git diff-index --name-status HEAD 

Ajouter -M (et -C) si vous souhaitez renommer la détection (et copier).

Ces commandes vérifient à la fois le contenu mis en scène (contenu de l'index) et les fichiers de l'arborescence de travail. Des alternatives telles que git ls-files -m ne vérifient l'arbre de travail que par rapport à l'index (c'est-à-dire qu'ils ne tiennent pas compte du contenu étagé (mais non validé) qui se trouve également dans l'arborescence de travail).

2

git diff --name-only fait la même chose (peut-être plus intuitive ...)

Questions connexes