En raison de la bureaucratie, j'ai besoin d'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 faire pour obtenir cette liste ?
En raison de la bureaucratie, j'ai besoin d'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 faire pour obtenir cette liste ?
Pour les fichiers modifiés entre une ZSD donnée et votre livraison actuelle :
git diff --name-only <starting SHA> HEAD
ou si vous voulez inclure les fichiers modifiés mais non 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 leurs SHA ou autres noms) :
git diff --name-only <commit1> <commit2>
Utilisation de --name-status
au lieu de --name-only
montrera ce qui est arrivé aux fichiers ainsi que les noms.
Pour énumérer tous les non mis en scène suivi des fichiers modifiés :
git diff --name-only
Pour énumérer tous les mis en scène suivi des fichiers modifiés :
git diff --name-only --staged
Pour énumérer tous les mis en scène et non mis en scène suivi des fichiers modifiés :
{ git diff --name-only ; git diff --name-only --staged ; } | sort | uniq
Pour énumérer tous les sans trace (ceux qui sont listés par git status
(donc sans les fichiers ignorés) :
git ls-files --other --exclude-standard
Si vous utilisez ceci dans un shell script, et que vous voulez vérifier de manière programmatique si ces commandes ont retourné quelque chose, vous serez intéressé par les éléments suivants git diff
's --exit-code
option.
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 lister tous les fichiers non mis à jour :
git ls-files --other --modified --exclude-standard
Pour obtenir la date de dernière 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.
J'ai besoin d'une liste de fichiers dont le contenu a été modifié entre deux commits (uniquement des ajouts, A
ou modifié, M
), alors j'ai utilisé :
git diff --name-only --diff-filter=AM <from_commit_hash> <to_commit_hash>
Voici les différentes --diff-filter
des options de l documentation git diff (voir aussi man git diff
) :
*`--diff-filter=[(A|C|D|M|R|T|U|X|B)…[]]`**
Sélectionnez uniquement les fichiers qui sont ajoutés (
A
), copié (C
), supprimé (D
), modifié (M
), Renommé (R
), leur type (c'est-à-dire fichier ordinaire, lien symbolique, sous-module, ) est modifié (T
), sont non fusionnés (U
), sont inconnus (X
), ou ont vu leur binôme brisé (B
). Toute combinaison de caractères de filtrage (y compris aucun) peut être utilisée. Lorsque*
(All-or-none) 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 qui correspond à d'autres critères, rien n'est sélectionné.De plus, ces lettres majuscules peuvent être réduites pour être exclues. Par exemple
--diff-filter=ad
exclut les chemins ajoutés et supprimés.Notez que tous les diffs ne peuvent pas présenter tous les types. Par exemple, les diffs de l'index à l'arbre de travail ne peuvent jamais avoir d'entrées ajoutées (parce que l'ensemble des chemins inclus dans le diff est limité par ce qui est dans l'index). De même, les entrées copiées et renommées ne peuvent pas apparaître si la détection de ces types est désactivée.
Si vous souhaitez également répertorier l'état (par exemple, l'état d'avancement des travaux), il est possible de le faire. A
/ M
), changer --name-only
a --name-status
:
git diff --name-status --diff-filter=AM <from_commit_hash> <to_commit_hash>
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
63 votes
"à cause de la bureaucratie" xD
0 votes
Voir aussi : git - liste de tous les fichiers modifiés mais non supprimés dans un commit .