Wie liste ich jede Datei für jede Revision in Git auf (wie Mercurials hg-Manifest --all)?

10

Mercurial verfügt über einen Befehl zum Auflisten aller Dateien, die das Repository für jede Revision hat:

hg manifest --all

Gibt es einen entsprechenden Befehl in Git?

IT2
quelle
So etwas wie Git Log - Statistik?
jmreicha
4
git ls-files?
NN
Nur neugierig, aus welchem ​​Grund brauchst du das?
Stephen Jennings
@StephenJennings: Es ist eine bessere Möglichkeit zu wissen, welche Art von Dateien man unter Versionskontrolle hat, als mental " ls -RMinus .gitignore" zu machen. Der Nutzen im Allgemeinen: Man kann mehr oder weniger wissen, was los ist, aber die Selbstbeobachtung des Repositorys gibt einem das Vertrauen , das man kennt. Insbesondere für Anfänger macht dieses Vertrauen einen großen Unterschied darin, wie angenehm die Verwendung des Programms ist. Git macht es nicht zur Priorität, seine Benutzer zu beruhigen, weshalb so viele Leute es verständlicherweise hassen, bis sie es lernen.
Esteis

Antworten:

3

Ich bin absolut schrecklich in Shell-Skripten, daher ist dies mit Sicherheit nicht optimal, aber so etwas könnte es für Sie tun, vorausgesetzt, Sie verwenden Bash. Hoffentlich kann jemand anderes vorbeikommen und es aufräumen oder durch etwas Besseres ersetzen. Ich habe es nur auf meinem Mac getestet, also Vorsicht.

Es sollte alle Dateien in Commits drucken, die Vorfahren des aktuellen HEAD sind. Speichern Sie es in einer Datei, die manifest.shirgendwo in Ihrem Pfad aufgerufen wird:

#!/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
quelle
1
Keine Notwendigkeit, exportda es in untergeordneten Prozessen nicht verfügbar sein muss. Wenn sich die Schleife über SHA-Hashes befindet, funktioniert die Schleife einwandfrei, andernfalls readwäre es besser, die Variable zu verwenden und in Anführungszeichen zu setzen. sorthat eine -uOption, die macht was uniqmacht. Die Datei wird nicht rmangezeigt, wenn Sie sie zur Hälfte abbrechen. trapDafür benötigen Sie eine , aber das wäre für dieses Skript wahrscheinlich übertrieben.
Daniel Beck
@ DanielBeck: Danke, ich habe es leicht aktualisiert. mktempgibt es in Git Bash nicht, ich sollte einen Weg finden, damit umzugehen, damit Windows auch spielen kann.
Stephen Jennings