En raison de la bureaucratie, je dois obtenir une liste de tous les fichiers modifiés dans mon référentiel pour un rapport (j'ai commencé avec le code source existant).
Que dois-je courir pour obtenir cette liste?
En raison de la bureaucratie, je dois obtenir une liste de tous les fichiers modifiés dans mon référentiel pour un rapport (j'ai commencé avec le code source existant).
Que dois-je courir pour obtenir cette liste?
Réponses:
Pour les fichiers modifiés entre un SHA donné et votre commit actuel:
git diff --name-only <starting SHA> HEAD
ou si vous souhaitez inclure des fichiers modifiés mais pas encore validés:
git diff --name-only <starting SHA>
Plus généralement, la syntaxe suivante vous indiquera toujours quels fichiers ont été modifiés entre deux commits (spécifiés par leur SHA ou d'autres noms):
git diff --name-only <commit1> <commit2>
git diff --name-only <SHA> <SHA>^
--name-statusindicateur au lieu de --name-onlyest pratique pour obtenir une liste de fichiers et voir leur statut de modification, comme Ajouté ou Modifié.
--name-statusmontrent ce qui leur est arrivé
Pour trouver les noms de tous les fichiers modifiés depuis votre dernier commit:
git diff --name-only
Ou (pour un peu plus d'informations, y compris les fichiers non suivis):
git status
Pour répertorier tous les Unstaged chenillés fichiers modifiés:
git diff --name-only
Pour répertorier tous les fichiers modifiés suivis par étapes :
git diff --name-only --staged
Pour répertorier tous les fichiers modifiés suivis par étapes et non par étapes :
{ git diff --name-only ; git diff --name-only --staged ; } | sort | uniq
Pour lister tous les fichiers non suivis (ceux répertoriés par git status, donc sans inclure les fichiers ignorés):
git ls-files --other --exclude-standard
Si vous l'utilisez dans un script shell et que vous souhaitez vérifier par programme si ces commandes ont renvoyé quelque chose, vous serez intéressé par git diffl' --exit-codeoption de.
Lorsque j'ai ajouté / modifié / supprimé de nombreux fichiers (depuis le dernier commit), j'aime regarder ces modifications dans l'ordre chronologique.
Pour cela j'utilise:
Pour répertorier tous les fichiers non intermédiaires:
git ls-files --other --modified --exclude-standard
Pour obtenir la dernière date de modification de chaque fichier:
while read filename; do echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename; done
Bien que Ruvim suggère dans les commentaires :
xargs -0 stat -c '%y %n' --
Pour les trier du plus ancien au plus récent:
sort
Un alias facilite son utilisation:
alias gstlast='git ls-files --other --modified --exclude-standard|while read filename; do echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename; done|sort'
Ou (plus court et plus efficace, grâce à ruvim )
alias gstlast='git ls-files --other --modified --exclude-standard|xargs -0 stat -c '%y %n' --|sort'
Par exemple:
username@hostname:~> gstlast
2015-01-20 11:40:05.000000000 +0000 .cpl/params/libelf
2015-01-21 09:02:58.435823000 +0000 .cpl/params/glib
2015-01-21 09:07:32.744336000 +0000 .cpl/params/libsecret
2015-01-21 09:10:01.294778000 +0000 .cpl/_deps
2015-01-21 09:17:42.846372000 +0000 .cpl/params/npth
2015-01-21 12:12:19.002718000 +0000 sbin/git-rcd
Je peux maintenant revoir mes modifications, des plus anciennes aux plus récentes.
xargsseul appel stat? Le one-liner complet:git ls-files -z --other --modified --exclude-standard | xargs -0 stat -c '%y %n' -- | sort
J'ai besoin d'une liste de fichiers qui avaient changé de contenu entre deux commits (seulement ajoutés ou modifiés), j'ai donc utilisé:
git diff --name-only --diff-filter=AM <commit hash #1> <commit hash #2>
Les différentes options de filtre de diff de la documentation de git diff :
diff-filter = [(A | C | D | M | R | T | U | X | B)… [*]]
Sélectionnez uniquement les fichiers qui sont ajoutés (A), copiés (C), supprimés (D), modifiés (M), renommés (R), dont le type (c'est-à-dire fichier normal, lien symbolique, sous-module,…) a changé (T), sont non fusionnés (U), sont inconnus (X) ou ont eu leur appariement cassé (B). Toute combinaison de caractères de filtre (y compris aucun) peut être utilisée. Lorsque * (tout ou rien) est ajouté à la combinaison, tous les chemins sont sélectionnés s'il y a un fichier qui correspond à d'autres critères dans la comparaison; s'il n'y a aucun fichier correspondant à d'autres critères, rien n'est sélectionné.
En outre, ces lettres majuscules peuvent être réduites pour exclure. Par exemple, --diff-filter = ad exclut les chemins ajoutés et supprimés.
Si vous souhaitez également afficher l'état (par exemple, A / M), passez --name-onlyà --name-status.
La liste des modifications non mises en scène peut être obtenue en utilisant git statuset la grepcommande comme ci-dessous. Quelque chose comme git status -s | grep M:
root@user-ubuntu:~/project-repo-directory# git status -s | grep '^ M'
M src/.../file1.js
M src/.../file2.js
M src/.../file3.js
....
Avec git showvous pouvez obtenir un résultat similaire. Pour regarder le commit (tel qu'il apparaît sur la git logvue) avec la liste des fichiers inclus dans, utilisez:
git show --name-only [commit-id_A]^..[commit-id_B]
Où [commit-id_A]est le commit initial et [commit-id_B]est le dernier commit que vous voulez montrer.
Attention particulière avec ^symbole. Si vous ne mettez pas cela, les informations commit-id_A ne seront pas déployées.
Si vous voulez vérifier les fichiers modifiés, vous devez vous occuper de nombreuses petites choses comme celle qui sera la meilleure à utiliser, comme si vous voulez vérifier lequel des fichiers a changé, tapez simplement
git status - il affichera les fichiers avec les modifications
puis si vous voulez savoir quelles modifications doivent être apportées, vous pouvez le vérifier de différentes manières,
git diff - affichera toutes les modifications dans tous les fichiers
ce n'est bon que lorsqu'un seul fichier est modifié
et si vous souhaitez vérifier un fichier particulier, utilisez
git diff