Git - Daftar semua file yang saat ini di bawah kendali sumber?


99

Apakah ada cara untuk mendaftar semua file yang saat ini di bawah kendali sumber di git? (Bukan hanya yang sudah dimodifikasi).

Jawaban:


106

Jika Anda ingin mendaftar semua file untuk cabang tertentu, mis. master:

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

Itu -r Opsi akan membiarkannya muncul kembali ke subdirektori dan mencetak setiap file yang saat ini di bawah kendali versi. Anda juga bisa menentukan HEAD dari pada master untuk mendapatkan daftar untuk cabang lain di mana Anda berada.

Jika Anda ingin mendapatkan daftar semua file yang pernah ada, Lihat disini :

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

1
Terima kasih slhck, persis apa yang saya cari - dan berguna untuk mengetahui tentang yang kedua juga. Akan menandai sebagai benar dalam 5 setengah menit ketika saya diizinkan. :-)
Anonymous

3
Terima kasih atas jawabannya. Saya mencari ini. Catat itu git ls-tree -r master --name-only akan melakukan hal yang sama seperti opsi pertama, tanpa perlu cut. Ah, dan Anda bisa menentukan HEAD dari pada master jika Anda hanya ingin daftar ini untuk cabang apa pun yang sedang Anda ikuti.
maurits

5
Menjalankan "git ls-files" akan menghemat beberapa karakter :)
Zain R

52

Itu git ls-files Perintah akan melakukan apa yang Anda butuhkan.

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


3
git ls-files dari pada git ls-tree -r master --name-only tentu lebih sederhana.
karatedog

1
Maaf tetapi hasil edit saya tidak valid. Di git saat ini tidak ada git-ls-files biner. Ada git biner dengan ls-files perintah. Tautan ke dokumentasi benar dalam konten, tetapi secara teknis untuk biner yang ketinggalan zaman.
JonnyJD

@JonnyJD, mungkin ditandai tidak valid karena hasil edit Anda harus berupa komentar.
Ascherer

1
@JonnyJD Semua halaman manual Git diberi nama git-commit, git-init, git-ls-files, dll. meskipun program tersebut sebenarnya adalah sub-perintah. Tidak pernah ada git-ls-files biner, kemungkinan besar. Alasannya adalah bahwa ini konsisten dengan mekanisme sub-perintah eksternal, yang memungkinkan Anda untuk mendaftar a git foo perintah dengan menulis a git-foo biner.
Radon Rosborough

3

git ls-files hanya akan mencetak file di direktori kerja saat ini.

Jika, misalnya, Anda memiliki repo git untuk dotfiles ( core.worktree = / ), maka Anda akan memiliki file di luar git root dan perintah sederhana itu tidak akan berfungsi lagi.

Singkatnya, ini akan berhasil:

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

Contoh:

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

Jika Anda ingin jalur yang ditentukan relatif ke direktori (shell) Anda saat ini, ini berfungsi:

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

dan dalam contoh di atas, itu akan dicetak

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

0

Anda juga dapat menggunakan gitk penampil repositori interaktif.


1
Ini menyebutkan alat, tetapi tidak benar-benar menjawab "bagaimana". Bisakah Anda memperluas ini menjadi solusi yang bisa ditindaklanjuti? Mengarahkan seseorang ke arah penelitian untuk mengembangkan solusi mereka sendiri lebih tepat sebagai komentar. Terima kasih. dari ulasan
fixer1234

-1

Screenshot

Silakan lihat gambar, di sebelah kanan ada dua opsi tambalan dan Pohon. Jika Anda memilih pohon, Anda dapat melihat struktur folder untuk setiap komit.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.