2015-02-25 16 views
6

Web kullanıcı arabirimi için programlı olarak tam bağlamlı bir git fark oluşturmam gerekiyor."git diff" için tüm dosyayı göstermek için -U <infinity> seçeneği var mı?

A CLI tam bağlam diff üretmek için sorular kaplıydı:

yaygın cevap -U/--unified seçenekle git diff -U99999

gibi bir şeyyapıyor, gülünç yüksek bir eşik (örneğin 999,999): my dosya daha büyük 1M hatları

ise

  1. Bana bir performans
  2. Daha da kötüsü vurmak olabileceğini şüpheli yapar, gösterilme bir -U seçenek var mı bir doğruluk meselesi tüm dosya?

+1

ilgili: http://stackoverflow.com/q/27857967/2541573 – Jubobs

+1

Başka bir seçenek 'git diff -U \' wc -l | cut -f 1 -d "" \ 'HEAD^'; – kdopen

cevap

4

, sen noktası olmaya sayıda seçebilir hangi uygulamanız en can' t Böyle büyük bir dosyayı (diff) görüntülemeyi.Benim dosya 1M hatları

Ve bu sorunu gidermek için, sen tamamlandığını belirlemek için birden fazla @@ ... @@ hattı için çıkış kontrol edebilirsiniz büyükse

bir doğruluk konu - bu sizi tanır sessizce yanlış numara vermekten kaçınmak için.

+2

Experimentally, 'git diff -U999999999999999999' ifadesinin 'Segmentation fault (core damperli)' olduğunu buldum. Ancak, bir rakam daha az, -U99999999999999999, çalıştı. Ayrıca, ilk komutta iki ya da daha fazla basamak ekleyerek, '-U999999999999999999999999', seçeneğin aslında '-U0' olduğu gibi davranmasına neden oldu. –

0

Açıkçası, en iyi seçenek, vanilya git diff yerine git difftool kullanmaktır. git desteklerin sürümü,

git difftool --tool-help 

girdikleri araçları görmek için benim sürümü (2.3.0) ile hangi gösterir aşağıdaki

$ git difftool --tool-help 
'git difftool --tool=<tool>' may be set to one of the following: 
     araxis 
     gvimdiff 
     gvimdiff2 
     gvimdiff3 
     meld 
     vimdiff 
     vimdiff2 
     vimdiff3 

The following tools are valid, but not currently available: 
     bc 
     bc3 
     codecompare 
     deltawalker 
     diffmerge 
     diffuse 
     ecmerge 
     emerge 
     kdiff3 
     kompare 
     opendiff 
     p4merge 
     tkdiff 
     xxdiff 

Ben genellikle meld kullanmak, ama bu sadece kişisel bir tercih . git difftool, git diff ile aynı bağımsız değişkenleri ve işlemle ilgili yardımcı olmak için birkaçını alır (-y'u bir dosyadan diğerine geçerken gelen istemleri engellemek için kullanışlıdır).

, örneğin,
git difftool -y -t meld 08f0f82^..08f0f82 

açıkça doğru SHA-1 08f0f82 değiştirilmesi kullanabilir tamamlama belirli getirdiği değişiklikleri kontrol etmek için.

En büyük şikayetim, her değiştirilen dosya için aracı sırayla başlatmasıdır (bu nedenle -y seçeneğini belirtmektedir).

Değişiklikleri yalnızca söz konusu işlemde belirli bir dosyada incelemek isterseniz, yalnızca dosya adını komut satırına ekleyebilirsiniz.

git difftool -y -t meld 08f0f82^..08f0f82 myfile.c 

Açıkçası, bu interaktif kullanım için - sadece -U ile çok sayıda kullanırsanız değil komut dosyası için

+0

dosyasının uzun versiyonunda 'wc' çalıştırması gerekiyor. Program aracılığıyla bir web uygulamasından erişebilmek için buna ihtiyacım var. Üzgünüm, hemen temizlemedi. –

+0

Bu yanıt, satırlar kaldırılmadan tam bağlamlı bir fark elde etme sorununu bile gidermez. –

İlgili konular