Bagaimana saya harus menggunakan git diff untuk garis panjang?

235

Saya menjalankan git-diff pada file, tetapi perubahannya ada di akhir baris yang panjang.

Jika saya menggunakan tombol kursor untuk bergerak ke kanan, kode warna akan hilang — dan lebih buruk garisnya tidak berbaris — membuatnya lebih sulit untuk melacak perubahan.

Apakah ada cara untuk mencegah masalah itu atau membuat garis-garisnya dibungkus?

Saya menjalankan Git 1.5.5 via mingw32.

Peter Boughton
sumber
6
Anda mungkin ingin mencoba 'git diff --color-words', itu tidak menyelesaikan masalah gulir, tetapi perubahan kata dikelilingi oleh konteks pada satu baris!
kevinf
7
Menggunakan "lipatan" tampaknya bekerja dengan cukup baik:git diff --color-words | fold
Amy
@Amy saya sudah mencoba menggunakan foldtetapi menghilangkan warna. Karena Anda menentukan, --color-wordssaya asumsikan Anda berhasil meneruskan warna fold. Bagaimana?
Nero gris

Jawaban:

120

Tampilan output git diffditangani oleh pager apa pun yang Anda gunakan.

Umumnya, di Linux, lessakan digunakan.

Anda dapat memberi tahu git untuk menggunakan pager yang berbeda dengan mengatur GIT_PAGERvariabel lingkungan. Jika Anda tidak keberatan tentang paging (misalnya, terminal Anda memungkinkan Anda untuk menggulir ke belakang), Anda dapat mencoba mengatur secara eksplisit GIT_PAGERuntuk mengosongkannya agar berhenti menggunakan pager. Di bawah Linux:

$ GIT_PAGER='' git diff

Tanpa pager, garis akan terbungkus.

Jika terminal Anda tidak mendukung output berwarna, Anda juga dapat mematikannya menggunakan --no-colorargumen, atau meletakkan entri di bagian warna file konfigurasi git Anda.

$ GIT_PAGER='' git diff --no-color
SpoonMeiser
sumber
1
Saya dapat mengonfirmasi bahwa pengaturan GIT_PAGER menjadi kosong memang menyebabkan garis-garisnya terbungkus. Ini juga menyisipkan simbol membuatnya agak sulit dibaca, tetapi jika perlu saya dapat menemukan pager yang berbeda, jadi masih merupakan jawaban yang valid. :) Terima kasih.
Peter Boughton
1
Simbol apa yang ditambahkan yang membuatnya sulit dibaca? Saya mungkin dapat mengedit jawaban saya untuk menyelesaikan masalah itu juga.
SpoonMeiser
Sebagian besar "<- [m" untuk setiap baris baru (di mana <- adalah karakter panah tunggal), tetapi juga penanda di mana (saya pikir) setiap warna akan dimulai, seperti "<- [1m" dan "<- [32m".
Peter Boughton
1
Apakah argumen --no-color membantu sama sekali? Saya tidak yakin tentang karakter baris baru.
SpoonMeiser
Ya, terima kasih, yang mencegah semua konten yang tidak diinginkan muncul, jadi yang baris baru pasti terkait warna juga.
Peter Boughton
229

Atau jika Anda menggunakan kurang sebagai pager default, cukup ketik -Ssambil melihat diff untuk mengaktifkan kembali pembungkus.

seseorang45
sumber
60
tip terkait, gunakan --word-diffuntuk melihat highlight kode warna dari kata
Josh Diehl
5
hanya catatan untuk ini karena saya melihat beberapa orang memiliki masalah dengan itu, -S berbeda dari -s (pastikan Anda menekan shift + s)
longda
2
@JoshDiehl: Saya harap Anda tidak keberatan ... Saya pikir --word-diffbagian ini layak untuk memiliki jawabannya sendiri, karena menurut saya hal itu banyak membantu menyelesaikan masalah mendasar: mencari tahu apa yang berubah pada garis panjang. Jadi, saya membuatnya menjadi: stackoverflow.com/a/19253759/313756
lindes
1
Catatan: ini sepertinya tidak berfungsi pada OS X (maverick).
DilithiumMatrix
@ zhermes Ini berfungsi untuk saya di Mavericks, dengan kurang dari 418. Pastikan Anda mengetik -Sdengan huruf kapital S, bukan -s. Kurang menampilkan pesan "Lipat garis panjang (tekan RETURN)" di bagian bawah setelah saya mengetik -S, dan kemudian menekan Return memungkinkan pembungkus.
Rory O'Kane
115

Anda juga dapat menggunakan git configuntuk mengatur pager untuk dibungkus.

$ git config core.pager 'less -r' 

Menetapkan pengaturan pager untuk proyek saat ini.

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

Mengatur pager secara global untuk semua proyek

Shoan
sumber
3
dengan msysgit (1.8.1.msysgit.1) itu bekerja untuk saya menggunakan tanda kutip ganda -git config --global core.pager "less -r"
kerim
Ini membuat saya membungkus secara permanen dengan git diff pada OS X. terima kasih!
Thomson Comer
Itu bekerja, tapi saya tidak mengerti mengapa. Bisakah seseorang menjelaskan? man less, -rmengatakan apa-apa tentang pembungkus.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
@ThomsonComer '-r' berkaitan dengan menampilkan karakter kontrol di OS X ... Bagaimana Anda membuatnya bekerja?
DilithiumMatrix
Saya tidak ingat pasti sekarang. Tetapi menemukan beberapa tautan yang menjelaskan lebih lanjut: michael.otacoo.com/linux-2/avoid-escape-characters-in-git superuser.com/questions/366930/… unix.stackexchange.com/questions/19317/…
Shoan
49

Dengan pujian penuh kepada Josh Diehl dalam komentar untuk jawaban ini , saya tetap merasa ini seharusnya menjadi jawaban bagi dirinya sendiri, jadi menambahkannya:

Salah satu cara untuk menghadapi melihat perbedaan dalam antrean panjang adalah dengan menggunakan diff berorientasi kata. Ini dapat dilakukan dengan:

git diff --word-diff

Dalam hal ini, Anda akan mendapatkan output diff yang sangat berbeda, yang menunjukkan secara spesifik apa yang telah berubah dalam satu baris.

Misalnya, alih-alih mendapatkan yang seperti ini:

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

Anda mungkin mendapatkan sesuatu seperti ini:

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

Atau, dengan pewarnaan, alih-alih ini:

hasil dari hanya <code> git diff </code>

Anda mungkin mendapatkan ini:

hasil dari <code> git diff --word-diff </code>

Sekarang, jika Anda membandingkan garis yang sangat panjang, Anda mungkin masih memiliki masalah dengan situasi pager yang Anda jelaskan sebelumnya, dan yang telah diatasi, tampaknya untuk kepuasan, di jawaban lain. Semoga ini memberi Anda alat baru, meskipun, untuk lebih mudah mengidentifikasi apa yang telah berubah di telepon.

lindes
sumber
6
Ada beberapa pilihan untuk --word-diff: color, plain, dan porcelain. Juga, seseorang dapat mengubah regex untuk batas kata dengan --word-diff-regex. Standarnya tampaknya \S+. ( v2.1.1 )
Michael - Di mana Clay Shirky
3
--color-wordstampaknya menjadi singkatan --word-diff=color, yang bagus ketika Anda hanya melihat diff, tidak membagikannya.
CivFan
Ah, ini menarik dan berpotensi sangat bermanfaat. Terima kasih telah berbagi!
Darragh Enright
1
Saya suka --word-diff=porcelainlebih baik daripada --word-diffkarena porcelainakan mengatur perubahan pada baris yang terpisah, sedangkan --word-diffmenempatkan perubahan sejajar. Garis yang terpisah memungkinkan Anda untuk melihat perbedaan dengan lebih mudah ketika perbedaannya halus.
wisbucky
1
Mengubah hidup untuk file LaTeX!
6005
30

Untuk menggunakan pager lebih sedikit dan membuat pembungkus garis permanen, Anda cukup mengaktifkan opsi flip-long-line:

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

Dengan cara ini Anda tidak perlu mengetiknya saat menggunakan kurang.

Bersulang

Daniel Montezano
sumber
Bekerja untuk saya di OS X 10.9.5. Terima kasih!
Jay Taylor
Demikian pula, jika Anda ingin MENONAKTIFKAN pembungkus baris saat membaca Git diffs, pengaturannya juga sama:git config --global core.pager 'less -S
Topher Hunt
19

Cari saja yang ini di Google. GIT_PAGER='less -r'bekerja untukku

ikan bernyanyi
sumber
9
Bahkan lebih baik (untuk saya): less -R(Sebenarnya, saya menggunakan less -eiFRSX, yang memecahkan masalah warna dan garis-membungkus juga.)
cdunn2001
2
less -R seperti -r, tetapi hanya sekuens escape "color" ANSI yang dihasilkan dalam bentuk "raw". Tidak seperti -r, tampilan layar dipertahankan dengan benar dalam banyak kasus. (kurang man)
richk
19

Mac OSX: Tidak ada jawaban lain kecuali '45 'milik seseorang sementara kurang berjalan berfungsi untuk saya. Dibutuhkan yang berikut untuk membuat pembungkus kata tetap ada:

git config --global core.pager 'less -+$LESS -FRX'
John Lemberger
sumber
Ini juga berhasil bagi saya, tetapi saya tidak mengerti mengapa. Apa yang -+$LESSdilakukan parameter? Kecuali git yang mendefinisikannya, variabel lingkungan KURANG saya bahkan tidak disetel.
jakar
3
@ jakar: maka tidak apa-apa. Di beberapa lingkungan, $LESSdiatur ke beberapa nilai (misalnya oleh a .loginatau a.profile atau sesuatu), dan opsi itu, saya pikir, hanya menambahkan default, dan kemudian menambahkan -FRXdi atas itu.
naught101
Ini tidak berfungsi untuk saya di OS X Mavericks,$LESS tidak terdefinisi.
DilithiumMatrix
naught101 benar bahwa + - $ KURANG hanya memasukkan pengaturan apa pun di .login atau .profile (jika ada). Ini berfungsi dengan baik pada Mavericks untuk saya, tetapi Anda bisa menghilangkannya, jika itu menyebabkan masalah.
John Lemberger
5

Ketika Anda menggunakan "git diff" dan menampilkan beberapa halaman (Anda lihat ":" di akhir halaman) dalam hal ini Anda dapat mengetik "-S" dan tekan enter. (S harus menjadi modal). itu akan beralih lipat garis panjang.

Amin
sumber
ini jauh lebih mudah daripada harus mengacaukan pengaturan apa pun
chharvey
4

Noone menunjukkan ini sampai sekarang. Cukup sederhana untuk diingat dan tidak ada konfigurasi tambahan yang perlu dilakukan di git config

git diff --color | less -R
infoclogged
sumber
Sejauh ini yang paling sederhana dari semua jawaban di halaman ini. Lingkungan saya - Oracle Linux 7.6. git diff --color | less -FRuntuk perubahan kecil saat tidak perlu gulir
Rakesh N
3

Anda cukup menyalurkan output git diff ke lebih banyak:

git diff | more
AnonTidbits
sumber
3

Bukan solusi yang sempurna, tetapi gitkdan git-guikeduanya dapat menampilkan informasi ini, dan memiliki scrollbar.

Peter Boughton
sumber
1

daftar konfigurasi saat ini / default:

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

kemudian perbarui dan tinggalkan -S seperti:

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

-S: Menyebabkan garis yang lebih panjang dari lebar layar untuk dipotong daripada dilipat.

pengguna5870226
sumber
-1

Ketika dalam kesulitan, saya sering menggunakan DiffMerge. Alat diff luar biasa yang memiliki in-line highlighting Juga, dalam versi terbaru mereka menambahkan mode untuk memiliki mode horizontal.

Saya belum bisa mengkonfigurasi git untuk menggunakannya. Jadi saya harus mencari-cari kedua versi file terlebih dahulu.

webmat
sumber