Git diff'i uzun çizgiler için nasıl kullanmalıyım?


235

Koşuyorum git-diff bir dosya üzerinde, ama değişim uzun bir çizginin sonundadır.

Sağa hareket etmek için imleç tuşlarını kullanırsam, renk kodlamasını kaybeder ve satırların sıralanması kötüleşir - bu da değişikliği izlemeyi zorlaştırır.

Bu sorunu önlemenin veya satırları basitçe sarmanın bir yolu var mı?

Git 1.5.5'i mingw32 üzerinden çalıştırıyorum.


6
'Git diff --color-words' denemek isteyebilirsiniz, kaydırma problemini çözmez, ancak kelime değişiklikleri tek bir satırda bağlamla çevrilidir!
kevinf

7
"Fold" kullanmak git diff --color-words | fold
Amy

@Amy kullanmayı denedim foldama rengi kaldırıyor. Belirttiğiniz --color-wordsiçin renkleri aktarmayı başardığınızı varsayıyorum fold. Nasıl?
Nero gris

Yanıtlar:


120

Çıkış ekran git diff , kullandığınız çağrı cihazı tarafından gerçekleştirilir.

Genellikle Linux altında lesskullanılır.

Git'e GIT_PAGERortam değişkenini ayarlayarak farklı bir çağrı cihazı kullanmasını söyleyebilirsiniz . Disk belleği hakkında sorun olmazsa (örneğin, terminaliniz geri gitmenize izin verir) GIT_PAGERbir çağrı cihazı kullanarak durdurmak için açıkça boş ayarlamayı deneyebilirsiniz . Linux altında:

$ GIT_PAGER='' git diff

Çağrı cihazı olmadan, çizgiler sarılır.

Terminaliniz renkli çıktıyı desteklemiyorsa, --no-colorargümanı kullanarak veya git config dosyanızın renk bölümüne bir giriş koyarak da bunu kapatabilirsiniz .

$ GIT_PAGER='' git diff --no-color

1
GIT_PAGER ayarının boş olarak ayarlanmasının satırların sarılmasına neden olduğunu doğrulayabilirim. Ayrıca, okumayı biraz zorlaştıran semboller ekler, ancak gerekirse farklı bir çağrı cihazı bulabilirim, bu yüzden hala geçerli bir cevap. :) Teşekkürler.
Peter Boughton

1
Okumayı zorlaştıran hangi sembolleri ekliyor? Bu sorunu çözmek için cevabımı da düzenleyebilirim.
SpoonMeiser

Çoğunlukla her yeni satır için "<- [m" (burada <- tek oklu bir karakterdi), aynı zamanda her rengin "<- [1m" ve "<- [32m" gibi başladığı (bence) işaretçiler.
Peter Boughton

1
--No-color argümanı hiç yardımcı oluyor mu? Yeni satır karakterlerinden emin değilim.
SpoonMeiser

Evet, teşekkürler, tüm istenmeyen içeriğin görünmesini engeller, bu nedenle yeni satırların da renkle ilgili olması gerekir.
Peter Boughton

229

Veya varsayılan çağrı cihazı olarak daha az -Skullanırsanız, diff'i daha az yeniden etkinleştirmek için diff'i görüntülerken yazmanız yeterlidir.


60
İlgili ucu, kullanmak --word-diffrenk kodlu değişti kelimelerin vurgulayarak görmek
Josh Diehl

5
bazı insanlar onunla sorunları olduğunu gördüm beri bu sadece bir not, -S farklı -s (shift + s vurmak emin olun)
longda

2
@JoshDiehl: Umarım umursamazsınız ... Sanırım bu konuda --word-diffkendi cevabını almayı hak ediyor, çünkü altta yatan sorunun çözülmesine yardımcı olmak için çok şey yapıyor: uzun bir çizgide neyin değiştiğini anlamak. Yani, ben bir tane yaptım: stackoverflow.com/a/19253759/313756
lindes

1
Not: Bu, OS X (mavericks) üzerinde çalışmıyor gibi görünüyor.
DilithiumMatrix

@zhermes Mavericks'te benim için daha az 418 ile çalışıyor. S harfi ile yazdığınızdan emin olun -S, değil -s. Less yazdıktan sonra alt kısımda “Uzun satırları katla (RETURN tuşuna basın)” mesajını görüntüler -Sve ardından Return tuşuna basmak kaydırma işlemini etkinleştirir.
Rory O'Kane

115

git configSarmak için çağrı cihazını ayarlamak için de kullanabilirsiniz .

$ git config core.pager 'less -r' 

Geçerli proje için çağrı cihazı ayarını yapar.

$ git config --global core.pager 'less -r' 

Tüm projeler için çağrı cihazını global olarak ayarlar


3
msysgit (1.8.1.msysgit.1) ile çift tırnak kullanarak benim için çalıştı -git config --global core.pager "less -r"
kerim

Bu beni OS X üzerinde git diff ile kalıcı olarak kaydırdı. Teşekkürler!
Thomson Comer

Çalışıyor, ama nedenini anlamıyorum. Birisi açıklayabilir mi? man less, -rsarma hakkında hiçbir şey söylemez.
Ciro Santilli 法轮功 at 病 六四 事件 法轮功

@ThomsonComer '-r', OS X'te kontrol karakterlerini göstermeyle ilgilidir ... Bunu nasıl elde ettiniz?
DilithiumMatrix

Artık kesin olarak hatırlayamıyorum. Ancak daha fazla açıklayan bazı bağlantılar bulundu: michael.otacoo.com/linux-2/avoid-escape-characters-in-git superuser.com/questions/366930/… unix.stackexchange.com/questions/19317/…
Shoan

49

Tam itimat ile Josh Diehl de bir yorum için bu cevap , ben yine de öyle ekleyerek, bu başlı başına bir cevap olmalı gibi hissediyorum:

Uzun çizgilerdeki farklılıkları görmenin bir yolu, kelime odaklı bir fark kullanmaktır. Bu, aşağıdakilerle yapılabilir:

git diff --word-diff

Bu durumda, özellikle bir satırda nelerin değiştiğini gösteren önemli ölçüde farklı bir fark çıkışı elde edersiniz.

Örneğin, böyle bir şey almak yerine:

diff --git a/test-file.txt b/test-file.txt
index 19e6adf..eb6bb81 100644
--- a/test-file.txt
+++ b/test-file.txt
@@ -1 +1 @@
-this is a short line
+this is a slightly longer line

Bunun gibi bir şey alabilirsiniz:

diff --git a/test-file.txt b/test-file.txt
index 19e6adf..eb6bb81 100644
--- a/test-file.txt
+++ b/test-file.txt
@@ -1 +1 @@
this is a [-short-]{+slightly longer+} line

Veya bunun yerine renklendirme ile:

sadece <code> git diff </code> 'nin sonucu

Bunu alabilirsiniz:

<code> sonucu git git --word-diff </code>

Şimdi, gerçekten uzun bir çizgiyi karşılaştırıyorsanız, başlangıçta tanımladığınız ve görünüşe göre tatmin edici bir şekilde diğer yanıtlarda ele alınan çağrı cihazı durumuyla ilgili sorunlar yaşayabilirsiniz. Umarım bu, hatta neyin değiştiğini daha kolay tanımlamak için yeni bir araç sağlar.


6
Orada birkaç seçenek içindir --word-diff: color, plain, ve porcelain. Ayrıca, kelime sınırları için normal ifade ile de değiştirilebilir --word-diff-regex. Varsayılan olarak görünür \S+. ( v2.1.1 )
Michael - Clay Shirky

3
--color-wordsiçin kestirme görünüyor --word-diff=color, bu sadece farkını görüntülerken değil, paylaşırken güzel.
CivFan

Ah, bu ilginç ve potansiyel olarak çok faydalı. Paylaşım için teşekkürler!
Darragh Enright

1
severim --word-diff=porcelain daha iyi --word-diffçünkü porcelain, oysa ayrı satırlara değişiklikleri sıraya olacak --word-diffdeğişiklikleri yerinde koydu. Ayrı çizgiler, farklar ince olduğunda farkları daha kolay görmenizi sağlar.
wisbucky

1
LaTeX dosyaları için hayat değişiyor!
6005

30

Çağrı cihazı olarak daha az kullanmak ve satır kaydırmayı kalıcı yapmak için katlama uzun satırları seçeneğini etkinleştirmeniz yeterlidir:

git config --global core.pager 'less -+S'

Bu şekilde daha az kullanırken yazmanıza gerek kalmaz.

Şerefe


OS X 10.9.5'de benim için çalıştı. Teşekkürler!
Jay Taylor

Benzer şekilde, Git diffs okunurken satır kaydırmayı devre dışı bırakmak istiyorsanız, ayar git config --global core.pager 'less -S
benzerdir

19

Sadece bu kadar googled. GIT_PAGER='less -r'benim için çalışıyor


9
Daha da iyisi (benim için): less -R(Aslında, less -eiFRSXrenk ve çizgi sarma sorunlarını da çözen kullanıyorum .)
cdunn2001

2
less -R, -r gibidir, ancak yalnızca ANSI "renk" kaçış dizileri "ham" formda çıkar. -R'den farklı olarak, ekran görünümü çoğu durumda doğru şekilde korunur. (daha az erkek)
richk

19

Mac OSX: Daha az çalışırken birisi45'in '-S' haricindeki diğer cevapların hiçbiri benim için çalışmadı. Sözcük kaydırmayı kalıcı hale getirmek için aşağıdakileri aldı:

git config --global core.pager 'less -+$LESS -FRX'

Bu benim için de işe yaradı, ama nedenini anlamıyorum. -+$LESSParametre ne yapıyor? Git bunu tanımlamadığı sürece, LESS ortam değişkenim bile ayarlanmamış.
jakar

3
@ jakar: o zaman hiçbir şey yapmaz. Bazı ortamlarda, $LESSbazı değerlere (örneğin, bir .loginveya bir .profileveya bir tarafından) ayarlanır ve bu seçenek, bence, sadece varsayılanları ekler ve sonra -FRXbunların üstüne ekler .
naught101

Bu etmedi OS X Mavericks Benim için çalışıyorsun, $LESStanımlanmamış.
DilithiumMatrix

naught101, + - $ LESS öğesinin yalnızca .login veya .profile (varsa) ayarlarını içerir. Benim için Mavericks üzerinde iyi çalışıyor, ancak sorunlara neden olursa, atlayabilirsiniz.
John Lemberger



5

"Git diff" komutunu kullanırken ve birkaç sayfa gösteriyorsa (sayfanın sonunda ":" ifadesini görürsünüz) bu durumda "-S" yazıp enter tuşuna basabilirsiniz. (S, büyük harf olmalıdır). uzun çizgileri katlar.


Bu, herhangi bir ayar ile
uğraşmaktan

4

Kimse bunu şimdiye kadar işaret etmedi. Hatırlaması oldukça basit ve git config'te ekstra yapılandırma yapılması gerekmiyor

git diff --color | less -R

Bu sayfadaki tüm cevapların açık ara en basitidir. Ortamım - Oracle Linux 7.6. git diff --color | less -FRkaydırma gerekmediğinde küçük değişiklikler için
Rakesh N

3

Git farkının çıktısını daha fazlasına bağlayabilirsiniz:

git diff | more

3

Değil mükemmel bir çözümdür, ama gitkve git-guihem bu bilgiyi göstermek ve kaydırma çubukları olabilir.


1

geçerli / varsayılan yapılandırmayı listeler:

  $ git config --global core.pager  
    less -FXRS -x2

sonra -S'yi güncelleyin ve dışarıda bırakın:

  $ git config --global core.pager 'less -FXR -x2'

-S: Ekran genişliğinden daha uzun satırların katlanmak yerine kesilmesine neden olur.


-1

Başım beladayken, genellikle DiffMerge'e başvururum. Sıralı fark vurgulama özelliğine sahip mükemmel fark aracı. Ayrıca, en son sürümlerde yatay moda sahip bir mod eklediler.

Git'i kullanmak için yapılandıramamıştım. Bu yüzden önce dosyanın her iki sürümünü de almak için uğraşmak zorundayım.

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.