Cara Kerja Perbandingan Teks
Diff menjawab satu pertanyaan: apa yang harus diubah agar teks pertama menjadi teks kedua? Panduan ini menjelaskan cara alat diff menemukan jawabannya, cara membaca hasilnya, dan cara menyiapkan dua versi agar hasilnya menunjukkan perubahan yang penting, bukan gangguan.
Apa yang Ditunjukkan Diff
Sebagian besar alat diff, termasuk Bandingkan Teks LeedyBox, membandingkan teks baris demi baris. Setiap baris hasil termasuk salah satu dari tiga jenis: tidak berubah (ada di kedua versi), dihapus (hanya di versi asli), atau ditambahkan (hanya di versi baru). Tidak ada jenis “diubah” tersendiri, jadi baris yang satu katanya disunting muncul dua kali, sekali sebagai dihapus dan sekali sebagai ditambahkan:
Dear customer,
- Your order ships on Monday.
+ Your order ships on Tuesday.
Kind regards
Tandanya mengikuti konvensi lama: - untuk dihapus, + untuk ditambahkan, dan spasi untuk baris yang tidak berubah. Warna, biasanya merah dan hijau, mengulang informasi yang sama.
Cara Baris Dicocokkan
Alat diff mencari urutan baris terpanjang yang muncul di kedua teks dalam urutan yang sama, yaitu subsekuens bersama terpanjang. Baris-baris itu tetap sebagai tidak berubah; sisanya ditandai sebagai dihapus atau ditambahkan. Jika versi asli adalah A, B, C, D dan teks baru A, C, B, D, urutan bersama terpanjang berisi tiga baris, misalnya A, B, D, sehingga C tampil sebagai dipindahkan: dihapus di satu tempat dan ditambahkan di tempat lain.
Sering ada beberapa jawaban yang sama panjangnya, dan setiap alat memilih dengan cara berbeda. Itulah sebabnya pasangan file yang sama bisa menghasilkan diff yang sedikit berbeda di dua program. Git memakai algoritme Myers secara bawaan dan menawarkan patience dan histogram sebagai alternatif, yang sering memberi hasil lebih mudah dibaca untuk kode dengan banyak baris yang hanya berisi kurung kurawal penutup.
Mencari urutan bersama terpanjang membutuhkan kerja yang tumbuh seiring jumlah baris satu teks dikali jumlah baris teks lainnya. Alat LeedyBox terlebih dulu menyisihkan baris yang identik di awal dan akhir, membandingkan sisanya, lalu berhenti dengan pesan jika hasil kali itu melebihi 4.000.000, misalnya sekitar 2.000 lawan 2.000 baris yang berbeda.
Membaca Unified Diff dari Git dan Tinjauan Kode
Sistem kontrol versi hanya menampilkan bagian file yang berubah, dalam format unified diff:
--- a/config.yml
+++ b/config.yml
@@ -12,4 +12,5 @@
server:
- port: 8080
+ port: 8081
+ timeout: 30
database:
Baris --- dan +++ menyebut file lama dan baru. Header blok @@ -12,4 +12,5 @@ berarti: blok ini dimulai di baris 12 dan mencakup 4 baris di file lama, dan dimulai di baris 12 dan mencakup 5 baris di file baru. Beberapa baris yang tidak berubah di sekitar setiap perubahan, secara bawaan tiga, memberi konteks. Alat yang menampilkan seluruh teks, seperti milik LeedyBox, tidak punya header blok karena setiap baris terlihat; karena itu pula hasilnya tidak bisa diterapkan sebagai patch.
Menyiapkan Teks untuk Perbandingan yang Berguna
Diff membandingkan karakter, bukan makna. Perbedaan kecil yang tak terlihat membuat baris berbeda dan bisa menenggelamkan perubahan yang sebenarnya:
- Spasi dan tab di akhir baris, atau tab di satu versi dan spasi di versi lain. Hapus spasi di akhir baris dan pakai indentasi yang sama di keduanya.
- Karakter tak terlihat seperti spasi tak terputus atau spasi lebar nol, yang umum pada teks yang disalin dari halaman web dan pengolah kata.
- Bentuk Unicode. Huruf beraksen seperti é bisa disimpan sebagai satu karakter atau sebagai e ditambah aksen penggabung. Teks dari nama file macOS atau sebagian PDF sering memakai bentuk kedua.
- Tanda kutip lengkung dan tanda pisah. Pengolah kata mengganti " dengan “ ” dan - dengan –, sehingga salinan yang ditempel tidak lagi cocok dengan teks polos aslinya.
- Akhir baris. Windows mengakhiri baris dengan CR LF, sedangkan macOS dan Linux dengan LF. Browser mengubah setiap jeda baris di kotak teks menjadi LF, jadi perbedaan ini tidak tampak di alat LeedyBox, tetapi tampak di alat yang membandingkan file secara langsung.
- Format data dan kode. JSON yang diindentasi ulang atau kunci dengan urutan lain membuat hampir setiap baris berbeda. Format kedua versi dengan cara yang sama terlebih dulu, misalnya dengan kunci terurut dan indentasi yang sama.
Membandingkan Teks Prosa
Dalam dokumen biasa, satu paragraf utuh sering berupa satu baris panjang, sehingga satu kata yang disunting menandai seluruh paragraf sebagai dihapus dan ditambahkan. Dua kebiasaan membantu. Sebelum membandingkan, letakkan setiap kalimat di barisnya sendiri agar hanya kalimat yang berubah yang menonjol. Atau gunakan alat yang membandingkan kata di dalam baris, seperti git diff --word-diff atau fitur bandingkan dengan lacak perubahan di pengolah kata.
Teks yang disalin dari PDF punya jebakan sendiri: baris terputus di tempat tata letak halaman memutusnya, dan kata bisa terpenggal dengan tanda hubung di akhir baris. Gabungkan kembali baris-baris setiap paragraf sebelum membandingkannya dengan dokumen sumber.
Yang Tidak Bisa Diungkap Diff Baris
- Perpindahan. Paragraf yang dipindah ke tempat lain tampil sebagai dihapus di satu tempat dan ditambahkan di tempat lain. Beberapa alat, seperti git dengan
--color-moved, menandai blok yang dipindahkan secara terpisah. - Makna. Dua teks yang menyatakan hal sama dengan kata berbeda akan berbeda sepenuhnya, dan perubahan satu karakter, seperti hilangnya “not”, tampak kecil tetapi bisa membalik arti kalimat.
- Konten biner. Dokumen Word, PDF, dan gambar bukan teks polos. Ekstrak teksnya dulu, atau pakai fitur perbandingan dari program yang membuatnya.
Privasi Saat Membandingkan Dokumen
Kontrak, file konfigurasi, dan log sering berisi nama, kunci, atau kata sandi. Sebagian layanan perbandingan daring menyimpan teks yang ditempel di server mereka, terkadang dengan tautan yang bisa dibagikan. Bandingkan Teks LeedyBox berjalan di browser Anda dan tidak mengirim atau menyimpan teks, tetapi tetap sebaiknya hapus rahasia sebelum menempelkan file konfigurasi di mana pun.
Pertanyaan Umum
Mengapa seluruh paragraf ditandai berubah padahal saya hanya menyunting satu kata?
Paragraf itu satu baris, dan diff baris membandingkan baris utuh. Pecah teks menjadi kalimat atau baris yang lebih pendek sebelum membandingkan, atau gunakan perbandingan per kata.
Bisakah saya mengabaikan perbedaan spasi?
Alat LeedyBox membandingkan baris secara persis. Bersihkan kedua teks terlebih dulu, misalnya dengan menghapus spasi di akhir baris dan mengubah tab menjadi spasi; untuk file, git menyediakan opsi seperti --ignore-space-change.
Bagaimana cara membandingkan dua dokumen Word?
Word punya fitur Bandingkan bawaan yang juga menunjukkan perubahan format. Untuk membandingkan isi kalimatnya saja, salin teks kedua dokumen ke alat perbandingan teks.
Apa itu penggabungan tiga arah (three-way merge)?
Saat dua orang menyunting dokumen asli yang sama, alat penggabungan membandingkan setiap versi dengan dokumen asli bersama. Perubahan di tempat berbeda digabung otomatis; perubahan pada baris yang sama dilaporkan sebagai konflik yang harus diselesaikan seseorang.