Git - Listet alle Dateien auf, die sich derzeit in der Versionskontrolle befinden.

122

Gibt es eine Möglichkeit, alle derzeit in der Quellcodeverwaltung befindlichen Dateien in Git aufzulisten? (Nicht nur die, die geändert wurden).

Anonym
quelle

Antworten:

129

Wenn Sie alle Dateien für einen bestimmten Zweig auflisten möchten, zB master:

git ls-tree -r master --name-only

Mit dieser -rOption wird die Datei in Unterverzeichnisse verschoben und jede Datei gedruckt, die derzeit der Versionskontrolle unterliegt. Sie können auch angeben, HEADanstatt masterdie Liste für einen anderen Zweig abzurufen, in dem Sie sich möglicherweise befinden.

Wenn Sie eine Liste aller jemals existierenden Dateien erhalten möchten, sehen Sie hier :

git log --pretty = format: --name-only --diff-filter = A | sort -u
slhck
quelle
1
Danke slhck, genau das, wonach ich gesucht habe - und nützlich, um auch über die zweite Bescheid zu wissen. Wird in 5 ½ Minuten als korrekt markiert, wenn es mir erlaubt ist. :-)
Anonym
3
Danke für die Antwort. Ich habe danach gesucht. Beachten Sie, dass git ls-tree -r master --name-onlydies das Gleiche wie bei der ersten Option ist, ohne dass das Symbol cut. Ach, und Sie können angeben , HEADstatt , masterwenn Sie nur diese Liste soll für was auch immer Zweig Sie sind zur Zeit auf.
Maurits
6
Wenn Sie "git ls-files" ausführen, werden Sie ein paar Zeichen sparen :)
Zain R
Warum wurde das Ende geschnitten -? Es führt dazu, dass einige zusätzliche Zeilen einige Dateien in einer zweiten Spalte anzeigen, die von der ersten wiederholt werden.
Adrian
@Adrian Keine Ahnung, damals kopiert, jetzt behoben.
Slhck
61

Der git ls-filesBefehl wird tun, was Sie brauchen.

Quelle: http://www.kernel.org/pub/software/scm/git/docs/git-ls-files.html

Mihai Capota
quelle
4
git ls-filesstatt git ls-tree -r master --name-onlyist sicherlich einfacher.
Karatedog
1
Entschuldigung, aber meine Bearbeitung war nicht ungültig. Im aktuellen Git gibt es keine git-ls-filesBinärdatei. Es gibt die gitBinärdatei mit dem ls-filesBefehl. Der Link zur Dokumentation ist inhaltlich korrekt, technisch jedoch für eine veraltete Binärdatei.
JonnyJD
@JonnyJD, wahrscheinlich als ungültig markiert, da Ihre Bearbeitung ein Kommentar sein sollte.
Ascherer
1
@JonnyJD All Git Mann-Seiten genannt werden , wie git-commit, git-init, git-ls-filesusw. , obwohl die Programme tatsächlich Unterbefehle. git-ls-filesHöchstwahrscheinlich gab es nie eine Binärdatei. Der Grund dafür ist, dass es mit dem externen Unterbefehlsmechanismus konsistent ist, mit dem Sie einen git fooBefehl durch Schreiben einer git-fooBinärdatei registrieren können .
Radon Rosborough
4

git ls-files druckt nur Dateien im aktuellen Arbeitsverzeichnis.

Wenn Sie zum Beispiel ein Git-Repo für dotfiles ( core.worktree = /) haben, dann haben Sie Dateien außerhalb des Git- Stamms und dieser einfache Befehl funktioniert nicht mehr.

Kurz gesagt, das wird funktionieren:

git --git-dir "`git rev-parse --git-dir`" \
    -C "`git config core.worktree || pwd`" \
    ls-files

Beispiel:

mkdir ~/dotfiles
cd ~/dotfiles
git config core.worktree /

# Ignore all files by default, else Git will find all files under "/"
echo "*" > .git/info/exclude

# Add files at the git repo's root and somewhere in the work tree
touch README
git add -f README
git add -f /etc/ssh/sshd_config

# `git status` would now print:
# new file:   ../../../etc/ssh/sshd_config
# new file:   README
git status

git commit -m "Initial commit"

# At this point, `git ls-files` prints only:
# README
git ls-files

# But you can print all files inside the work tree. This will print:
# etc/ssh/sshd_config
# home/yourusername/dotfiles/README
git --git-dir "`git rev-parse --git-dir`" -C "`git config core.worktree || pwd`" ls-files

Wenn Sie möchten, dass Pfade relativ zu Ihrem aktuellen (Shell-) Verzeichnis angegeben werden, führt dies die folgenden Schritte aus:

alias gls='git ls-tree -r master --name-only HEAD "`git config core.worktree`"'

und im obigen Beispiel würde es drucken

README
../../../etc/ssh/sshd_config
AndiDog
quelle
In git v2.21 werden git ls-filesalle im aktuellen Verzeichnis und darunter angezeigt . Es werden nur keine Dateien angezeigt, die im Repo gelöscht wurden.
Adrian
0

Sie können auch den gitkinteraktiven Repository-Viewer verwenden.

JPaget
quelle
1
Hier wird ein Tool erwähnt, aber das "Wie" wird nicht wirklich beantwortet. Können Sie dies zu einer umsetzbaren Lösung ausbauen? Nur jemanden in eine Forschungsrichtung zu weisen, damit er seine eigene Lösung entwickelt, ist als Kommentar angemessener. Vielen Dank. Aus Bewertung
fixer1234
-2

Bildschirmfoto

Bitte schauen Sie sich das Bild an, auf der rechten Seite gibt es zwei Optionen Patch und Tree. Wenn Sie einen Baum auswählen, können Sie die Ordnerstruktur für jedes Commit anzeigen.

Amarnath MB
quelle
Bitte überlegen Sie sich, ob Sie einen besseren Screenshot erstellen möchten, damit Sie nicht so viel zensieren müssen.
Thorbjørn Ravn Andersen