Saya ingin menggunakan 'diff' untuk mendapatkan perbedaan garis antara dan perbedaan karakter. Misalnya, pertimbangkan:
File 1
abcde
abc
abcccd
File 2
abcde
ab
abccc
Menggunakan diff -u saya mendapatkan:
@@ -1,3 +1,3 @@
abcde
-abc
-abcccd
\ No newline at end of file
+ab
+abccc
\ No newline at end of file
Namun, itu hanya menunjukkan kepada saya bahwa ada perubahan di baris ini. Yang ingin saya lihat adalah seperti ini:
@@ -1,3 +1,3 @@
abcde
-ab<ins>c</ins>
-abccc<ins>d</ins>
\ No newline at end of file
+ab
+abccc
\ No newline at end of file
Anda mengerti maksud saya.
Sekarang, saya tahu saya dapat menggunakan mesin lain untuk menandai / memeriksa perbedaan pada baris tertentu. Tapi saya lebih suka menggunakan satu alat yang melakukan semuanya.
text
command-line
diff
VitalyB
sumber
sumber
Jawaban:
Git memiliki kata diff, dan mendefinisikan semua karakter sebagai kata secara efektif memberi Anda perbedaan karakter. Namun, perubahan baris baru diabaikan .
Contoh
Buat repositori seperti ini:
Sekarang, lakukan
git diff --word-diff=color --word-diff-regex=. master^ master
dan Anda akan mendapatkan:Perhatikan bagaimana penambahan dan penghapusan dikenali pada tingkat karakter, sementara penambahan dan penghapusan baris baru diabaikan.
Anda mungkin juga ingin mencoba salah satu dari ini:
sumber
git diff --word-diff=color --word-diff-regex=. file1 file2
--no-index
respons @ qwertzguys di atas agar dapat berfungsi di luar git repo. Jadi:git diff --no-index --word-diff=color --word-diff-regex=. file1 file2
--no-index
bagian dalam repo jugaKamu bisa memakai:
colordiff
adalah paket Ubuntu. Anda dapat menginstalnya menggunakansudo apt-get install colordiff
.diff-highlight
berasal dari git (sejak versi 2.9). Itu terletak di/usr/share/doc/git/contrib/diff-highlight/diff-highlight
. Anda dapat meletakkannya di suatu tempat di$PATH
.sumber
brew install colordiff
diff-highlight
di$(brew --prefix git)/share/git-core/contrib/diff-highlight/diff-highlight
diff-highlight
juga dapat diinstal dengan pip python -pip install diff-highlight
(Saya lebih suka bahkan jika git diinstal melalui brew)Difflib Python adalah ace jika Anda ingin melakukan ini secara terprogram. Untuk penggunaan interaktif, saya menggunakan mode diff vim (cukup mudah digunakan: cukup panggil vim dengan
vimdiff a b
). Saya juga terkadang menggunakan Beyond Compare , yang melakukan hampir semua yang Anda harapkan dari alat diff.Saya belum melihat alat baris perintah yang melakukan ini dengan berguna, tetapi seperti yang dicatat oleh Will, kode contoh difflib mungkin membantu.
sumber
Anda dapat menggunakan
cmp
perintah di Solaris:sumber
cmp
juga tersedia di (setidaknya beberapa) distribusi Linux.-l -b
.Python memiliki pustaka yang nyaman bernama
difflib
yang mungkin membantu menjawab pertanyaan Anda.Di bawah ini adalah dua oneliners yang digunakan
difflib
untuk versi python yang berbeda.Ini mungkin berguna sebagai alias shell yang lebih mudah untuk dipindahkan dengan file
.${SHELL_NAME}rc
.Dan versi yang lebih mudah dibaca untuk dimasukkan ke dalam file mandiri.
sumber
Bekerja dengan baik untuk saya. Angka paling kiri dari hasil menunjukkan jumlah karakter yang berbeda.
sumber
cmp -l file1 file2 | wc -l
Saya juga menulis skrip saya sendiri untuk menyelesaikan masalah ini menggunakan algoritma penerusan umum terpanjang.
Itu dijalankan seperti itu
JLDiff.py a.txt b.txt out.html
Hasilnya dalam bentuk html dengan warna merah dan hijau. File yang lebih besar secara eksponensial membutuhkan waktu yang lebih lama untuk diproses tetapi ini melakukan perbandingan karakter demi karakter yang sebenarnya tanpa memeriksa baris demi baris terlebih dahulu.
sumber
Berwarna, karakter tingkat
diff
ouputInilah yang dapat Anda lakukan dengan skrip di bawah ini dan diff-highlight (yang merupakan bagian dari git):
(Kredit ke @ retracile ini jawaban untuk
sed
penyorotan)sumber
command | gvim -
akan melakukan apa yang kamu inginkan.git
tetapi tidak ditempatkan di jalur Anda. Satu mesin saya tempat ini tinggal/usr/share/doc/git/contrib/diff-highlight
.Difflib Python dapat melakukan ini.
Dokumentasi tersebut menyertakan contoh program baris perintah untuk Anda.
Format persisnya tidak seperti yang Anda tentukan, tetapi akan sangat mudah untuk mengurai keluaran gaya ndiff atau memodifikasi program contoh untuk menghasilkan notasi Anda.
sumber
Berikut adalah alat perbandingan teks online: http://text-compare.com/
Itu dapat menyorot setiap karakter yang berbeda dan terus membandingkan sisanya.
sumber
catdog
dancat\ndog
hanya akan cocokcat
Saya pikir solusi yang lebih sederhana selalu merupakan solusi yang baik. Dalam kasus saya, kode di bawah ini sangat membantu saya. Saya harap ini membantu orang lain.
Anda dapat membandingkan dua file dengan sintaks berikut di terminal favorit Anda:
sumber
Jika Anda menyimpan file Anda di Git, Anda dapat membedakan versi dengan skrip diff-highlight , yang akan menampilkan baris yang berbeda, dengan perbedaan yang disorot.
Sayangnya ini hanya berfungsi ketika jumlah baris yang dihapus cocok dengan jumlah baris yang ditambahkan - ada kode rintisan ketika baris tidak cocok, jadi mungkin ini dapat diperbaiki di masa mendatang.
sumber
Bukan jawaban yang lengkap, tetapi jika
cmp -l
keluarannya kurang jelas, Anda dapat menggunakan:sumber
Sebagian besar jawaban ini menyebutkan penggunaan diff-highlight , sebuah modul Perl. Tetapi saya tidak ingin mengetahui cara menginstal modul Perl. Jadi saya membuat beberapa perubahan kecil untuk menjadi skrip Perl mandiri.
Anda dapat menginstalnya menggunakan:
Dan penggunaannya (jika Anda memiliki Ubuntu yang
colordiff
disebutkan dalam jawaban zhanxw):Dan penggunaannya (jika tidak):
sumber