web-dev-qa-db-fra.com

Quel est un moyen simple de détecter des fichiers modifiés dans un espace de travail GIT?

Pendant sa marque, je crée des champs de chaîne que j'ai intégrés dans la sortie liée. Très utile.

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

37
Jamie

Si vous voulez juste une plaine "Y a-t-il des différences de la tête?":

git diff-index --quiet HEAD

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

Si vous voulez "quels fichiers ont changé de tête?":

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é, supprimé, modifié)?":

git diff-index --name-status HEAD

Ajouter -M (et -C) Si vous voulez une détection de renommée (et copie).

Ces commandes vérifieront à la fois le contenu mis en scène (ce qui est dans l'index) et les fichiers de l'arbre de travail. Alternatives comme git ls-files -m Vérifiera uniquement l'arbre de travail contre l'indice (c'est-à-dire qu'ils ignoreront tout contenu mis en scène (mais non engagé) qui est également dans l'arbre de travail).

59
Chris Johnsen

git ls-files -m

Pour trouver cela, vous auriez pu parcourir git help -a.

git status --porcelain semble donner une belle production d'aptable.

22
MDCore

Pour les crochets Git, j'ai trouvé cette commande utile

git diff-index --exit-code --ignore-submodules HEAD

Par exemple

//run some static analysis check that can change the code
something_changed=`git diff-index --exit-code --ignore-submodules HEAD`
if [ -n "$something_changed" ]
then
    echo >&2 "Something changed in $local_ref, not pushing"
    exit 1
fi
3
Maragues

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

2
Yinon Ehrlich