Antworten:
Wenn Sie alle Dateien für einen bestimmten Zweig auflisten möchten, zB master
:
git ls-tree -r master --name-only
Mit dieser -r
Option wird die Datei in Unterverzeichnisse verschoben und jede Datei gedruckt, die derzeit der Versionskontrolle unterliegt. Sie können auch angeben, HEAD
anstatt master
die 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
git ls-tree -r master --name-only
dies das Gleiche wie bei der ersten Option ist, ohne dass das Symbol cut
. Ach, und Sie können angeben , HEAD
statt , master
wenn Sie nur diese Liste soll für was auch immer Zweig Sie sind zur Zeit auf.
-
? Es führt dazu, dass einige zusätzliche Zeilen einige Dateien in einer zweiten Spalte anzeigen, die von der ersten wiederholt werden.
Der git ls-files
Befehl wird tun, was Sie brauchen.
Quelle: http://www.kernel.org/pub/software/scm/git/docs/git-ls-files.html
git ls-files
statt git ls-tree -r master --name-only
ist sicherlich einfacher.
git-ls-files
Binärdatei. Es gibt die git
Binärdatei mit dem ls-files
Befehl. Der Link zur Dokumentation ist inhaltlich korrekt, technisch jedoch für eine veraltete Binärdatei.
git-commit
, git-init
, git-ls-files
usw. , obwohl die Programme tatsächlich Unterbefehle. git-ls-files
Hö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 foo
Befehl durch Schreiben einer git-foo
Binärdatei registrieren können .
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
git ls-files
alle im aktuellen Verzeichnis und darunter angezeigt . Es werden nur keine Dateien angezeigt, die im Repo gelöscht wurden.
Sie können auch den gitk
interaktiven Repository-Viewer verwenden.
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.