Git - Lista wszystkich plików znajdujących się pod kontrolą źródła?


99

Czy istnieje sposób na wylistowanie wszystkich plików znajdujących się pod kontrolą kodu źródłowego w git? (Nie tylko te, które zostały zmodyfikowane).

Odpowiedzi:


106

Jeśli chcesz wyświetlić listę wszystkich plików dla określonej gałęzi, np. master:

 git ls-tree  -r master - onlyname 

The -r opcja pozwoli recurse into podkatalogów i wydrukować każdy plik obecnie pod kontrolą wersji. Możesz również określić HEAD zamiast master aby uzyskać listę dla każdej innej gałęzi, w której możesz być.

Jeśli chcesz uzyskać listę wszystkich plików, które kiedykolwiek istniały, Spójrz tutaj :

 git log  --pretty = format: --name-status | cut -f2- | sort -u 

1
Dzięki slhck, dokładnie to, co byłem po - i przydatne wiedzieć o drugim też. Oznaczę jako poprawną w 5 i pół minuty, kiedy będę mógł. :-)
Anonymous

3
Dziękuję za odpowiedź. Szukałem tego. Zauważ, że git ls-tree -r master --name-only zrobiłby to samo, co pierwsza opcja, bez potrzeby cut. Ach, i możesz określić HEAD zamiast master jeśli chcesz tylko tę listę dla jakiejkolwiek gałęzi, w której aktualnie się znajdujesz.
maurits

5
Uruchomienie "git ls-files" uratuje ci kilka postaci :)
Zain R

52

The git ls-files polecenie zrobi to, czego potrzebujesz.

Źródło: http://www.kernel.org/pub/software/scm/git/docs/git-ls-files.html


3
git ls-files zamiast git ls-tree -r master --name-only jest z pewnością prostsze.
karatedog

1
Przepraszamy, ale moja edycja nie była nieprawidłowa. W obecnym git nie ma git-ls-files dwójkowy. Istnieje git binarny z ls-files dowództwo. Link do dokumentacji jest poprawny w treści, ale technicznie dla przestarzałego pliku binarnego.
JonnyJD

@JonnyJD, prawdopodobnie oznaczony jako niepoprawny, ponieważ twoja edycja powinna być komentarzem.
Ascherer

1
@JonnyJD Wszystkie strony podręcznika Git są nazywane jako git-commit, git-init, git-ls-filesitp., mimo że programy są w rzeczywistości podprogramami. Nigdy nie było git-ls-files binarny, najprawdopodobniej. Rozumowanie jest takie, że jest zgodne z zewnętrznym mechanizmem podprogramu, który pozwala na rejestrację git foo polecenie, pisząc a git-foo dwójkowy.
Radon Rosborough

3

git ls-files wydrukuje tylko pliki w bieżącym katalogu roboczym.

Jeśli na przykład masz repozytorium git dla plików dotfiles ( core.worktree = / ), wtedy będziesz miał pliki poza katalogiem głównym git i to proste polecenie przestanie działać.

W skrócie, to zadziała:

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

Przykład:

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

Jeśli chcesz określone ścieżki krewny do bieżącego katalogu (powłoki), wykonuje to zadanie:

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

iw powyższym przykładzie wydrukowałaby

README
../../../etc/ssh/sshd_config

0

Możesz także użyć gitk interaktywna przeglądarka repozytoriów.


1
Wymienia to narzędzie, ale tak naprawdę nie odpowiada na pytanie "jak". Czy możesz rozwinąć to w praktyczne rozwiązanie? Wskazanie kogoś w kierunku badań, aby mogli opracować własne rozwiązanie, jest bardziej odpowiednie jako komentarz. Dzięki. z recenzji
fixer1234

-1

Screenshot

Proszę spojrzeć na obrazek, po prawej stronie są dwie opcje: łatka i drzewo. Jeśli wybierzesz drzewo, możesz wyświetlić strukturę folderów dla każdego zatwierdzenia.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.