Cara Membandingkan File Teks: Alat dan Teknik Diff
Membandingkan teks adalah tugas harian bagi pengembang. Baik saat mereview perubahan kode, men-debug penyimpangan konfigurasi, atau menggabungkan dokumen, memahami output diff sangat penting. Panduan ini membahas algoritma, alat, dan teknik untuk perbandingan teks yang efektif.
Memahami Output Diff
Format unified diff klasik menunjukkan perubahan antara dua file:
--- original.txt
+++ modified.txt
@@ -1,5 +1,6 @@
Line 1: unchanged
-Line 2: removed text
+Line 2: modified text
+Line 2.5: added line
Line 3: unchanged
Line 4: unchanged
-Line 5: also removed
- Baris yang dimulai dengan
-telah dihapus (dari yang asli) - Baris yang dimulai dengan
+telah ditambahkan (di versi yang dimodifikasi) - Baris yang dimulai dengan
(spasi) tidak berubah sebagai konteks - Penanda
@@menunjukkan nomor baris yang terpengaruh
Algoritma Diff
Algoritma Myers
Algoritma default yang digunakan oleh Git dan sebagian besar alat diff. Algoritma ini menemukan skrip edit terpendek — jumlah minimum penyisipan dan penghapusan untuk mengubah satu file menjadi file lainnya. Ini menghasilkan diff yang bersih dan mudah dibaca untuk sebagian besar konten.
Patience Diff
Lebih baik untuk teks terstruktur seperti kode sumber. Alih-alih menemukan edit terpendek, algoritma ini terlebih dahulu mencocokkan baris unik yang muncul di kedua file, kemudian melakukan diff pada bagian di antaranya. Ini sering menghasilkan diff yang lebih bermakna yang selaras dengan blok kode logis.
git diff --patience
Histogram Diff
Peningkatan dari patience diff, digunakan sebagai default Git sejak versi 2.x. Algoritma ini menangani baris berulang dengan lebih baik dan menghasilkan output yang lebih bersih untuk file dengan perubahan struktural yang signifikan.
Membandingkan Teks Secara Online
Untuk perbandingan cepat tanpa menginstal alat, Pemeriksa Diff Teks kami menyediakan tampilan diff berdampingan dan inline langsung di browser Anda. Tempelkan dua teks, dan lihat perubahan yang disorot secara instan — semua pemrosesan terjadi secara lokal.
Alat Diff Baris Perintah
diff (POSIX)
Alat klasik Unix:
# Unified format (most readable)
diff -u file1.txt file2.txt
# Side-by-side
diff -y file1.txt file2.txt
# Ignore whitespace
diff -w file1.txt file2.txt
# Recursive directory comparison
diff -r dir1/ dir2/
git diff
Bahkan di luar repositori Git, git diff memberikan output yang lebih baik:
# Compare two files
git diff --no-index file1.txt file2.txt
# Word-level diff (highlights changed words, not whole lines)
git diff --word-diff
# Stat summary (files changed, insertions, deletions)
git diff --stat
colordiff / delta
Untuk output terminal berwarna:
# colordiff: drop-in replacement for diff
colordiff file1.txt file2.txt
# delta: modern diff viewer for Git
git diff | delta
Diff untuk Review Kode
Review kode yang efektif bergantung pada diff yang mudah dibaca. Berikut teknik untuk meningkatkan kualitas diff:
1. Jaga Commit Tetap Fokus
Diff besar yang mencakup ratusan baris sulit di-review. Setiap commit seharusnya menangani satu hal:
- Pisahkan perubahan format dari perubahan logika
- Bagi refaktor besar menjadi langkah-langkah bertahap
- Pindahkan file dalam satu commit, modifikasi di commit lain
2. Gunakan Diff Tingkat Kata
Diff tingkat baris menyembunyikan perubahan sebenarnya ketika sebuah baris memiliki modifikasi kecil yang terpendam dalam string panjang:
# Shows only the changed words, not entire lines
git diff --word-diff
3. Abaikan Spasi Putih dalam Review
Perubahan format menambahkan noise pada diff yang bermakna:
git diff -w # Ignore all whitespace changes
git diff -b # Ignore whitespace amount changes
4. Review dengan Konteks
Lebih banyak baris konteks membantu memahami kode di sekitarnya:
git diff -U10 # Show 10 lines of context (default is 3)
Menangani Konflik Merge
Ketika Git menemukan perubahan yang bertentangan, Git menandai konflik dalam file:
<<<<<<< HEAD
const timeout = 5000;
=======
const timeout = 10000;
>>>>>>> feature-branch
Untuk menyelesaikan:
- Pahami kedua perubahan — mengapa masing-masing dibuat?
- Putuskan versi mana yang dipertahankan, atau gabungkan keduanya
- Hapus penanda konflik
- Uji hasilnya
Untuk merge yang kompleks, gunakan alat merge tiga arah yang menampilkan ancestor bersama bersama kedua versi.
Membandingkan Konten Non-Teks
JSON Diff
Diff teks standar kesulitan dengan JSON karena urutan key dan perubahan format menghasilkan noise. Diff JSON semantik membandingkan struktur data yang sebenarnya. Periksa alat JSON Diff kami untuk perbandingan struktural.
CSV Diff
Data tabel membutuhkan perbandingan yang sadar kolom. Diff standar memperlakukan setiap baris sebagai string, melewatkan perubahan tingkat sel.
File Biner
Diff tidak dapat membandingkan file biner secara bermakna. Untuk gambar, gunakan alat diff visual. Untuk dokumen, konversi ke teks terlebih dahulu atau gunakan alat perbandingan khusus format.
Diff dalam Otomatisasi
Pipeline CI/CD
Gunakan diff untuk memverifikasi output yang diharapkan dalam pengujian:
command_under_test > actual_output.txt
diff expected_output.txt actual_output.txt
# Exit code 0 = identical, 1 = different
Deteksi Penyimpangan Konfigurasi
Bandingkan konfigurasi produksi dengan keadaan yang diharapkan:
diff deployed_config.yaml expected_config.yaml
Pelacakan Perubahan Dokumentasi
Lacak perubahan dalam dokumentasi untuk review:
git diff --stat HEAD~5..HEAD -- docs/
FAQ
Apa arti "hunk" dalam output diff?
Hunk adalah blok perubahan yang berdekatan dalam sebuah diff. Setiap baris @@ memulai hunk baru. Git mengelompokkan perubahan yang berdekatan menjadi satu hunk — jika dua perubahan berada dalam 3 baris satu sama lain (konteks default), mereka muncul dalam hunk yang sama. Hunk dapat di-stage secara independen menggunakan git add -p.
Bagaimana cara membandingkan dua branch di Git?
Gunakan git diff branch1..branch2 untuk melihat semua perbedaan antara dua branch. Tambahkan --stat untuk ringkasan, atau -- path/to/file untuk membandingkan file tertentu. Untuk membandingkan apa yang telah ditambahkan branch sejak bercabang, gunakan tiga titik: git diff branch1...branch2.
Sumber Terkait
- Pemeriksa Diff Teks — Bandingkan teks secara berdampingan di browser Anda
- Panduan Debugging JSON Diff — Perbandingan struktural untuk data JSON
- Lembar Contekan Regex — Pencocokan pola untuk menemukan perubahan spesifik