Comment lister tous les fichiers dans un commit ?

Je cherche une commande git simple qui fournisse une liste joliment formatée de tous les fichiers qui faisaient partie du commit donné par un hash (SHA1), sans aucune information étrangère.

J'ai essayé :

git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

Bien qu'il énumère les fichiers, il inclut également des informations diff indésirables pour chacun d'eux.

Existe-t-il une autre commande git qui fournira juste la liste que je veux, de sorte que je puisse éviter de l'analyser à partir de la sortie git show ?

Solution

Mode préféré (parce qu'il s'agit d'une commande de plomberie, destinée à être programmée) :

$ git diff-tree --no-commit-id --name-only -r bd61ad98
index.html
javascript/application.js
javascript/ie6.js

Autre méthode (moins préférée pour les scripts, car il s'agit d'une commande de type porcelaine ; destinée à être utilisée par l'utilisateur).

$ git show --pretty="" --name-only bd61ad98    
index.html
javascript/application.js
javascript/ie6.js

  • L'argument --no-commit-id supprime la sortie de l'ID de commit.
  • L'argument --pretty spécifie une chaîne de format vide pour éviter la partie cruft au début.
  • L'argument --name-only montre seulement les noms de fichiers qui ont été affectés (Merci Hank). Utilisez --name-status à la place, si vous voulez voir ce qui est arrivé à chaque fichier (Deleted, Modified, Added)
  • L'argument -r permet d'effectuer une récursion dans les sous-arbres.
Commentaires (24)

Je vais juste supposer que gitk n'est pas souhaité pour cela. Dans ce cas, essayez git show --name-only.

Commentaires (3)

Une combinaison de "git show --stat" (merci Ryan) et quelques commandes sed devraient vous permettre de réduire les données :

git show --stat  | sed -n "/ [\w]\*|/p" | sed "s/|.\*$//"

Cela produira juste la liste des fichiers modifiés.

Commentaires (0)