55 votes

Comment obtenir la dernière date de validation pour un tas de fichiers dans Git ?

Quel est le one-liner le plus simple pour obtenir la date du dernier commit pour un tas de fichiers dans un dépôt Git (c'est-à-dire, pour chaque fichier, la date du dernier commit qui a modifié ce fichier) ?

Le contexte est que j'utilise d'autres commandes Bash pour trouver une longue liste de fichiers correspondant à certains critères, et j'aimerais simplement diriger cette liste dans une commande Git pour obtenir la dernière date de validation pour chaque fichier.

81voto

Greg Hewgill Points 356191

La commande suivante sera utile :

 git log -1 --format=%cd filename.txt

Cela imprimera la dernière date de modification pour un fichier. Le -1 affiche une entrée de journal (la plus récente) et --format=%cd affiche la date de validation. Consultez la documentation de git-log pour une description complète des options.

Vous devriez pouvoir l'étendre facilement pour un groupe de fichiers.

9voto

nickf Points 185423

En prolongeant légèrement la réponse de Greg, git log peut prendre plusieurs chemins dans son argument. Il affichera alors uniquement les commits qui incluaient ces chemins. Par conséquent, pour obtenir le dernier commit pour un groupe de fichiers :

 git log -1 --format=%cd -- fileA.txt fileB.txt fileC.txt

Je suis assez nul en script shell, donc je ne sais pas exactement comment construire cette commande via la tuyauterie, mais ce serait peut-être un bon sujet pour une autre question.

2voto

diemo Points 53

Voici une ligne utilisant find (divisée en plusieurs pour plus de lisibilité, mais grâce aux barres obliques inverses, le copier-coller devrait fonctionner):

 find <dirs...> -name '<pattern>' <any other predicate to get what you want> \
  -exec git log -1 --format="AAA%ai NNN" '{}' \; \
  -exec echo '{}' XXX \; \
| tr \\n N | sed -e 's/AAA/\n/g' | sed -e 's/NNNN/ /g' -e 's/XXX.*//g'

Le changement de ligne trop complexe avec tr et sed est juste là pour obtenir la date et le nom de fichier sur une seule ligne et pour ignorer les fichiers non suivis. Vous devez vous assurer qu'aucun de vos fichiers ne contient ces marqueurs stupides AAA XXX NNNN.

Prograide.com

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.

Powered by:

X