Diff teks

Bandingkan dua teks dan lihat persis apa yang berubah, dalam tampilan sejajar atau unifikasi, per baris atau per kata.

Seluruh perbandingan terjadi secara lokal di browser Anda. Tidak ada yang meninggalkan perangkat Anda.

Bagaimana diff bekerja

Membandingkan dua teks adalah masalah klasik dalam ilmu komputer: menemukan himpunan perubahan terkecil yang mengubah satu teks menjadi yang lain. Alat ini menyelesaikannya dengan algoritma subsekuens umum terpanjang (LCS): menemukan rangkaian baris (atau kata) terpanjang yang sama di kedua teks dalam urutan yang sama, dan sisanya dilaporkan sebagai penambahan atau penghapusan. Tanpa server, tanpa jaringan: hanya dua teks Anda dan sedikit pemrograman dinamis di browser Anda.

LCS algorithm
Diberi dua sekuens, LCS bertanya: apa subsekuens elemen terpanjang yang ada di keduanya, dengan urutan sama? Diatasi dengan pemrograman dinamis dalam O(n·m): sebuah tabel di mana tiap sel menyimpan jawaban terbaik untuk prefix hingga titik itu. Menelusuri tabel ke belakang menghasilkan perujukan — baris yang sama berpasangan, sisanya adalah penambahan dan penghapusan. Utilitas diff Unix yang terkenal memakai teknik yang sangat mirip.
Level baris vs level kata
Level baris menjalankan satu kali LCS pada baris utuh: cepat dan mudah dibaca, tetapi pengeditan satu kata pada baris panjang akan tampil sebagai "seluruh baris berubah". Level kata menambahkan sekali lagi: pasangan baris yang berubah dibandingkan ulang kata per kata, sehingga sorotan menunjuk tepat kata mana yang bergeser. Anggap ini sebagai zoom pada baris yang ditandai oleh passata pertama.
Pemakaian umum
Meninjau perubahan kode antara dua versi, membandingkan draf dokumen, mendeteksi typo antara dua salinan teks, atau memastikan perubahan file konfigurasi benar-benar sesuai niat. Penghitung (baris ditambahkan / baris dihapus) memberi estimasi cepat ukuran perubahan sebelum membaca detailnya.

Pertanyaan yang sering diajukan

Algoritma apa yang dipakai diff ini?

Inti dari ini adalah algoritma subsekuens umum terpanjang (LCS) klasik. Kedua teks dipecah menjadi baris, dan LCS menemukan kumpulan baris terbesar yang muncul di keduanya dengan urutan sama. Baris yang ada di teks asli tetapi tidak di teks hasil ubah adalah penghapusan; baris yang ada di teks hasil ubah tetapi tidak di teks asli adalah penambahan. Pemrograman dinamis menghitung ini dalam O(n·m).

Apa perbedaan antara level baris dan level kata?

Level baris memperlakukan setiap baris utuh sebagai satu unit: jika ada karakter di baris yang berubah, baris itu ditandai sebagai dihapus (merah) dan penggantinya sebagai ditambah (hijau). Level kata lebih dulu merujukan baris seperti biasa, lalu membandingkan ulang pasangan baris yang berubah per kata dengan LCS kedua, sehingga Anda melihat persis kata mana yang disisipkan atau dihapus di dalam baris.

Apakah bisa digunakan untuk kode program?

Ya. Tempel dua versi fungsi, file konfigurasi, atau sebelum/sesudah commit dan alat ini menampilkan baris yang berubah. Level kata sangat berguna untuk kode karena menandai token persis yang berubah pada baris yang panjangnya normal.

Apa arti warna yang ditampilkan?

Latar hijau menandai konten yang ditambahkan pada teks hasil ubah; latar merah menandai konten yang dihapus dari teks asli. Konten yang tidak berubah tidak berlatar. Penghitung di atas tampilan menunjukkan berapa baris yang ditambahkan dan dihapus.

Apakah teks saya dikirim ke mana pun?

Tidak. Kedua teks dan seluruh komputasi LCS berjalan sebagai JavaScript di tab browser Anda. Tidak ada yang diunggah, dikirim, atau disimpan — tutup halaman dan semuanya hilang.