Menggunakan command line git, bagaimana saya bisa membuat git memperlihatkan daftar file yang sedang dilacak dalam repositori?
Menggunakan command line git, bagaimana saya bisa membuat git memperlihatkan daftar file yang sedang dilacak dalam repositori?
Jawaban:
Jika Anda ingin membuat daftar semua file yang saat ini sedang dilacak di bawah cabang master
, Anda dapat menggunakan perintah ini:
git ls-tree -r master --name-only
Jika Anda ingin daftar file yang pernah ada (yaitu termasuk file yang dihapus):
git log --pretty=format: --name-only --diff-filter=A | sort - | sed '/^$/d'
git
tidak versi direktori secara langsung. Sebaliknya ia menyimpan file dan jalurnya. ls-tree
akan menampilkan semua file yang diversi. Untuk lebih memahami perbedaan ini, coba staging direktori kosong git
. Direktori kosong tidak akan pernah muncul dalam perubahan bertahap. Satu-satunya cara untuk versi direktori kosong tersebut adalah untuk benar-benar versi file di bawah direktori. Untuk kasus penggunaan di mana Anda memerlukan direktori placeholder kosong di kontrol versi, Anda bisa membuat file dummy di bawah direktori, dan versi itu. Saya harap penjelasannya jelas.
ls-tree master
jangan tampilkan file yang terlacak di area pementasan.
File yang dikelola oleh git ditunjukkan oleh git ls-files
. Lihat halaman manualnya.
ls
... atauls -R
git ls-tree
- itu relatif terhadap pwd
.
Jawaban yang diterima hanya menampilkan file di pohon direktori saat ini. Untuk menampilkan semua file yang dilacak yang telah dikomit (pada cabang saat ini), gunakan
git ls-tree --full-tree --name-only -r HEAD
--full-tree
membuat perintah dijalankan seolah-olah Anda berada di direktori root repo.-r
berulang ke dalam subdirektori. Dikombinasikan dengan --full-tree
, ini memberi Anda semua file berkomitmen, dilacak.--name-only
menghapus SHA / info izin ketika Anda hanya ingin path file.HEAD
menentukan cabang yang Anda inginkan dari daftar file yang dilacak dan berkomitmen untuk. Anda dapat mengubah ini menjadi master
atau nama cabang lain, tetapi HEAD
merupakan komit yang telah Anda periksa sekarang.Ini adalah metode dari jawaban yang diterima hingga ~ pertanyaan rangkap https://stackoverflow.com/a/8533413/4880003 .
Anda mungkin ingin keluaran berwarna dengan ini.
Saya menggunakan one-liner ini untuk membuat daftar file dan direktori yang dilacak di direktori saat ini dari cabang saat ini:
ls --group-directories-first --color=auto -d $(git ls-tree $(git branch | grep \* | cut -d " " -f2) --name-only)
Anda mungkin ingin menambahkannya sebagai alias:
alias gl='ls --group-directories-first --color=auto -d $(git ls-tree $(git branch | grep \* | cut -d " " -f2) --name-only)'
Jika Anda ingin mendaftarkan file secara rekursif:
'ls' --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)
Dan alias:
alias glr="'ls' --color=auto -d \$(git ls-tree -rt \$(git branch | grep \\* | cut -d \" \" -f2) --name-only)"
glr
alias Anda yang tersedia tampak agak aneh jadi saya membuat versi yang lebih konsisten dengan format alias pertama yang Anda berikan: alias glr='ls --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)'
. Diuji dengan git version 2.20.1
pada Debian 10.