Diff teks

Bandingkan dua teks berdampingan atau sebagai diff terpadu, dengan sorotan tingkat kata, opsi spasi dan huruf, serta patch yang bisa disalin.

Asli
Ubahan
Hasil

Tempel dua versi teks untuk dibandingkan

Apa yang dilakukan alat ini

Diff menjawab satu pertanyaan dengan tepat: apa yang harus berubah untuk mengubah satu teks menjadi yang lain? Tempel yang asli di kiri dan versi yang lebih baru di kanan, dan alat ini menampilkan setiap baris yang dihapus, setiap baris yang ditambahkan, dan — di dalam baris yang dimodifikasi — kata-kata persis yang berbeda, disorot. Itu adalah pertanyaan yang sama yang dijawab git pada setiap komit, dihitung dengan keluarga algoritme yang sama, sepenuhnya di peramban Anda.

Bagian terakhir itu lebih penting bagi alat diff daripada bagi kebanyakan: hal yang dibandingkan orang cenderung privat — dua versi konfigurasi produksi, kueri sebelum dan sesudah pengoptimalan, badan respons yang kemarin bekerja dibandingkan dengan yang hari ini gagal. Di sini mereka tak pernah meninggalkan perangkat Anda.

Berdampingan atau terpadu

Kedua tampilan menampilkan perbandingan yang sama yang ditata berbeda. Berdampingan menaruh yang asli di kiri dan teks yang diubah di kanan, dengan baris yang cocok disejajarkan — cara alami membaca revisi dokumen. Terpadu menyelang-nyelingkan keduanya dalam satu kolom, penghapusan berprefiks tanda minus dan penambahan tanda plus — format yang dipakai git log dan tinjauan kode, lebih ringkas dan lebih baik ketika perubahan jarang. Kedua tampilan menandai nomor baris asli di tepi tiap barisnya, jadi temuan di sini langsung terpetakan kembali ke berkas Anda.

Bagaimana diff dihitung

Alat ini mengimplementasikan algoritme perbedaan Myers, diterbitkan pada 1986 dan masih default di git hari ini. Ia menemukan skrip suntingan terpendek: jumlah minimum penghapusan dan penyisipan baris yang mengubah satu teks menjadi yang lain. Keminimalan itulah yang membuat diff terbaca — perbandingan naif yang bersinkronisasi ulang dengan buruk setelah perubahan melaporkan seluruh blok sebagai diganti, sedangkan Myers menunjuk tepat pada kedua baris yang benar-benar berpindah.

Baris dibandingkan dulu, lalu tiap pasang baris yang berubah dibandingkan lagi pada tingkat kata untuk menghasilkan sorotan. Satu batasan jujur: ketika dua teks nyaris tak punya kesamaan, pencarian skrip minimal akan menelan lebih banyak memori daripada yang seharusnya dihabiskan tab peramban, jadi melampaui jarak suntingan dua ribu alat ini beralih ke menampilkan semuanya sebagai diganti — dan mengatakannya dengan pemberitahuan ketimbang diam-diam.

Opsi spasi dan besar-kecil huruf

Banyak perbedaan nyata tetapi tak relevan. Berkas yang diindentasi ulang dari tab ke spasi, spasi ujung yang ditambahkan penyunting, kata kunci yang dikapitalkan ulang — semuanya perubahan sungguhan, semuanya derau ketika yang ingin Anda ketahui adalah apakah logikanya berubah. Kedua kotak centang menangani kasus umum: satu mengesampingkan spasi di tepi tiap baris, yang lain mengesampingkan besar-kecil huruf. Mereka hanya memengaruhi apa yang dihitung sebagai perubahan — tampilan selalu menampilkan tiap baris persis seperti Anda tempel.

  • Abaikan spasi tepi — spasi dan tab di awal dan ujung dibuang sebelum membandingkan, jadi perubahan indentasi-saja berhenti tampil sebagai baris yang dimodifikasi. Spasi di dalam baris tetap dihitung.
  • Abaikan besar-kecil huruf — baris dan kata yang berbeda hanya dalam kapitalisasi dibandingkan sebagai sama. Berguna untuk kata kunci SQL, nama header HTTP, dan konteks tak-peka-besar-kecil lain.

Patch yang bisa Anda salin

Tombol salin menghasilkan perbandingan dalam format diff terpadu — lingua franca perubahan kode. Setiap blok perubahan (hunk) diawali header @@ yang menamai nomor baris yang dicakupnya, baris yang dihapus diawali tanda minus, baris yang ditambahkan tanda plus, dan beberapa baris konteks tak berubah mengelilingi tiap hunk sehingga perubahannya bisa ditemukan bahkan jika berkasnya bergeser sedikit.

--- a
+++ b
@@ -1,3 +1,3 @@
 server:
-  port: 8080
+  port: 9090
   timeout: 30

Teks ini bisa ditempel ke tiket atau tinjauan kode, dikirim ke seorang rekan, atau diterapkan secara mekanis: disimpan ke berkas, "git apply" atau perintah patch Unix akan memutar ulang perubahan ke aslinya. Satu detail yang layak diketahui: berkas yang tak diakhiri baris-baru mendapat penanda "\ No newline at end of file" dalam patch-nya — alat ini mereproduksi perilaku itu, karena baris-baru akhir yang hilang adalah perbedaan nyata dan berpura-pura sebaliknya membuat patch yang gagal diterapkan.

Pertanyaan yang sering diajukan

Mengapa ia melaporkan perubahan padahal kedua teks tampak sama?
Perbedaannya mungkin tak terlihat: spasi di ujung, tab lawan spasi, atau baris-baru yang hilang setelah baris terakhir. Nyalakan "abaikan spasi tepi" untuk menyingkirkan dua yang pertama. Perbedaan baris-baru-di-ujung tetap dilaporkan — git melaporkannya juga, dengan penanda tanpa-baris-baru — karena perbedaan tingkat-bita itu nyata bahkan ketika tak ada glif menampilkannya.
Mengapa teks yang sangat berbeda tampil sebagai satu penggantian besar?
Menemukan diff minimal menelan memori sebanding dengan kuadrat seberapa berbeda teksnya. Melampaui jarak suntingan sekitar dua ribu perubahan baris alat ini beralih ke tampilan kasar semua-diganti dan menampilkan pemberitahuan. Untuk dua versi dokumen yang sama Anda tak akan pernah menemuinya; membandingkan dua berkas tak berhubungan pasti menemuinya.
Bagaimana saya menerapkan patch yang disalin?
Simpan ke berkas, lalu jalankan "git apply thefile.patch" dalam repositori, atau "patch original.txt thefile.patch" dengan alat Unix klasik. Patch dihasilkan terhadap teks asli yang persis itu, jadi ia diterapkan dengan bersih selama targetnya tak bergeser.
Apakah teks saya dikirim ke server?
Tidak. Perbandingan berjalan sepenuhnya di peramban Anda — tak ada server yang bisa melihat kedua teks. Itulah inti melakukannya di sisi klien: konfigurasi, kredensial, dan data produksi bisa dibandingkan tanpa meninggalkan mesin Anda.

Alat terkait

  • Diff JSON

    Perbandingan baris per baris menyebut dua dokumen JSON berbeda hanya karena salah satunya diminifikasi atau kuncinya ditulis dalam urutan lain, dan itu hampir tidak pernah menjadi perubahan yang Anda cari. Halaman itu membandingkan datanya sendiri, bukan cara penulisannya, dan menyebut tiap perbedaan dengan jalur tempatnya berada.

  • Inspektur karakter Unicode

    Lihat persis dari karakter apa string terbuat.

  • Pembuat slug URL

    Ubah judul apa pun menjadi slug URL yang bersih.

  • Konverter huruf besar-kecil

    Konversi antara camelCase, snake_case, Title Case, dan lainnya.