Perbandingan & Penggabungan Teks

Tempel dua versi teks dan bandingkan baris demi baris dengan perbedaan berwarna.

Hasil perbandingan

Tempel dua teks dan klik Bandingkan.

Cara kerjanya

  1. Tempel dua teks: masukkan teks asli di panel kiri dan teks yang direvisi di panel kanan.
  2. Lihat perbedaan: baris yang dimodifikasi disorot, hijau untuk penambahan, merah untuk penghapusan, dan kuning untuk modifikasi.
  3. Telusuri diff: gulir melalui perubahan berwarna dan salin atau ambil tangkapan layar bagian yang Anda butuhkan.

Sejarah Singkat Diff

Diffing teks modern dimulai di Bell Labs. Douglas McIlroy (McIlroy yang sama yang menemukan pipe Unix) dan James W. Hunt menulis Unix diff asli pada awal 1970-an; itu dikirim sebagai bagian dari Edisi ke-5 Unix pada 1974. Algoritma didokumentasikan dalam Bell Laboratories Computing Science Technical Report #41 (Juni 1976), laporan internal berjudul "An Algorithm for Differential File Comparison". Algoritma Hunt-McIlroy dibangun di atas masalah subsequence umum terpanjang (LCS), temukan urutan terpanjang dari baris yang muncul, dalam urutan, di kedua input, dan segala sesuatu yang tidak ada dalam urutan itu adalah baik penghapusan atau penyisipan. Satu dekade kemudian, Eugene W. Myers menerbitkan "An O(ND) Difference Algorithm and Its Variations" di Algorithmica, Vol 1 Issue 2 (1986). Myers membingkai ulang masalahnya sebagai pencarian jalur terpendek atas "edit graph" dan menunjukkan bahwa itu dapat dipecahkan dalam waktu dan ruang O(ND), di mana N adalah ukuran input dan D adalah ukuran skrip edit minimal. Untuk input tipikal, file yang berbeda hanya di beberapa tempat, D kecil, jadi algoritma cepat dalam praktik. Makalah Myers menjadi dasar untuk implementasi Unix diff yang lebih cepat yang berjalan dua hingga empat kali lebih cepat dari pendahulunya dan menghasilkan output kualitas yang lebih tinggi. Patience diff (Bram Cohen, 2008) adalah penghalusan LCS yang memprioritaskan baris jangkar unik, menghasilkan diff yang lebih mudah dibaca di sekitar blok yang dipindahkan. Default saat ini di git diff adalah algoritma histogram di LibXDiff, umumnya dianggap lebih cepat dari Myers vanila dan menghasilkan diff yang lebih mudah dibaca di hadapan blok yang dipindahkan (menjadi default Git di 2.11, dirilis 29 November 2016). Fondasi matematis bahkan lebih dalam: jarak Levenshtein (Vladimir Levenshtein, 1965) adalah sepupu tingkat karakter dari masalah LCS, dan solusi pemrograman dinamis Wagner-Fischer (1974) adalah yang masih diimplementasikan secara internal oleh setiap pustaka "fuzzy match".

Bagaimana Diff Dirender

Ada empat konvensi visual umum untuk menampilkan diff. Side-by-side, dua kolom, asli di kiri, dimodifikasi di kanan, dengan baris yang sesuai diluruskan. Baik untuk perbandingan sekilas; bekerja baik di lebar desktop tetapi menjadi tidak terbaca di viewport mobile yang sempit. Diff terpadu inline, kolom tunggal menampilkan baris yang dihapus (biasanya dengan prefiks - dan diwarnai merah), baris yang ditambahkan (+, hijau), dan baris konteks yang tidak berubah (tanpa prefiks, teks biasa). Layout yang git diff gunakan secara default. Skala baik ke mobile tetapi kehilangan paralelisme spasial side-by-side. Diff tingkat kata, menyorot hanya kata-kata yang berubah dalam baris yang diubah. Berguna untuk perbandingan prosa di mana sebagian besar teks tidak berubah tetapi frase tertentu diedit. Diff tingkat karakter, menyorot setiap karakter yang berubah secara individual. Berguna untuk perubahan yang sangat kecil (koreksi typo, edit satu digit) di mana tingkat kata akan menyorot seluruh kata. Konvensi warna sangat konsisten di seluruh ekosistem: hijau untuk penambahan, merah untuk penghapusan, kuning atau amber untuk nilai yang diubah, abu-abu netral atau tanpa gaya untuk yang tidak berubah. Alat ini menggunakan gaya terpadu inline dengan penyorotan tingkat karakter di dalam baris yang diubah, hibrida yang skala baik ke mobile sambil mempertahankan presisi perbandingan tingkat karakter untuk pengeditan prosa.

Merge Tiga Arah, Ketika Dua Diff Perlu Bergabung

Diff dua arah (alat ini) memberi tahu Anda apa yang berubah antara versi A dan versi B. Merge tiga arah menjawab pertanyaan yang lebih sulit: diberi leluhur umum dan dua revisi yang berbeda, apa hasil gabungan yang menggabungkan kedua set perubahan? Ini adalah operasi inti dari setiap sistem kontrol versi, ketika dua developer mengedit file yang sama secara independen dan satu mencoba menggabungkan pekerjaan mereka, sistem perlu menerapkan kedua diff ke aslinya. Algoritma diff3 yang diformalkan oleh Khanna, Kunal dan Pierce (2007) adalah dasarnya. Konvensi penanda konflik tujuh karakter, <<<<<<<, =======, >>>>>>>, yang Git masukkan ke dalam file ketika merge otomatis gagal, berasal langsung dari garis keturunan ini. Alat merge visual modern (editor merge tiga panel VS Code, default-aktif sejak 1.69 di Juni 2022; Beyond Compare dari Scooter Software, sejak 1996; Meld; Kaleidoscope oleh Black Pixel untuk macOS) menangani merge tiga arah dengan rendering side-by-side dari ketiga versi plus panel keempat untuk hasil merge yang diusulkan. Alat ini berfokus pada perbandingan dua arah, merge tiga arah termasuk dalam alur kerja kontrol versi yang sesungguhnya.

Use Case Umum

Ekosistem Diff di 2026

Di luar git diff dan Unix diff, beberapa alat diff khusus layak disebutkan. Beyond Compare (Scooter Software, 1996) adalah alat perbandingan folder-dan-file komersial yang sudah lama ada, populer di kalangan developer dan profesional IT untuk diffing antar mesin. Meld (open source, berbasis GTK) adalah default GNOME. Kaleidoscope (Black Pixel, macOS) terintegrasi dengan kontrol versi dan merupakan pilihan de facto untuk banyak developer Mac. Editor diff bawaan VS Code menangani perbandingan dua arah dan tiga arah secara native; editor merge tiga panel menjadi default-aktif di 1.69 (Juni 2022). Mergely (Wayne Stidolph, 2013, lisensi MIT) adalah editor merge dua arah berbasis browser kanonik yang dibangun di atas CodeMirror. jsdiff (Kevin Decker, sekitar 2010) adalah pustaka diff JavaScript yang dominan, digunakan oleh setiap alat diff berbasis browser yang pernah Anda tempel. diff-match-patch (Neil Fraser di Google, 2006) adalah pustaka alternatif yang menangani diffing, fuzzy matching, dan pembuatan patch dalam satu API; digunakan dalam riwayat revisi Google Docs. Diffchecker adalah layanan diff online freemium yang dominan, lengkap fitur tetapi dengan privasi berbayar (tingkat gratis mengirim teks ke server mereka). text-compare.com adalah situs diff web teks murni yang paling lama berjalan, UI lama tetapi fungsional.

Privasi: Mengapa Browser-Saja Penting Terutama di Sini

Setiap diff mengungkapkan dengan tepat apa yang berubah antara dua versi, dan apa yang berubah sering kali lebih sensitif daripada salah satu versi saja. Tiga skenario konkret di mana ini sangat penting. Patch keamanan: diffing versi rentan dari fungsi terhadap versi yang ditambal mengungkapkan lokasi yang tepat dan sifat bug keamanan, penyerang yang menemukan patch dapat membuat eksploit untuk versi yang tidak ditambal (serangan "patch gap" yang didokumentasikan oleh Tian et al. di USENIX Security 2017). Menempelkan patch keamanan ke alat diff sisi server pada dasarnya menerbitkan kerentanannya. Negosiasi kontrak: diffing dua versi kontrak mengungkapkan dengan tepat klausa mana yang dipedulikan setiap pihak, yang merupakan informasi yang tidak Anda inginkan dimiliki oleh pihak lain (atau siapa pun yang menonton jaringan) selama negosiasi. Keputusan editorial pra-publikasi: diffing manuskrip sebelum dan sesudah pengeditan mengungkapkan apa yang penulis dan editor putuskan untuk dipotong atau diubah, sering kali lebih mengungkap daripada versi yang akhirnya diterbitkan. Alat diff sisi server mengunggah kedua versi ke pihak ketiga, di mana mereka berada di log. Alat ini berjalan sepenuhnya di browser Anda melalui JavaScript, verifikasi di tab Network DevTools saat Anda mengklik Bandingkan, atau bawa halaman offline (mode pesawat) setelah dimuat dan alat masih bekerja.

Pertanyaan umum

Bisakah saya membandingkan file kode?

Ya. Tempel teks apa pun, termasuk kode, JSON, HTML, Markdown, atau teks polos. Diff bersifat tekstual murni, jadi berfungsi untuk format apa pun.

Apakah ia mengabaikan perbedaan spasi?

Aktifkan opsi "Abaikan spasi" untuk melewati perbedaan yang hanya berupa spasi atau akhir baris. Berguna untuk membandingkan kode yang diformat ulang tetapi tidak diubah secara substantif.

Algoritma apa yang digunakan ini?

Algoritma O(ND) Myers (Eugene Myers, Algorithmica Vol 1 No 2, 1986), algoritma yang sama yang digunakan GNU diff secara default selama beberapa dekade dan dasar untuk sebagian besar implementasi text-diff. Myers membingkai ulang masalah subsequence umum terpanjang sebagai pencarian jalur terpendek atas grafik edit, membuatnya cepat dalam praktik untuk input yang berbeda hanya di beberapa tempat. Algoritma histogram yang lebih baru (default Git saat ini sejak v2.11, November 2016) menangani blok yang dipindahkan sedikit lebih baik tetapi berlebihan untuk use case dua-tempel tipikal yang ditangani alat ini.

Apakah ada batas ukuran?

Tidak ada batas keras, tetapi perbandingan berjalan di browser Anda melalui JavaScript jadi ceiling praktisnya adalah memori yang tersedia perangkat Anda. Puluhan ribu baris berfungsi dengan nyaman. Input yang sangat besar (file log multi-megabyte, novel lengkap) akan berjalan tetapi mungkin memerlukan beberapa detik yang terlihat untuk dirender. Untuk input yang benar-benar besar gunakan diff Git di command line, ia mengalir output dan menangani file ukuran sembarang tanpa tekanan memori.

Bisakah melakukan merge tiga arah atau menerapkan patch?

Tidak saat ini, alat ini berfokus pada perbandingan dua arah (A vs B). Merge tiga arah (algoritma diff3 dengan penanda konflik <<<<<<< / ======= / >>>>>>>) adalah operasi yang Git gunakan saat menggabungkan cabang; itu memerlukan leluhur umum plus dua versi yang berbeda. Untuk merge tiga arah, gunakan sistem kontrol versi sesungguhnya atau alat khusus seperti editor merge tiga panel VS Code (default-aktif sejak 1.69 di Juni 2022).

Apakah teks saya diunggah?

Tidak. Perbandingan berjalan sepenuhnya di browser Anda melalui JavaScript. Teks yang Anda tempel tidak pernah melintasi jaringan, verifikasi di tab Network DevTools saat Anda mengklik Bandingkan, atau bawa halaman offline (mode pesawat) setelah dimuat dan alat masih bekerja. Sangat aman untuk diffing patch keamanan (di mana diff itu sendiri mengungkapkan kerentanan), revisi kontrak (di mana diff mengungkapkan posisi negosiasi), atau draft editorial pra-publikasi.

Alat terkait

Pemeriksa Perbedaan Teks HTML Tabel Generator Baris Sorter Penghapus Whitespace & Pembersih Teks