Artikel
Bandingkan coretan kod tanpa memuat naiknya
Setiap kali anda menampal dua fail ke dalam alat diff dalam talian, kod tersebut meninggalkan mesin anda. Fail konfigurasi, pertanyaan pangkalan data, kunci API yang terbenam dalam coretan .env: semuanya bergerak ke pelayan yang tidak anda kawal. Artikel ini merangkumi cara algoritma diff berfungsi, maksud pilihan perincian dalam amalan, dan mengapa mengekalkan perbandingan secara tempatan penting.
Apa yang Dikira oleh Diff
Alat diff mengambil dua teks dan mencari set perubahan minimum yang menukar satu kepada yang lain. Idea terasnya ialah jujukan lazim terpanjang, atau LCS: jujukan terpanjang baris (atau token) yang muncul dalam kedua-dua teks dengan susunan yang sama, walaupun tidak bersebelahan. Segala yang tidak berada dalam jujukan lazim itu sama ada penambahan dalam versi baharu atau pemadaman daripada versi lama. Algoritma klasik untuk ini adalah daripada Myers (1986), yang mencari skrip suntingan terpendek dalam masa O((N+M)D), di mana N dan M ialah panjang kedua-dua teks dan D ialah bilangan suntingan. Dalam amalan, kebanyakan alat menambah langkah prapemprosesan untuk mengabaikan baris lazim permulaan dan baris lazim penutup, mengurangkan masalah kepada kawasan yang berubah. Hasilnya ialah patch: jujukan hunk, masing-masing menerangkan blok baris konteks, pemadaman, dan penambahan yang berterusan. Ini ialah format yang digunakan oleh Unix diff, Git, dan kebanyakan alat semakan kod.

Perincian Baris, Perkataan, dan Aksara
Perincian diff menentukan apa yang dikira sebagai unit perbandingan. Diff berasaskan baris ialah lalai dalam kebanyakan alat: setiap baris dianggap sebagai satu token. Ini pantas dan menghasilkan output yang mudah dibaca dalam konteks, tetapi menandakan keseluruhan baris sebagai berubah walaupun hanya satu perkataan pada baris itu berbeza. Diff peringkat perkataan memecah setiap baris kepada perkataan sebelum menjalankan LCS. Ini memberikan gambaran yang lebih halus tentang apa yang berubah dalam baris, yang berguna untuk prosa, nilai konfigurasi, atau JSON. Diff peringkat aksara lebih jauh lagi dan boleh menyerlahkan satu huruf yang berubah dalam pengecam yang panjang. Pengendalian ruang kosong menambah bunyi. Baris yang berakhir dengan CRLF dan baris yang sama yang berakhir dengan LF akan ditunjukkan sebagai berbeza di bawah perbandingan bait ketat. Kebanyakan alat menawarkan bendera untuk menormalkan penghujung baris sebelum membandingkan. Begitu juga, ruang ketinggalan, lekukan tab-berbanding-ruang, dan baris kosong semua boleh menghasilkan output diff yang tidak perlu. Membolehkan penormalan ruang kosong biasanya ialah lalai yang betul apabila membandingkan kod daripada editor atau sistem pengendalian berbeza.
Risiko Privasi Alat Diff Dalam Talian
Perkhidmatan diff dan pastebin dalam talian adalah mudah: buka URL, tampal dua coretan, dapatkan output berwarna. Masalahnya ialah teks yang anda tampal dihantar ke pelayan pihak ketiga. Bergantung pada perkhidmatan, teks itu mungkin dilog, diindeks, disimpan selama-lamanya, atau dikongsi dengan pembekal analitik. Ini paling penting apabila kod mengandungi bahan sensitif. Kelayakan yang dikodkan keras, nama hos dalaman, logik perniagaan proprietari, atau data yang boleh mengenal pasti peribadi semuanya boleh berakhir dalam tampal. Walaupun tanpa rahsia yang jelas, struktur kod dalaman boleh mendedahkan keputusan seni bina yang anda lebih suka simpan persendirian. Risiko ini bukan hipotetikal. Penyelidik keselamatan berulang kali menemui kelayakan dan token dalaman dalam tampal awam. Sesetengah perkhidmatan menyimpan tampal walaupun selepas pengguna memadamnya, kerana salinan wujud dalam cache atau sandaran. Tiada cara untuk mengesahkan apa yang dilakukan perkhidmatan jauh dengan teks setelah ia tiba. Satu-satunya pengurangan yang boleh dipercayai ialah menyimpan diff secara tempatan, yang bermakna menjalankannya dalam alat yang tidak pernah menghantar teks melalui rangkaian.

Kegunaan Praktikal untuk Diff Tempatan
Diff bukan sahaja untuk semakan kod. Beberapa kes biasa di mana diff tempatan berguna: Menyemak suntingan pada dokumen atau fail konfigurasi sebelum membuat komit. Membandingkan dua versi Dockerfile, konfigurasi Nginx, atau manifes Kubernetes untuk memahami tepat apa yang berubah antara penerapan. Menyemak hanyutan konfigurasi antara persekitaran. Jika konfigurasi pengeluaran dan pementasan sepatutnya sama kecuali nama hos dan rahsia, diff serta-merta menunjukkan sebarang pencapahan yang tidak disengajakan. Membandingkan respons API semasa nyahpepijat. Menampal dua muatan JSON daripada REST atau GraphQL API dan menjalankan diff peringkat perkataan menunjukkan dengan tepat medan yang ditambah, nilai yang berubah, atau kunci yang dibuang tanpa membaca beratus-ratus baris secara manual. Menyemak kod yang dijana LLM berbanding garis dasar. Apabila model menulis semula fungsi, diff peringkat baris menunjukkan logik mana yang berubah dan mana yang kekal sama, lebih pantas daripada membaca kedua-dua versi secara bebas. Dalam semua kes ini, teks yang terlibat boleh sensitif, dan memastikannya tidak berada di pelayan jauh ialah pilihan yang mudah.
Lakukan dalam Pelayar, Tanpa Memuat Naik
Alat text-diff di laman ini menjalankan keseluruhan pengiraan diff dalam pelayar anda menggunakan JavaScript. Anda menampal dua teks ke dalam dua panel dan diff dipaparkan serta-merta, baris demi baris, sehingga 3000 baris setiap sisi. Tiada yang dihantar ke pelayan. Teks tidak pernah meninggalkan peranti anda. Pelaksanaan menggunakan algoritma berasaskan LCS piawai yang beroperasi pada baris: setiap baris ialah token, dan alat ini menentukan sama ada ia tidak berubah, ditambah, atau dibuang dengan mencari subjujukan sepunya terpanjang antara kedua-dua versi. Baris yang tidak berubah dipaparkan tanpa sorotan, baris yang ditambah dalam hijau, baris yang dibuang dalam merah, di sebelah kiraan berjalan bagi penambahan dan pembuangan. Tiada mod peringkat perkataan atau aksara dan tiada togol penormalan ruang kosong buat masa ini, jadi baris yang hanya berbeza pada ruang kosong hujung atau gaya akhir baris masih dipaparkan sebagai berubah. Kerana pengiraan berjalan di bahagian klien, ia berfungsi di luar talian. Tiada akaun, tiada sejarah, tiada pengekalan. Anda boleh membandingkan fail konfigurasi tempatan berbanding templat, menyemak patch sebelum menggunakannya, atau menyemak dua respons API tanpa mana-mana teks itu mencapai pihak ketiga.
Alat dalam artikel ini
Soalan lazim
Adakah diff berasaskan baris atau berasaskan perkataan lebih baik untuk kod?
Untuk kebanyakan tugas semakan kod, diff berasaskan baris ialah piawaian dan paling mudah dibaca, kerana kod disusun mengikut baris. Diff berasaskan perkataan boleh membantu apabila baris panjang dan hanya sebahagian kecil berubah, seperti dalam nilai JSON satu baris, tetapi alat ini membandingkan pada peringkat baris sahaja; untuk kes itu, gunakan baris yang diserlahkan sebagai penunjuk dan cam sendiri perbezaan kecil di dalamnya.
Mengapa alat diff dalam talian menimbulkan risiko privasi walaupun menggunakan HTTPS?
HTTPS melindungi teks semasa transit daripada penyadapan, tetapi tidak melindunginya setelah tiba di pelayan. Pengendali perkhidmatan mempunyai akses penuh kepada kandungan yang ditampal dan boleh melognya, menyimpan, atau berkongsinya. TLS adalah tentang keselamatan pengangkutan, bukan tentang apa yang dilakukan penerima dengan data tersebut.
Adakah alat text-diff menyimpan sejarah perbandingan lepas?
Tidak. Alat ini tidak mempunyai backend dan tidak membuat sebarang permintaan rangkaian. Setelah anda menutup atau memuat semula tab, teks hilang. Tiada akaun, tiada sejarah yang disimpan, dan tiada log di bahagian pelayan.