Ketika saya mengetik "git diff", saya ingin melihat diff berdampingan, seperti dengan "diff -y", atau ingin menampilkan diff dalam alat diff interaktif seperti "kdiff3". Bagaimana ini bisa dilakukan?
163
Ketika saya mengetik "git diff", saya ingin melihat diff berdampingan, seperti dengan "diff -y", atau ingin menampilkan diff dalam alat diff interaktif seperti "kdiff3". Bagaimana ini bisa dilakukan?
Jawaban:
Meskipun Git memiliki implementasi internal diff, Anda dapat mengatur alat eksternal sebagai gantinya.
Ada dua cara berbeda untuk menentukan alat diff eksternal:
GIT_EXTERNAL_DIFF
danGIT_DIFF_OPTS
variabel lingkungan.git config
Lihat juga:
git diff --help
Ketika melakukan a
git diff
, Git memeriksa pengaturan variabel lingkungan di atas dan.gitconfig
file -nya .Secara default, Git meneruskan tujuh argumen berikut ke program diff:
Anda biasanya hanya memerlukan parameter file lama dan file baru. Tentu saja sebagian besar alat diff hanya mengambil dua nama file sebagai argumen. Ini berarti bahwa Anda perlu menulis skrip wrapper kecil, yang mengambil argumen yang disediakan oleh Git ke skrip, dan menyerahkannya ke program git eksternal pilihan Anda.
Katakanlah Anda meletakkan skrip pembungkus Anda di bawah
~/scripts/my_diff.sh
:Anda kemudian perlu membuat skrip itu dapat dieksekusi:
Anda kemudian perlu memberi tahu Git bagaimana dan di mana menemukan skrip pembungkus khusus Anda. Anda memiliki tiga pilihan cara melakukannya: (Saya lebih suka mengedit file .gitconfig)
Menggunakan
GIT_EXTERNAL_DIFF
,GIT_DIFF_OPTS
misalnya dalam file .bashrc atau .bash_profile Anda, Anda dapat mengatur:
Menggunakan
git config
gunakan "git config" untuk menentukan di mana skrip wrapper Anda dapat ditemukan:
Mengedit
~/.gitconfig
file AndaAnda dapat mengedit
~/.gitconfig
file Anda untuk menambahkan baris-baris ini:catatan:
Demikian pula untuk menginstal alat diff khusus Anda, Anda juga dapat menginstal alat gabungan kustom, yang bisa menjadi alat penggabungan visual untuk lebih membantu memvisualisasikan gabungan. (lihat halaman progit.org)
Lihat: http://fredpalma.com/518/visual-diff-and-merge-tool/ dan https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration
sumber
meld
,?meld
versi ini dikonfigurasikan untuk melakukan direktori diff, di mana saya dapat memilih file mana yang ingin saya lihat? Saat ini menjalankanmeld
perintah terpisah untuk setiap file, dan saya harus berhentimeld
untuk melihat file berikutnya. Saya lebih sukameld
menunjukkan daftar direktori file yang diubah seperti itu berperilaku ketikameld
digunakan dari Mercurial.Coba git difftool
Gunakan
git difftool
sebagai gantigit diff
. Anda tidak akan pernah kembali.UPDATE untuk menambahkan contoh penggunaan:
Berikut ini tautan ke aliran stackover lain yang membahas
git difftool
: Bagaimana cara melihat output 'git diff' dengan alat / penampil diff pilihan saya?Untuk versi yang lebih baru
git
,difftool
perintah ini mendukung banyak perangkat eksternal yang berbeda. Misalnyavimdiff
didukung otomatis dan dapat dibuka dari baris perintah dengan:Alat diff eksternal lain yang didukung tercantum di
git difftool --tool-help
sini adalah contoh keluaran:sumber
This message is displayed because 'diff.tool' is not configured.
. Mungkin memperbarui jawaban dengan minimal cara mengkonfigurasi hal ini, sehingga ia menampilkan berdampingan di terminal yang berbeda, apa yang diminta OP? Alat GUI sangat tidak berguna di server jauh di mana Anda terhubung menggunakan ssh.git difftool
denganvimdiff
tidak selalu mengatur dua file / buffer dengan benar.git difftool -y
untuk mencegah tkdiff promptgit difftool
di Windows & Linux: stackoverflow.com/a/48979939/4561887Anda juga bisa mencoba
git diff --word-diff
. Ini tidak persis berdampingan, tapi entah bagaimana lebih baik, jadi Anda mungkin lebih suka itu daripada kebutuhan berdampingan Anda yang sebenarnya.sumber
git diff --word-diff=color
--word-diff=color
memberiku kesalahan opsi yang tidak valid. Versi apa itu diperkenalkan?git diff --color-words
tidak bekerja.git diff --color-words
adalah cara untuk menggunakan versi git modern.ydiff
Dahulu disebut
cdiff
, alat ini dapat menampilkan berdampingan , tambahan , dan warna - warni .Alih-alih melakukan
git diff
, lakukan:Ini akan diluncurkan
ydiff
dalam mode tampilan berdampingan untuk masing-masing file dengan perbedaan.Instal dengan:
-atau-
Untuk
git log
, Anda dapat menggunakan:-w0
otomatis mendeteksi lebar terminal Anda. Lihatydiff
halaman repositori GitHub untuk detail dan demo.Diuji dalam Git 2.18.0, ydiff 1.1.
sumber
git diff | cdiff -s
dengan icdiff?ydiff -s
dari ruang kerja git / svn / hg, Anda tidak perlu menyalurkannya.cd <git repo>
dan kemudian jalankanydiff -ls <path/to/file>
Anda dapat melakukan berdampingan
diff
menggunakansdiff
sebagai berikut:di mana
HEAD^
adalah contoh yang harus Anda ganti dengan apa pun yang ingin Anda lawan.Saya menemukan solusi ini di sini di mana ada beberapa saran lain juga. Namun, jawaban ini adalah pertanyaan OP secara ringkas dan jelas.
Lihat man git-difftool untuk penjelasan argumennya.
Mengambil komentar di papan tulis, Anda dapat membuat
git sdiff
perintah praktis dengan menulis skrip yang dapat dieksekusi berikut:Simpan sebagai
/usr/bin/git-sdiff
danchmod -x
itu. Maka Anda akan dapat melakukan ini:sumber
tput cols
sebaliknya, misalnya:git difftool -x "sdiff -s -w $(tput cols)"
.maka cukup:
sumber
Jika Anda ingin melihat perbedaan berdampingan di peramban tanpa melibatkan GitHub, Anda mungkin menikmati git webdiff , pengganti drop-in untuk
git diff
:Ini menawarkan sejumlah keunggulan dibandingkan difftools GUI tradisional seperti
tkdiff
dalam hal ini dapat memberi Anda sorotan sintaks dan menampilkan diff gambar.Baca lebih lanjut di sini .
sumber
Saya menggunakan colordiff .
Di Mac OS X, instal dengan
Di Linux mungkin
apt get install colordiff
atau sesuatu seperti itu, tergantung pada distro Anda.Kemudian:
Atau buat alias
Maka Anda bisa menggunakannya
Saya menyebutnya "diffy" karena
diff -y
merupakan diff berdampingan dalam unix. Colordiff juga menambahkan warna, yang lebih bagus. Pada opsi-ydw
,y
is for the side-by-side,w
is untuk mengabaikan spasi putih, dand
is untuk menghasilkan diff minimal (biasanya Anda mendapatkan hasil yang lebih baik sebagai diff)sumber
-y
untuk melewatiLaunch 'colordiff' [Y/n]:
prompt.git alias diffy "difftool --extcmd=\"colordiff -ydw\""
? Bukankah seharusnya begitugit config --global alias.diffy "difftool --extcmd=\"colordiff -ydw\""
?Untuk unix, mengkombinasikan adil
git
dan built-indiff
:Tentu saja, Anda dapat mengganti HEAD dengan referensi git lainnya, dan Anda mungkin ingin menambahkan sesuatu seperti
-W 170
perintah diff.Ini mengasumsikan bahwa Anda hanya membandingkan konten direktori Anda dengan komit yang lalu. Membandingkan antara dua komitmen lebih kompleks. Jika shell
bash
Anda, Anda dapat menggunakan "proses substitusi":di mana
REF1
danREF2
git referensi - tag, cabang atau hash.sumber
Saya pribadi sangat suka icdiff !
Jika Anda berada di
Mac OS X
denganHomeBrew
, hanya melakukanbrew install icdiff
.Untuk mendapatkan label file dengan benar, plus fitur keren lainnya, saya miliki di
~/.gitconfig
:Dan saya menggunakannya seperti:
git difftool
sumber
Pertanyaan ini muncul ketika saya sedang mencari cara cepat untuk menggunakan git builtin cara untuk menemukan perbedaan. Kriteria solusi saya:
Saya menemukan jawaban ini untuk mendapatkan warna dalam git.
Untuk mendapatkan berdampingan diff bukan garis diff saya tweak mb14 's sangat baik jawaban atas pertanyaan ini dengan parameter berikut:
Jika Anda tidak menyukai ekstra [- atau {+ opsi
--word-diff=color
dapat digunakan.Itu membantu untuk mendapatkan perbandingan yang tepat dengan teks json dan xml dan kode java.
Singkatnya,
--word-diff-regex
opsi memiliki visibilitas bermanfaat bersama dengan pengaturan warna untuk mendapatkan pengalaman kode sumber berdampingan berwarna dibandingkan dengan diff garis standar, ketika menelusuri file besar dengan perubahan garis kecil.sumber
Beberapa yang lain telah menyebutkan cdiff untuk git berdampingan secara berdampingan tetapi tidak ada yang memberikan implementasi penuh darinya.
Setup cdiff:
Edit ~ / .gitconfig menyisipkan baris ini:
Pager off diperlukan agar cdiff dapat bekerja dengan Diff, ini pada dasarnya pager, jadi ini tidak masalah. Difftool akan berfungsi terlepas dari pengaturan ini.
Alias acara diperlukan karena git show hanya mendukung alat diff eksternal melalui argumen.
Tanda '#' pada akhir perintah eksternal diff adalah penting. Perintah diff Git menambahkan $ @ (semua variabel diff yang tersedia) ke perintah diff, tetapi kami hanya menginginkan dua nama file. Jadi kami memanggil keduanya secara eksplisit dengan $ 2 dan $ 5, dan kemudian menyembunyikan $ @ di belakang komentar yang jika tidak akan membingungkan sdiff. Menghasilkan kesalahan yang terlihat seperti:
Perintah Git yang sekarang menghasilkan pembedaan berdampingan:
Penggunaan Cdiff:
Anda sekarang memiliki diff berdampingan melalui git diff dan difftool. Dan Anda memiliki kode sumber python cdiff untuk kustomisasi pengguna listrik jika Anda membutuhkannya.
sumber
Inilah pendekatannya. Jika Anda menyalurkan lebih sedikit, lebar xterm diatur ke 80, yang tidak terlalu panas. Tetapi jika Anda melanjutkan perintah dengan, misalnya COLS = 210, Anda dapat memanfaatkan xterm Anda yang diperluas.
sumber
Buka Intellij IDEA , pilih satu atau beberapa komit di jendela alat "Kontrol Versi", telusuri file yang diubah, dan klik dua kali untuk memeriksa perubahan berdampingan untuk setiap file.
Dengan peluncur baris perintah yang dibundel, Anda dapat membawa IDEA ke mana saja dengan sederhana
idea some/path
sumber
Ada banyak jawaban bagus di utas ini. Solusi saya untuk masalah ini adalah menulis naskah.
Beri nama 'git-scriptname' ini (dan jadikan itu dapat dieksekusi dan letakkan di PATH Anda, seperti skrip apa pun), dan Anda dapat menjalankannya seperti perintah git normal dengan menjalankan
Fungsionalitas aktual hanyalah baris terakhir. Inilah sumbernya:
sumber
Ini mungkin solusi yang agak terbatas, tetapi apakah pekerjaan menggunakan perintah sistem
diff
tanpa alat eksternal:--suppress-common-lines
(jika Andadiff
mendukung opsi).diff
spidol biasa--width=term-width
; di Bash bisa mendapatkan lebar sebagai$COLUMNS
atautput cols
.Ini juga dapat dibungkus dengan skrip pembantu helit untuk kenyamanan lebih, misalnya, penggunaan seperti ini:
sumber