🔍
Alat Developer
March 19, 20266 min readBy BrowseryTools Team

Cara Membandingkan File Teks dan Menemukan Perbedaan Tanpa Software Apa Pun

Pelajari cara kerja algoritma diff teks, cara membaca output unified diff, perbedaan antara diff level baris dan level kata, serta cara kerja git diff di baliknya.

diffperbandingan teksgitcode reviewperbandingan file

Setiap developer pernah menghadapi situasi ini: dua versi file yang seharusnya identik, tetapi ada sesuatu yang berubah. Mungkin itu file konfigurasi yang diedit secara manual di server. Mungkin itu kontrak yang dikembalikan dari pengacara dengan perubahan yang tidak diungkapkan. Mungkin itu file terjemahan yang dikembalikan vendor dan perlu kamu verifikasi tidak ada yang terhapus secara tidak sengaja. Dalam semua kasus ini, jawabannya sama: jalankan diff.

Kamu bisa membandingkan dua blok teks apa pun secara instan menggunakan BrowseryTools Text Diff tool — gratis, tanpa daftar, semuanya tetap di browsermu.

Mengapa Text Diffing Penting

Text diffing bukan hanya alat developer. Situasi apa pun di mana dua versi dokumen ada dan perbedaannya perlu ditampilkan adalah masalah diff:

  • Code review — memahami apa yang berubah antara dua versi kode sumber sebelum menyetujui merge
  • Perbandingan kontrak dan dokumen hukum — mengidentifikasi dengan tepat klausul mana yang ditambahkan, dihapus, atau dimodifikasi antara draf
  • Manajemen konfigurasi — memastikan file konfigurasi yang di-deploy sesuai dengan versi di source control
  • Verifikasi konten terjemahan — memeriksa bahwa dokumen yang diterjemahkan mencakup semua bagian yang sama dengan yang asli
  • Validasi data — membandingkan ekspor CSV dari dua sistem untuk menemukan perbedaan
  • Proofreading — menangkap perubahan yang tidak disengaja antara draf dokumen dan versi yang diterbitkan

Cara Kerja Algoritma Diff

Masalah inti yang dipecahkan algoritma diff adalah: diberikan dua urutan A dan B, temukan kumpulan edit minimum (penyisipan dan penghapusan) yang diperlukan untuk mengubah A menjadi B. Ini secara formal adalah masalah Longest Common Subsequence (LCS). Diff kemudian melaporkan apa yang tidak ada dalam LCS — baris yang unik untuk A (penghapusan) dan baris yang unik untuk B (penyisipan).

Dua algoritma mendominasi implementasi praktis:

  • Myers diff (1986) — algoritma di balik perintah Unix diffasli dan Git. Eugene Myers merancangnya untuk menemukan skrip edit terpendek (diff dengan total penyisipan dan penghapusan paling sedikit) dalam waktu O(ND), di mana N adalah total ukuran kedua input dan D adalah jumlah perbedaan. Cepat dan menghasilkan diff minimal, tetapi dapat menghasilkan output yang tidak intuitif saat blok kode besar dipindahkan.
  • Patience diff — dikembangkan oleh Bram Cohen (pencipta BitTorrent) dan digunakan oleh Bazaar, kemudian dipopulerkan oleh Kaleidoscope. Alih-alih bekerja baris per baris, patience diff pertama-tama mencocokkan baris unik yang muncul tepat sekali di kedua file. Ini menghasilkan output yang mempertahankan batas fungsi dan blok jauh lebih baik dari Myers diff untuk kode sumber. Git mendukungnya melalui git diff --patience.

Membaca Output Unified Diff

Format unified diff adalah output standar dari git diff dan sebagian besar alat diff. Setelah kamu memahami notasinya, ia menjadi langsung terbaca.

--- a/config.yml       (original file)
+++ b/config.yml       (modified file)
@@ -10,7 +10,8 @@     (hunk header)
 server:
   host: localhost
-  port: 3000
+  port: 8080
+  timeout: 30
   debug: false

Elemen utama yang perlu dibaca:

  • Baris yang dimulai dengan - — ada di file asli, dihapus di versi baru (ditampilkan merah)
  • Baris yang dimulai dengan + — tidak ada di aslinya, ditambahkan di versi baru (ditampilkan hijau)
  • Baris tanpa awalan (spasi) — baris konteks yang tidak berubah, ditampilkan untuk orientasi
  • Header hunk @@ — dibaca sebagai "mulai dari baris 10, menampilkan 7 baris dari aslinya; mulai dari baris 10, menampilkan 8 baris dari versi baru." Formatnya adalah @@ -start,count +start,count @@.

Diff Level Kata vs Baris vs Karakter

Granularitas diff menentukan seberapa berguna untuk tugas tertentu.

  • Diff level baris — default untuk kode sumber. Setiap baris diperlakukan sebagai unit atomik. Cepat dan tepat untuk kode di mana baris pendek dan bermakna. Jika satu kata berubah dalam paragraf panjang, seluruh baris ditampilkan sebagai berubah.
  • Diff level kata — tepat untuk prosa dan dokumentasi. Kata-kata yang berubah dalam satu baris disorot secara individual, memberikan sinyal yang jauh lebih jelas dalam dokumen yang banyak teks. Sebagian besar alat perbandingan dokumen (Microsoft Word Track Changes, riwayat versi Google Docs) beroperasi di level kata.
  • Diff level karakter — menyoroti perubahan karakter individual dalam kata-kata. Paling berguna untuk mendeteksi typo halus, perubahan whitespace, karakter tak terlihat (zero-width space, non-breaking space), atau perbedaan encoding. Penting untuk membandingkan data yang terlihat identik secara visual tetapi berbeda di level byte.

BrowseryTools Text Diff tool menyoroti perbedaan secara inline, sehingga mudah melihat perubahan sekilas tanpa membaca format unified diff secara manual.

Git Diff di Baliknya

Ketika kamu menjalankan git diff, Git menghitung Myers diff antara versi objek yang disimpan dalam database objeknya. Beberapa flag berguna mengubah perilaku:

git diff                      # unstaged changes vs last commit
git diff --staged             # staged changes vs last commit
git diff HEAD~3               # current state vs 3 commits ago
git diff main...feature       # what feature branch adds to main
git diff --word-diff          # word-level highlighting
git diff --patience           # use patience algorithm (better for code)
git diff --stat               # summary: files changed, insertions, deletions

Memahami git diff main...feature secara spesifik: notasi tiga titik menampilkan apa yang ditambahkan branch feature sejak bercabang dari main, tidak termasuk perubahan apa pun yang telah terjadi di main sejak titik percabangan. Ini hampir selalu yang kamu inginkan untuk review pull request, bukan notasi dua titik main..feature yang membandingkan ujung terkini kedua branch secara langsung.

Kasus Penggunaan Praktis

Membandingkan File Konfigurasi

File konfigurasi (YAML, TOML, JSON, .env) adalah sumber bug production yang sering terjadi ketika versi yang di-deploy menyimpang dari versi yang dikontrol sumber. Sebelum men-debug masalah production yang misterius, melakukan diff konfigurasi live terhadap konfigurasi yang diharapkan sering kali langsung mengungkapkan penyebabnya.

Perbandingan Kontrak dan Dokumen

Ketika draf kontrak kembali dari pihak lain, jangan pernah percaya ringkasan tentang apa yang berubah. Ekspor kedua versi ke plain text dan jalankan diff. Pengacara diketahui mengubah istilah yang didefinisikan, menambahkan batas kewajiban, atau mengubah periode pemberitahuan dengan cara yang terlewat dalam pembacaan cepat. Diff level kata membuat setiap perubahan terlihat.

Verifikasi Dokumen yang Diterjemahkan

Saat bekerja dengan konten yang diterjemahkan, bandingkan struktur dokumen yang diterjemahkan dengan sumber. Diff struktural dari heading bagian dan jumlah paragraf mengungkapkan apakah ada bagian yang tidak sengaja dihilangkan atau digabungkan selama terjemahan.

Perbandingan Alat Diff

  • git diff — bawaan, level baris, format unified diff, tanpa GUI. Dasar untuk semua pekerjaan kode.
  • vimdiff — diff berdampingan berbasis terminal di dalam Vim. Kuat untuk perbandingan cepat tanpa meninggalkan terminal; kurva belajar yang curam.
  • Beyond Compare — alat desktop komersial dengan sinkronisasi folder, diff biner, dan three-way merge. Standar emas untuk perbandingan dokumen non-developer.
  • Meld — alat diff GUI gratis, lintas platform dengan dukungan three-way merge. Alternatif gratis terbaik untuk Beyond Compare.
  • BrowseryTools Text Diff — instan, berbasis browser, tanpa instalasi. Terbaik untuk perbandingan satu kali yang cepat, terutama untuk teks yang tidak ingin kamu tempel ke layanan online.

🛠️

Try the Tools — 100% Free, No Sign-Up

Everything runs in your browser. No uploads. No accounts. No ads.

Explore All Tools →