Comment lister chaque fichier pour chaque révision dans Git (comme le manifeste hg de Mercurial --all)?

10

Mercurial a une commande pour lister tous les fichiers du référentiel pour chaque révision:

hg manifest --all

Existe-t-il une commande équivalente dans Git?

IT2
la source
Quelque chose comme git log --stat?
jmreicha
4
git ls-files?
NN
Juste curieux, pour quelle raison en avez-vous besoin?
Stephen Jennings,
@StephenJennings: c'est une meilleure façon de savoir quel type de fichiers on a sous contrôle de version que de faire mentalement " ls -Rmoins .gitignore". L'utilité en général: on peut plus ou moins savoir ce qui se passe, mais l'introspection du référentiel donne une confiance que l'on sait. Surtout pour les utilisateurs débutants, une telle confiance fait une grande différence dans la façon dont le programme est agréable à utiliser. Git ne fait pas de rassurer ses utilisateurs une priorité, c'est pourquoi tant de gens le détestent naturellement jusqu'à ce qu'ils l'apprennent.
Esteis

Réponses:

3

Je suis absolument terrible en ce qui concerne les scripts shell, donc c'est très certainement sous-optimal, mais ce genre de chose pourrait le faire pour vous, en supposant que vous utilisez bash. J'espère que quelqu'un d'autre peut venir le nettoyer ou le remplacer par quelque chose de mieux. Je ne l'ai testé que sur mon Mac, alors méfiez-vous.

Il devrait imprimer tous les fichiers dans les commits qui sont les ancêtres de la HEAD actuelle. Enregistrez-le dans un fichier appelé manifest.shquelque part sur votre chemin:

#!/bin/bash

TFILE=$(mktemp -t git-manifest)

for sha in $(git log --pretty=format:%H)
do
    git ls-tree --name-only --full-tree -r $sha >> $TFILE
done

sort -u $TFILE
rm $TFILE
Stephen Jennings
la source
1
Pas besoin exportcar il n'a pas besoin d'être disponible dans les processus enfants. Si la boucle est sur des hachages SHA, la boucle fonctionne très bien, sinon quelque chose en utilisant readet en citant la variable serait mieux. sorta une -uoption qui fait ce qui uniqfait. Le fichier n'obtiendra pas rmd lorsque vous annulez à mi-parcours, vous en aurez besoin trappour cela, mais ce serait probablement excessif pour ce script.
Daniel Beck
@DanielBeck: Merci, je l'ai légèrement mis à jour. mktempn'existe pas dans Git Bash, je devrais trouver un moyen de gérer cela pour que Windows puisse jouer aussi.
Stephen Jennings