Proyek Open Source Trac memiliki penyorot diff yang sangat baik - ini menyoroti baris yang diubah dan byte yang diubah di setiap baris yang diubah! Lihat di sini atau di sini untuk contoh.
Apakah ada cara untuk menggunakan sorotan warna yang sama (yaitu mengubah baris dan mengubah byte juga ) di terminal bash git
,, atau vim
untuk keluaran diff (file-patch)?
Jawaban:
The
diff-highlight
Perl contrib Script menghasilkan output sehingga mirip dengan screenshot Trac bahwa itu adalah mungkin bahwa Trac yang menggunakannya:Instal dengan:
Pindahkan file
diff-highlight
ke~/bin/
direktori (atau di mana pun Anda$PATH
berada), lalu tambahkan yang berikut ini ke~/.gitconfig
:Pemasangan salin tempel tunggal yang disarankan oleh @cirosantilli:
sumber
git add -p
. Harap juga tambahkan:git config --global interactive.diffFilter diff-highlight
Saat menggunakan
git diff
ataugit log
dan mungkin yang lain, gunakan opsi--word-diff=color
(ada juga mode lain untuk kata diffs BTW)sumber
--word-diff=color
benar-benar lebih baik (terutama dengangit config color.diff.old "red reverse"
dangit config color.diff.new "green reverse"
), tetapi bukan itu yang saya inginkan :(git add --patch
: stackoverflow.com/questions/10873882/…diff-highlight
adalah bahwa ia bekerja dengan baik untuk kata diffs dan line diffs.diff-so-fancy
adalahdiff
-highlighter yang dirancang untuk bola mata manusia.Ini menghapus bagian depan
+
/-
yang mengganggu untuk potong / tempel dan membuat bagian yang jelas di antara file.Berwarna
git
(kiri) vsdiff-so-fancy
(kanan - perhatikan sorotan level karakter):Jika Anda menginginkan
diff-so-fancy
output (sisi kanan) tetapi tidak dibatasi ke file dalamgit
repositori, tambahkan fungsi berikut ke Anda.bashrc
untuk menggunakannya pada file apa pun:Misalnya:
Penyorotan level karakter dan
diff
format standarJika Anda tidak menyukai pemformatan non-standar
diff-so-fancy
, tetapi masih menginginkangit
penyorotan tingkat karakter , gunakandiff-highlight
yang akan mengambilgit
keluaran dan menghasilkandiff
keluaran format standar yang sangat cantik :Untuk menggunakannya secara default dari
git
, tambahkan ke.gitconfig
:The
[pager]
Bagian memberitahugit
pipa outputnya sudah colourised untukdiff-highlight
yang colourises di tingkat karakter, dan kemudian halaman output kurang (jika diperlukan), bukan hanya menggunakan defaultless
.sumber
gitconfig
opsi ini ?dsf()
.Perilaku yang Anda inginkan sekarang tersedia di git itu sendiri (seperti yang ditunjukkan dalam komentar oleh naught101). Untuk mengaktifkannya Anda perlu mengatur pager Anda ke
di mana
/usr/share/doc/git/contrib/diff-highlight/diff-highlight
lokasi skrip stabilo di Ubuntu 13.10 (Saya tidak tahu mengapa itu ada didoc
folder). Jika tidak ada di sistem Anda, coba gunakanlocate diff-highlight
untuk menemukannya. Perhatikan bahwa skrip penyorotan tidak dapat dieksekusi (setidaknya di mesin saya), oleh karena itu persyaratan untukperl
.Untuk selalu menggunakan penyorot untuk berbagai perintah seperti diff, tambahkan saja yang berikut ini ke
~/.gitconfig
file Anda :Saya menambahkan ini sebagai jawaban baru komentar naught101 dikubur dan karena pengaturannya tidak sepele seperti yang seharusnya dan setidaknya pada versi Ubuntu yang saya memiliki instruksi di README tidak berfungsi.
sumber
git add -p
(mode interaktif). Saya tidak tahu bagaimana itu bisa diperbaiki, hanya menambahkan tambahkan ke daftar menyebabkannya hang.git config interactive.diffFilter diff-highlight
diff-highlight
tidak ada di jalur saya jadi saya harus menemukannya terlebih dahulu. Detail jawaban saya di bawah.Sebuah utilitas untuk diff berbasis byte telah didistribusikan dengan Git resmi sejak v1.7.8 1 . Anda hanya perlu mencari di mana itu diinstal pada mesin Anda dan mengaktifkannya.
Temukan di mana Git diinstal
/usr/local/opt/git
cd / && pwd -W
untuk menemukan direktori instal.ll $(which git)
ataulocate git
harus membantu.Tautkan
diff-highlight
ke direktori bin Anda sehingga PATH Anda dapat menemukannyaGIT_HOME='/usr/local/opt/git/' # Use the value from the first step. ln -s "${GIT_HOME}/share/git-core/contrib/diff-highlight/diff-highlight" \ '/usr/local/bin/diff-highlight'
Aktifkan di konfigurasi Git Anda
git config --global interactive.diffFilter diff-highlight # Use on interactive prompts git config --global pager.diff "diff-highlight | less" # Use on git diff git config --global pager.log "diff-highlight | less" # Use on git log git config --global pager.show "diff-highlight | less" # Use on git show
1 Ini adalah versi v1.7.8 , tetapi banyak perubahan telah dilakukan sejak saat itu.
sumber
which git
mengharuskannya untuk berada di PATH di tempat pertama sehingga tidak akan berfungsi jika tidak :-)diff-highlight
, ia tidak benar-benar menginstalnya , jadi langkah symlink memang diperlukan (setidaknya di macOS). Jika Anda merasa itu tidak perlu untuk platform Anda, sekali lagi jangan ragu untuk memperbarui jawabannya. Sementara itu,which git
biasanya tidak bekerja, karena Git tidak menginstalgit
suatu tempat biner di jalan..perl
. Kompilasinya sepele: jalankan sajasudo make
didiff-highlight
direktori.Saya menggunakan
--color-words
opsi dan berfungsi dengan baik untuk saya:sumber
seperti yang dikatakan @dshepherd :
Tetapi
diff-highlight
terletak di DOC dan tidak tersedia dari shell.Untuk menginstal
diff-highlight
ke~/bin
direktori Anda , ikuti langkah selanjutnya (Ini akan menghemat pengetikan Anda):Kemudian konfigurasikan Anda
.gitconfig
sebagai dokumen resmi yang mengatakan:UPD
Anda juga dapat mencoba berikutnya yang terbaru
git
tanpa instalasi apa pun:Lebih kompleks:
sumber
Emacs memiliki fungsi ediff-patch-buffer yang akan memenuhi kebutuhan Anda.
Buka file yang belum di-patch di emacs ketik ESC-x, ediff-patch-buffer.
Ikuti petunjuknya dan Anda akan melihat perbandingan yang disorot dari versi patch dan asli file Anda.
Sesuai komentar Anda, berikut ini akan memberi Anda solusi bash yang hanya membutuhkan dwdiff:
sumber
colordiff -u <(patch original_file -i patch_file -o -) <(cat original_file)
tetapi ini hanya akan menyoroti baris yang diubah, bukan gigitan ...dwdiff -c --diff-input diff_file
Diffy
GitLab menggunakan Diffy https://github.com/samg/diffy (Ruby) untuk mencapai keluaran yang mirip dengan GitHub dan diff-highlight:
Diffy membuat perbedaan itu sendiri menggunakan algoritme yang sama dengan iklan Git, dan mendukung berbagai jenis keluaran, termasuk keluaran HTML yang digunakan GitLab:
Keluaran:
Perhatikan bagaimana
strong
ditambahkan ke byte yang diubah.sumber
Ya, Vim melakukan ini termasuk penyorotan teks yang diubah dalam satu baris.
Lihat
:h diff
dan:h 08.7
untuk rincian lebih lanjut tentang bagaimana cara menyebarkan file.Vim menggunakan algoritma yang cukup sederhana untuk penyorotannya. Ini mencari baris untuk karakter pertama yang diubah, dan kemudian karakter yang terakhir diubah, dan hanya menyoroti semua karakter di antara mereka.
Ini berarti Anda tidak dapat memiliki beberapa sorotan per baris - banyak keputusan desain di Vim memprioritaskan efisiensi.
sumber
vimdiff file1 file2
akan menampilkan perbedaan karakter antara dua file.vimdiff adalah alat diff yang disertakan dalam vim. (Vim seharusnya telah dikompilasi dengan opsi + diff, untuk memastikan Anda dapat memeriksanya
:version
)Anda juga dapat meluncurkannya dari dalam vim. Lihat
:help diff
untuk informasi dan perintah lebih lanjut.sumber
vimdiff file.old file.new -c 'FormatCommand diffformat' -c 'w! file.diff.html' -c 'qa!'
.screen -D -m
atau append&>/dev/null
(varian / dev / null terkadang menghasilkan bug aneh) jika Anda tidak ingin melihat terminal berkedip) dan keluar dari vim setelah pemformatan selesai, tetapi ini murni vimscript dan bahkan dengan pengoptimalan saya itu sangat lambat untuk file besar.Catatan : ini adalah duplikat dari apa yang ditemukan di sini: Bagaimana cara meningkatkan penyorotan diff git? . Memposting jawaban saya di sini juga, karena mungkin bermanfaat bagi beberapa orang yang menemukan langsung utas ini :)
Seperti yang dikatakan dalam beberapa jawaban sebelumnya, ini hanya mungkin dengan hal-hal git. Saya memposting ini karena instruksinya mungkin sedikit lebih mudah diikuti tergantung pada sistem Anda, tetapi ini mirip dengan beberapa jawaban lainnya.
Satu solusi yang hanya mengandalkan git dan kontribusinya. Ini tidak memerlukan file tambahan selain yang disertakan dengan git . Semua penjelasan untuk Ubuntu (diuji pada 18.04LTS), seharusnya bekerja dengan cara yang sama pada sistem linux lain:
di sistem saya, satu-satunya jawaban yang valid adalah:
~/.gitconfig
untuk mendapatkan hasil yang Anda inginkan, dengan menambahkan (perhatikan ini TABS, bukan 4 spasi):sumber