2012-05-05 3 views
59

göstermek --stat ancak bazı dosyalar olarak listelenmiştir: yoluduryapma diff bazı dosyalar depo tabanından tam yolu ile listelenmiştir <code>git diff --stat</code> yapıyor On tam dosya yolunu

.../short/path/to/filename. 

... ve sadece kısa başlar yol gösterilir.

git diff Tüm dosyaların bir dosya tarafından kolayca işlenebilmesi için tüm dosya yollarını listelemesini istiyorum.

--stat[=<width>[,<name-width>[,<count>]]] 
     Generate a diffstat. You can override the default output width for 
     80-column terminal by --stat=<width>. The width of the filename 
     part can be controlled by giving another width to it separated by a 
     comma. By giving a third parameter <count>, you can limit the 
     output to the first <count> lines, followed by ... if there are 
     more. 

     These parameters can also be set individually with 
     --stat-width=<width>, --stat-name-width=<name-width> and 
     --stat-count=<count>. 

(bir "sıhhi tesisat daha beri doğrudan git diff-tree kullanmak isteyebilirsiniz komut dosyası için: Ben git diff hep

cevap

68

git diff komut --stat için isteğe bağlı değerler alır tam yolunu göstermek için alabilmemin bir yolu var mı "Komut, her iki şekilde de iyi olacağından şüpheliyim. kullanırken --stat ile aynı ek metne ihtiyacınız olduğunu unutmayın. git diff" porselen "ön ucu ve git diff-tree tesisat komutunun kullanılması arasındaki temel fark, git diff o için yapılandırılmış ayarlarınızı arar algılama yeniden adlandırılıp sonlandırılmayacağına karar vermek için diff.renames gibi öyküler. Eh, bu, artı ön uç git diff, örneğin bir endeksi ile bir işlem karşılaştırıyorsanız git diff-index eşdeğerini yapacağız. Diğer bir deyişle, git diffsizin yapılandırma ve otomatik sağ tesisat çağırır okur.)

+5

git diff --numstat, diff-tree – cmcginty

+1

ile aynıdır. Son bölümün (+++/---) genişliğini sınırlamak için ayrı bir '--stat-graph-width = kullanabilirsiniz. .. 'anahtarı. Ayrıca yüksek '--stat-graph-width =' ve '--stat-name-width =' ayarlarının yeterli olmadığını, ayrıca '--stat-width =' değerini ayarlayabilmeniz gerektiğini de unutmayın. –

+0

@ jakub.g: iyi nokta. Git kaynağında biraz kazmaya dayanarak, bu git 1.7.10 ile gitti. – torek

-1

ben fark davranışı bir dosya yolları kısaltılacak önceden Git 1.7.10 etrafında bir yere değişti --stat bulundu Sabit genişlik varsayılan olarak - şimdi terminal pencerenizin izin verdiği kadar görüntüler. Bu sorunu yaşıyorsanız, 1.8.0 veya daha yeni bir sürüme geçtiğinizden emin olun.

11

Bash kullanıcıları için, otomatik olarak kullanılabilir terminali genişliğini doldurmak için $COLUMNS değişkeni kullanabilirsiniz:

git diff --stat=$COLUMNS 

Çok uzun yol adları hala kesilebilir; , Daha genel bir çözüm için

git show --stat=$COLUMNS --stat-graph-width=$(($COLUMNS/5)) 

size: Bu durumda, örneğin, bu uç genişliğinin 1/5 sınırlandırır/--- parçası --stat-graph-width kullanılarak +++ genişliğini azaltmak Terminal genişliğini belirlemek için tput cols çıkışını kullanabilir.

+2

Küreselleşmenin herhangi bir yolu var mı? --stat = $ COLUMNS, $ COLUMNS'? Her zaman yazmak çılgınlıktır. – Rudie

+0

@Rudie, '~/.bashrc' öğesine' COLUMNS' dışa aktarmayı ve '[alias]' altındaki '~/.gitconfig' öğesinde' smart-diff =! "gitsmartdiff() {git diff $ 2 --stat = $ COLUMNS, $ COLUMNS;}; gitsmartdiff" ' – user151841

+0

@ user151841 Bu yalnızca" diff "olarak değişir. Ben de birleştirmek için çalışmak istiyorum ve vb. (Manuel olarak bunu bile yapamam.) GIT'in desteklediğini düşünmüyorum. – Rudie

9

yazı işleme için, aşağıdakilerden birini kullanmak daha iyi olabilir:

# list just the file names 
git diff --name-only 
path/to/modified/file 
path/to/renamed/file 


# list the names and change statuses: 
git diff --name-status 
M  path/to/modified/file 
R100 path/to/existing/file path/to/renamed/file 


# list a diffstat-like output (+ed lines, -ed lines, file name): 
git diff --numstat 
1  0  path/to/modified/file 
0  0  path/to/{existing => renamed}/file 

Bunlar her alan sonlandırıcı olarak NUL kullanır -z seçeneğiyle birleştirildiğinde sağlam yazı işleme için daha kullanışlı hale gelir.

+0

Testlerime göre, bu komutları kullanarak kaynağın tam yolunu almazsınız. Şimdilik sadece silinmiş dosyalar için göreceli yollar görüyorum. Bu dosyalar için sadece durum böyle değil mi bilmiyorum. – GCallie

+1

Tüm çıkışlar 'git rev-parse --show-toplevel' öğesine göre yolları döndürür. Orijinal sorun, özellikle uzun dosya adları için veya '--stat-name-width 'için düşük bir değer olmak üzere, diffstatlarda bir sorun olan kesik yollara başvurmaktı. Yukarıdaki komutlar yolları kesmeyecek, ancak yine de depo köküne nispeten de olsa talep edilen "tam" yolu gösterecektir. – cmbuckley

+0

Gerçekten de haklısınız. Cevabınız için teşekkürler! – GCallie