Git'in izlenen dosyaların listesini göstermesini nasıl sağlayabilirim?


535

Git komut satırı git'i kullanarak git'in depoda izlenen dosyaların bir listesini göstermesini nasıl sağlayabilirim?



2
İnanıyorum. Ancak, bunun daha iyi bir cevabı olduğunda bunu dup olarak işaretlemek doğru hissetmez.
lindhe

5
paralel bir evrende, bu sorunun tüm cevapları ne kadar benzediğini , ancak her birinin kendi kendine özgü yetenekleri olduğunu bilmiyorum .
Jeff Puckett

Yanıtlar:


628

Şu anda şube altında izlenmekte olan tüm dosyaları listelemek istiyorsanız master, bu komutu kullanabilirsiniz:

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

Şimdiye kadar var olan dosyaların bir listesini istiyorsanız (örneğin, silinen dosyalar dahil):

git log --pretty=format: --name-only --diff-filter=A | sort - | sed '/^$/d'

61
Geçerli dalın dosyalarını listelemek istiyorsanız git ls-tree -r HEAD --name komutunu kullanın
Ramast

3
Dizinler neden listelenmiyor?
Shuzheng

13
@NicolasLykkeIversen - gitdoğrudan dizinleri sürümlendirmez . Bunun yerine dosyaları ve yollarını saklar. ls-treetüm sürüm dosyalarını çıktılar. Bu ayrımı daha iyi anlamak için boş bir dizini hazırlamayı deneyin git. Boş dizin hiçbir zaman aşamalı değişikliklerde görünmez. Böyle boş bir dizini sürümlendirmenin tek yolu, aslında dizini altındaki bir dosyayı sürümlendirmektir. Sürüm kontrolünde böyle boş bir yer tutucu dizinine ihtiyaç duyduğunuz kullanım durumları için, dizinin altında bir kukla dosya oluşturabilirsiniz. Umarım açıklama açıktır.
Tuxdude

2
Hemen not, ls-tree mastergöstermez izlenen alana evreleme dosyaları.
nn0p

Çok sayıda alt dizin ve dosya içeriyorsa, yalnızca üst düzey dizini göstermek mümkün müdür?
Blaszard

191

Git tarafından yönetilen dosyalar ile gösterilir git ls-files. Kılavuz sayfasına göz atın.


4
Bu, yalnızca geçerli dizindeki veya altındaki dosyaları gösteriyor gibi görünüyor.
Lyle Z

11
Bunu manuel sayfanın ilgili bölümlerini içerecek şekilde düzenler miyim?
Nathan Basanese

1
@NathanBasanese belki de bu bilgilere başka bir cevap ekleyebilirsiniz.
José Castro

@LyleZ Belki de bu ls... veyals -R
flow2k

1
@LyleZ Ayrıca, bu davranış ile aynıdır git ls-tree- görecelidir pwd.
flow2k

18

Kabul edilen cevap yalnızca geçerli dizinin ağacındaki dosyaları gösterir. Tamamlanmış olan (geçerli dalda) izlenen tüm dosyaları göstermek için şunu kullanın:

git ls-tree --full-tree --name-only -r HEAD
  • --full-tree komutu deponun kök dizinindeymiş gibi çalıştırır.
  • -ralt dizinlere geri çekilir. İle birlikte --full-tree, bu size tüm taahhüt, izlenen dosyaları verir.
  • --name-only yalnızca dosya yollarını istediğiniz zaman için SHA / izin bilgilerini kaldırır.
  • HEADizlenen, taahhüt edilen dosyaların listesini hangi dal için istediğinizi belirtir. Bunu masterveya herhangi bir şube adını değiştirebilirsiniz, ancak HEADşu anda kontrol ettiğiniz taahhüttür.

Bu kabul edilen cevaptan ~ yinelenen soru https://stackoverflow.com/a/8533413/4880003 adresine verilen yöntemdir .


Teşekkürler! Bu aynı zamanda çıplak depolar için de geçerlidir.
hzpc-joostk

5

Bununla renkli çıktı isteyebilirsiniz.

Geçerli dalın geçerli dizininde izlenen dosyaları ve dizinleri listelemek için bu tek astarı kullanın:

ls --group-directories-first --color=auto -d $(git ls-tree $(git branch | grep \* | cut -d " " -f2) --name-only)

Diğer ad olarak eklemek isteyebilirsiniz:

alias gl='ls --group-directories-first --color=auto -d $(git ls-tree $(git branch | grep \* | cut -d " " -f2) --name-only)'

Dosyaları özyinelemeli olarak listelemek istiyorsanız:

'ls' --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)

Ve bir takma ad:

alias glr="'ls' --color=auto -d \$(git ls-tree -rt \$(git branch | grep \\* | cut -d \" \" -f2) --name-only)"

glrSağladığınız ilk takma biçiminde bir sürümü daha tutarlı yapılan bu yüzden takma sen biraz garip görünüyordu İşletmesi: alias glr='ls --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)'. git version 2.20.1Debian 10 ile test edildi .
baltakatei
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.