Diff algoritmlari qanday ishlaydi
Ushbu sahifadagi har bir diff koʻrinishi Myers algoritmi tomonidan ishlab chiqiladi — ikkita token ketma-ketligi oʻrtasidagi eng qisqa tahrir skriptini D tahrir masofasida O((N+M)D) vaqtda topadigan Eugene W. Myers ning 1986 yilgi texnikasi. Algoritm Eng Uzun Umumiy Ketma-Ketlik muammosi atrofida qurilgan va dvigatel ochiq manba jsdiff kutubxonasidan foydalanib toʻliq brauzeringizda ishlaydi.
- Kirishlarni tokenlashtirish — Taqqoslashdan oldin algoritm har bir kirishni tokenlar ketma-ketligiga boʻladi. Qator aniqligida yangi qator belgisi boʻyicha boʻladi; soʻz aniqligida boʻshliq va tinish belgilari chegaralarida boʻladi; belgi aniqligida har bir Unicode kod nuqtasini oʻzining tokeni sifatida qabul qiladi.
- Tahrir grafini qurish — Myers algoritmi taqqoslashni oʻngga harakat "asldan oʻchirish" degani, pastga harakat "oʻzgartirilgandan qoʻshish" degani va diagonalga harakat "token ikkalasida ham mos keladi" degani boʻlgan 2D panjarasidagi yoʻl sifatida modellashtiradi. Algoritm eng qisqa diagonal-ogʻir yoʻlni topadi.
- EUK ni ajratib olish — Eng qisqa yoʻldagi diagonal harakatlar Eng Uzun Umumiy Ketma-Ketlikni — ikkala kirishda ham xuddi shu nisbiy tartibda paydo boʻladigan tokenlarni — kuzatadi. EUK dagi har bir token "oʻzgartirilmagan"; qolgan hamma narsa qoʻshimcha yoki oʻchirish.
- Oldindan qayta ishlash opsiyalarini qoʻllash — "Katta-kichik harfni eʼtiborsiz qoldirish" ni yoqsangiz, EUK oʻtishidan oldin ikkala kirish kichik harfga aylanadi, shuning uchun "SALOM" va "salom" bir xil hisoblanadi. "Boʻshliqlarni eʼtiborsiz qoldirish" bir nechta boʻshliqlarni bittaga toʻplaydi. "Har bir qatorni qirqish" taqqoslashdan oldin qator boshidagi va oxiridagi boʻshliqlarni olib tashlaydi.
- Tanlangan koʻrinishni koʻrsatish — Natija xuddi shu EUK natijasi uch usulda koʻrsatiladi: Yon-yon aslni chapda va oʻzgartirilganini oʻngda qizil va yashil qator taʼkidlari bilan ikki ustunli panjarada koʻrsatadi. Birlashgan
git diffchiqishiga oʻxshab − va + prefiks qatorlari bilan bitta ustun koʻrsatadi. Inline bir xil matn oqimida oʻchirishlarni qizil chiziq va qoʻshimchalarni yashil tagchiziq sifatida koʻrsatadi. - Xulosa chizigʻini hisoblash — Koʻrsatishdan keyin vosita qancha token qoʻshilgani, olib tashlangani va oʻzgartirilmaganini sanaydi, keyin oʻxshashlikni oʻzgartirilmagan tokenlar nisbati sifatida ikkala kirish uzunligidan kattasiga hisoblaydi. 100% oʻxshashlik kirishlar oldindan qayta ishlash opsiyalaridan keyin bir xil ekanligini anglatadi.
Nima uchun diff tekshiruvchidan foydalanish kerak
- Git mijozisiz kodni koʻrib chiqish — Konfiguratsiya faylining, SQL migratsiyasining yoki shell skriptining ikki versiyasini joylashtiring va repo klonlash, filiallarni almashtirish yoki CI quvurini kutmasdan nima oʻzgarganini koʻring. Vosita juft dasturlash paytida tez koʻrib chiqish uchun, Git tarixi ulashmagan pudratchi topshiriqlarida va versiya nazoratidan butunlay oldin boʻlgan eski kod bazalari uchun qulay. Birlashgan koʻrinish suhbat ipiga yoki biletga toʻgʻridan-toʻgʻri nusxalash mumkin boʻlgan natija chiqaradi.
- Shartnoma va hujjat redlinelari — Soʻz darajasidagi diff Word ning Oʻzgarishlarni Kuzatish panelidan tezroq shartnoma loyihalari oʻrtasida qaysi shartlar oʻzgarganini koʻrsatadi. Birinchi qoralamadan A bandini va ijro etilgan nusxadan B bandini joylashtiring va almashtirish aniq koʻchgan iborada qizil-yashilni yoqadi. Yuristlar va yetkazib berish jamoalari shartnoma imzolanishidan oldin oxirgi daqiqadagi redlinlar koʻrib chiqilmay ketmaganini tekshirish uchun buni ishlatadilar.
- Esse va qoralama qayta koʻrishlar — Birinchi qoralamani muharrirlangan versiya bilan taqqoslaydigan yozuvchilar har almashtirish, kiritish va qisqartishni ikkala nusxani qayta oʻqimasdan koʻrish uchun soʻz aniqligiga oʻtishi mumkin. Xuddi shu ish oqimi manbaga nisbatan oʻzgarishlarni tekshiruvchi tarjimonlar, nusxa tahrirlash muallif ovozini saqlaganini tekshiruvchi muharrirlar va nashr etilgan maqolani topshirilgan qoralama bilan kelishtirayotgan jurnalistika jamoalari uchun ishlaydi.
- Jurnal va konfiguratsiya taqqoslash — Ikki server konfiguratsiya suratini, ikki cron jadvalini yoki ikki
ps auxnatijasini taqqoslaydigan tizim ma’murlari qator aniqligidan 200 qatorli faylda yagona oʻzgartirilgan parametrni soniyalar ichida topish uchun foydalanishi mumkin. Uni Boʻshliqlarni-eʼtiborsiz opsiyasi bilan juftlang va shovqinli hizalash-faqat diff aslida muhim parametr oʻzgarishlariga qisqaradi.
Keng tarqalgan ilovalar
Matn diffi yozish, ishlab chiqish va operatsiya ishidagi har bir tahrirlash tsiklining oxirida paydo boʻladi.
- Pull request koʻrib chiqish: ikkita funksiya amalga oshirishni mantiq oʻzgarishini filiallar tekshirmay, CI pipelinesiz tasdiqlashdan oldin tushunish uchun yon-yonga joylashtiring.
- Lokalizatsiya QA: tarjimon kiritgan qoʻshimchalar, tushirish yoki atama almashuvlarni aniqlash uchun inglizcha manba satrini uning tarjimasi bilan soʻz darajasida taqqoslang.
- Hodisalar tahlili: hodisadan oldingi konfiguratsiya oʻzgarishini ajratish uchun ikki Kubernetes manifest suratini yoki ikki "docker inspect" natijasini qator darajasida diff qiling.
Amaliy misol
Besh qatorli server konfiguratsiyasini oling. Asl: host=localhost, port=5432, dbname=app_db, user=app, password=secret. Oʻzgartirilgan: host=db.prod.example.com, port=5432, dbname=app_db, user=app_prod, password=secret. Qator aniqligida va Yon-yon koʻrinishida 1-qator chapda qizil (host=localhost) va oʻngda yashil (host=db.prod.example.com), 4-qator qizil (user=app) va yashil (user=app_prod), 2, 3 va 5-qatorlar ikki tomonda ham oʻzgartirilmagan qoladi. Xulosa chizigʻi 2 qoʻshimcha, 2 oʻchirish, 3 oʻzgartirilmagan va 60% oʻxshashlik — beshdan uchta qator saqlanganini xabar qiladi. Soʻz aniqligiga oʻting va diff yanada torayadi: faqat 1 va 4-satrlarda = ning oʻng tomonidagi qiymatlar yonadi, kalitlar oʻzgartirilmagan qoladi va oʻxshashlik taxminan 85% ga koʻtariladi, chunki EUK endi host, user va atrofidagi tinish belgilarini saqlanganlar sifatida sanaydi.
Bu brauzerimda ishlayaptimi?
Ha. Butun diff hisobi sahifa bilan yuklanadigan ochiq manba jsdiff kutubxonasidan foydalanib mijoz tomonida ishlaydi. Siz yozgan, joylashtirgan yoki taqqoshlagan hech narsa hech qanday serverga yuborilmaydi. Buni oʻzingiz tasdiqlashingiz mumkin: brauzer DevTools ni oching, Network yorligʻiga oʻting, jurnalni tozalang, Taqqoslash ni bosing va taqqoslash bosqichida nol tarmoq soʻrovlari qilinganligini tasdiqlang.
Oʻxshashlik foizi nima maʼnoni anglatadi?
Oʻxshashlik oʻzgartirilmagan tokenlar / max(asl jami tokenlar, oʻzgartirilgan jami tokenlar) sifatida hisoblanadi. 100% ball ikkala kirishning oldindan qayta ishlash opsiyalarini (harf kichiklashtirish, boʻshliqlarni toʻplash, qatorlarni qirqish) qoʻllagandan keyin bir xil ekanligini anglatadi. 0% ball kirishlar oʻrtasida umumiy token yoʻqligini anglatadi. Metrik tahrir masofasining taxminiy baholashi — tez oʻlchov sifatida foydali — plagiat yoki originallik balli emas.
JSON / YAML / XML ni semantik jihatdan diff qila olamanmi?
Bu vositada emas. Bu matn darajasidagi diff, shuning uchun JSON yoki XML ning faqat boʻshliq formatlash maʼlumotlar mantiqiy bir xil boʻlganda ham koʻplab oʻzgarishlarni koʻrsatadi. JSON dagi ob’ekt kalitlarini qayta tartiblash ham koʻpchilik tahlilchilar kalit tartibini ahamiyatsiz deb qabul qilsa ham oʻzgarishlar sifatida koʻrsatiladi. Tahlil qilingan ob’ekt daraxtlarini taqqoslaydigan va kalit tartibini hamda formatlashni eʼtiborsiz qoldiradigan haqiqiy semantik diff uchun maxsus JSON Diff vositasini rejalashtirilmoqdamiz. Hozircha ikkala kirishni bir xil chekinish va kalit tartibiga normallashtiring, keyin ularni bu yerga joylashtiring.
Birlashgan va yon-yon koʻrinishlar qanday farqlanadi?
Yon-yon ikki ustunni koʻrsatadi: aslini chapda va oʻzgartirilgan versiyani oʻngda, chiqarilgan qatorlar chapda qizil va qoʻshilgan qatorlar oʻngda yashil bilan taʼkidlangan. Oʻzgartirilmagan qatorlar ikki ustunda ham bir xil satrda hizalanib paydo boʻladi. Birlashgan olib tashlangan qatorlar uchun − prefiks va qizil fon, qoʻshilgan qatorlar uchun + prefiks va yashil fon bilan bitta ustunni koʻrsatadi — git diff terminalda chop etadigan xuddi shu tartib. Natijani patch fayl sifatida nusxalashni yoki uni kodni koʻrib chiqish ipiga joylashtirmoqchi boʻlsangiz birlashtirilganidan foydalaning. Nimaning nimani almashtirganligi vizual hizalanishi xom patch matnidan muhimroq boʻlganda yon-yon koʻrinishdan foydalaning.
Aslni chapga, oʻzgartirilganini oʻngga joylashtiring, koʻrinish va aniqlikni tanlang va taqqoslash millisekundlarda paydo boʻladi. Jonli rejimni yoqing va siz har bir tomonni tahrirlayotganingizda diff har klaviatura bosilishida qayta ishlaydi. Natijani toʻgʻridan-toʻgʻri git apply iste’mol qiladigan standart birlashtirilgan .patch fayli sifatida yuklab oling. Yuklash yoʻq, hisob yoʻq, vendor API kaliti yoʻq, kvota yoʻq.