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 sebuah teks untuk dibandingkan

Apa yang dilakukan alat ini

Sebuah diff menjawab satu pertanyaan dengan persis: 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 sebuah 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 browser Anda.

Bagian terakhir itu lebih penting bagi sebuah alat diff daripada bagi kebanyakan: hal yang dibandingkan orang cenderung privat — dua versi sebuah konfigurasi produksi, sebuah kueri sebelum dan sesudah pengoptimalan, badan respons yang bekerja kemarin terhadap yang gagal hari ini. 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 sebuah revisi dokumen. Terpadu menyisipkannya 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 pada selokannya, jadi sebuah temuan di sini memetakan langsung 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 sebuah diff terbaca — perbandingan naif yang bersinkronisasi ulang dengan buruk setelah sebuah perubahan melaporkan seluruh blok sebagai diganti, tempat Myers menunjuk persis dua 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 sebuah tab browser, jadi melampaui jarak suntingan dua ribu alat ini kembali menampilkan semuanya sebagai diganti — dan mengatakannya dengan sebuah pemberitahuan ketimbang diam-diam.

Opsi spasi dan besar-kecil huruf

Banyak perbedaan nyata tetapi tak relevan. Sebuah berkas yang diindentasi ulang dari tab ke spasi, sebuah spasi ujung yang ditambahkan penyunting, sebuah kata kunci yang dikapitalkan ulang — semuanya perubahan asli, 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 sebuah perubahan indentasi-saja berhenti tampil sebagai baris yang dimodifikasi. Spasi di dalam sebuah 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 (sebuah hunk) diawali sebuah 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 sebuah tiket atau tinjauan kode, dikirim ke seorang rekan, atau diterapkan secara mekanis: disimpan ke sebuah berkas, "git apply" atau perintah patch Unix akan memutar ulang perubahan ke aslinya. Satu detail yang layak diketahui: sebuah 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 tak 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 sebuah pemberitahuan. Untuk dua versi dokumen yang sama Anda tak akan pernah menemuinya; membandingkan dua berkas tak berhubungan akan.
Bagaimana saya menerapkan patch yang disalin?
Simpan ke sebuah berkas, lalu jalankan "git apply thefile.patch" dalam repositori, atau "patch original.txt thefile.patch" dengan alat Unix klasik. Patch dihasilkan terhadap teks asli persis, jadi ia diterapkan dengan bersih selama targetnya tak bergeser.
Apakah ada teks saya yang diunggah?
Tidak. Perbandingan berjalan sepenuhnya di browser 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.