§

Options

Kallo
Ƙaurar
Preprocessing
§

Input

Ƙungiyoyin haɓaka software a Najeriya da faɗin Afirka ta Yamma suna amfani da kwatantawa a kullum — duba canjin fayil ɗin tsara, tabbatar da canjin kwangila, ko bincika kurakuran fassara. Gudu da kwatantin a cikin tab ɗin mai bincike — babu lodawa, babu asusun, babu log na wani bangare na uku — yana kiyaye aikin sauri don injiniyoyi kuma yana yarda ga manufofi na sarrafa bayanai a kowace cibiya.

Yaya algorithms na diff ke aiki

Ana samar da kowane kallo na diff a kan wannan shafin ta hanyar algorithm na Myers — dabarar 1986 ta Eugene W. Myers wanda ke nemo ɗan gajeren rubutun gyarawa tsakanin jerin tokens biyu a lokacin O((N+M)D), inda D shine nisan gyarawa. An gina algorithm a kusa da matsalar Longest Common Subsequence, kuma injin yana gudana gaba ɗaya a cikin mai bincike ta amfani da ɗakin karatu na jsdiff mai buɗe source.

  1. Raba shigarwa zuwa tokens — Kafin kwatantawa, algorithm yana raba kowane shigarwa zuwa jerin tokens. Ƙaurar layi tana raba a kan layukan sabon; ƙaurar kalma tana raba a kan iyakokin sarari da alamomi; ƙaurar harafi tana ɗaukar kowane ɗigon lambar Unicode a matsayin token nasa.
  2. Gina graph ɗin gyarawa — Algorithm na Myers yana yin kwatantin a matsayin hanya ta grid ɗin 2D inda motsi zuwa dama na nufin "share daga ainihi", motsi zuwa ƙasa na nufin "saka daga canjin", da motsi na diagonal na nufin "token ya dace a duka biyun". Algorithm yana nemo hanyar mafi gajere da ke da yawancin motsin diagonal.
  3. Ciro LCS — Motsin diagonal a cikin hanyar mafi gajere suna bin Longest Common Subsequence — tokens waɗanda suke bayyana a cikin shigarwa biyu a oda iri ɗaya na dangi. Kowane token a cikin LCS "ba a canza ba"; komai sai haka ko ƙara ne ko cirewa.
  4. Amfana da zaɓuɓɓukan kafin-sarrafa — Idan ka kunna "Yi watsi da haruffa", ana ƙanƙantawa da shigarwa biyu kafin LCS pass don "SANNU" da "sannu" su ƙidaya a matsayin iri ɗaya. "Yi watsi da sarari" yana tattara sarari da yawa zuwa ɗaya. "Yanke kowane layi" yana cirewa da sarari na gaba da na baya a kowane layi kafin kwatantawa.
  5. Nuna kallo da aka zaɓa — Fitar ita ce sakamakon LCS iri ɗaya da aka nuna ta hanya uku: Gefen-da-gefen yana nuna ainihi a hagu da canjin a dama a cikin grid ɗin ginshiƙi biyu tare da ƙiyayen layuka masu ja da kore. Haɗewa yana nuna ginshiƙi ɗaya tare da layukan prefix − da +, kamar fitar na git diff. Layi-cikin-layi yana nuna cirewa a matsayin layi na ja mai katse da ƙarar a matsayin layi na kore a cikin igiyar rubutu iri ɗaya.
  6. Lissafin ɗigon taƙaitawa — Bayan nuna, kayan aiki yana ƙidaya nawa tokens aka ƙara, cire, da kiyaye, sannan yana lissafin kamanceceniya a matsayin rabo na tokens da ba a canza ba zuwa mafi girma na tsawon shigarwa biyu. Kamanceceniya na 100% na nufin shigarwa sun yi iri ɗaya bayan kafin-sarrafa.

Me ya sa amfani da mai duba bambanci

  • Nazarin lambar ba tare da abokin ciniki na Git ba — Liƙa nau'ikan biyu na fayil ɗin tsara, ƙaura na SQL, ko rubutun shell ka gani abin da ya canza ba tare da kwaso repo, sauyi rassan, ko jiran tsarin CI ba. Kayan aiki yana da amfani don nazari da sauri yayin shirye-shiryen gado, don mika mai kwangila inda ɗayan bangaren bai raba tarihin Git ɗin su ba, da don codebase na gadon da ya kasance kafin sarrafa sigar a gaba ɗaya. Kallo haɗewa yana samar da fitar da za ka kwafi kai tsaye zuwa zancen chat ko tikiti.
  • Layukan jan layi na kwangila da takardun — Diff na matakin kalma yana nuna waɗanne sharuɗɗa suka canza tsakanin daftarin kwangila da sauri fiye da panel ɗin Track Changes na Word. Liƙa yankuna A daga daftarin farko da yankuna B daga kwafin da aka aiwatar kuma maye gurbin yana haskakawa a jan-akan-kore a daidai jumlar da ta canza. Ana amfani da wannan daga wakilin shari'a da ƙungiyoyin saye don tabbatar da jan layukan na ƙarshe bai wuce nazari ba kafin a sanya hannu a kwangila.
  • Sake dubawa na rubutu da daftarin — Marubutan da ke kwatanta daftarin farko da nau'in da aka shirya suna iya juyawa zuwa ƙaurar kalma don ganin kowane maye gurbi, saka, da yanke ba tare da sake karanta duka kwafin biyu ba. Aikin aiki iri ɗaya yana aiki don masu fassara da ke bincika canjin akan rubutun tushe, don masu shirya da ke duba cewa gyara kwafi ya kiyaye muryar marubucin, da kuma don ƙungiyoyin jarida da ke sasantawa tsakanin labarai da aka buga da daftarin da aka fitar.
  • Log da kwatantin tsara — Masu kula da tsari da ke kwatanta hotunan tsara uwar garke biyu, jadawalin cron biyu, ko fitar na ps aux biyu suna iya amfani da ƙaurar layi don gano ma'aunin da aka canza ɗaya a cikin fayil ɗin layuka 200 a cikin dakiƙa. Haɗa shi tare da zaɓin Yi-watsi-da-sarari kuma diff na layi kawai da ke yin amo yana ƙunshe zuwa canje-canjen ma'auni da ainihin ke da mahimmanci.

Amfani na gama-gari

Diff na rubutu yana bayyana a ƙarshen kowane zagayen shirya a cikin rubutu, haɓakawa, da ayyukan sarrafa.

  • Nazarin pull request: liƙa aiwatar da ayyuka biyu gefen da gefen don fahimtar canjin ma'ana kafin amincewa, ba tare da ciwon kwasowa da rassan ba.
  • Tabbatarwa ta i18n: kwatanta kirtanin tushe na Turanci da daidaitarsa da aka fassara a matakin kalma don gano saka, barin, ko musayar kalmomin da mai fassara ya iya gabatarwa.
  • Binciken tukunci: diff hotunan bayani na Kubernetes biyu ko fitar na "docker inspect" biyu a matakin layi don keɓance canjin tsara da ya gabaci rikici.

Misali na aiki

Ka ɗauki tsarin uwar garke na layi biyar. Ainihi: host=localhost, port=5432, dbname=app_db, user=app, password=secret. Canjin: host=db.prod.example.com, port=5432, dbname=app_db, user=app_prod, password=secret. Tare da ƙaurar layi da kallo na gefen-da-gefen, layi 1 yana nuna jan a hagu (host=localhost) da kore a dama (host=db.prod.example.com), layi 4 yana nuna jan (user=app) da kore (user=app_prod), kuma layuka 2, 3, da 5 sun kasance ba a canza a duka bangarorin. Strip ɗin taƙaitawa yana ba da rahoto da ƙarar 2, cirewa 2, 3 ba a canza ba, da kamanceceniya ta 60% — layuka uku daga biyar sun kasance. Canza zuwa ƙaurar kalma kuma diff yana ƙarƙashin: ƙimominsu kawai da ke a dama na = a layuka 1 da 4 suna haskakawa, maɓallai sun kasance ba a canza ba, kuma kamanceceniya ta hau kusan 85% saboda LCS yanzu yana ƙidaya host, user, da alamomimin da ke kewaye a matsayin sun kasance.

Shin wannan yana gudana a cikin mai bincike na?

Ee. Duka lissafin diff yana gudana a bangaren abokin ciniki ta amfani da ɗakin karatu na buɗe source jsdiff da aka loda tare da shafin. Babu abin da ka rubuta, liƙa, ko kwatanta ake aika zuwa kowane uwar garke. Kana iya tabbatar da shi da kanka: buɗe DevTools na mai bincike, sauya zuwa tab ɗin Network, share log ɗin, danna Kwatanta, ka tabbatar cewa buƙatun cibiyar sadarwa sifili suna kunna don mataki na kwatantawa.

Menene yana nufin kashi na kamanceceniya?

Ana lissafin kamanceceniya a matsayin tokens da ba a canza ba / max(jimilar tokens a cikin ainihi, jimilar tokens a cikin canjin). Maki na 100% na nufin shigarwa biyu sun yi iri ɗaya bayan amfana da zaɓuɓɓukan kafin-sarrafa (na'urar halin haruffa, tattara sarari, yanke layi). Maki na 0% na nufin babu token da ake raba tsakanin shigarwa. Metric yana kiyasin daidai na nisan gyarawa — mai amfani a matsayin ma'aunin sauri — ba maki na dabbara ko ainihi ba.

Zan iya diff JSON / YAML / XML ta hanyar ma'ana?

Ba a cikin wannan kayan aiki ba. Wannan diff ne na matakin rubutu, don haka sake tsara JSON ko XML na sarari kawai har yanzu yana nuna canje-canje da yawa ko da bayanai sun yi iri ɗaya a ma'ana. Sake tsara maɓallai na abin da ke cikin JSON yana nuna a matsayin canje-canje ma duk da yake yawancin masu fassara suna ɗaukar tsarin maɓalli a matsayin ba da mahimmanci. Don diff ta gaske ta ma'ana wanda ke kwatanta bishiyoyin abubuwan da aka fassara kuma ke watsi da tsarin maɓalli da tsara, muna shirya kayan aiki na keɓantaccen JSON Diff. A halin yanzu, daidaita shigarwa biyu zuwa shiga iri ɗaya da tsarin maɓalli kafin liƙa su a nan.

Yaya kallan haɗewa da gefen-da-gefen ke bambanta?

Gefen-da-gefen yana nuna ginshiƙi biyu: ainihin a hagu da nau'in da ya canza a dama, tare da layuka da aka cire masu haskakawa da ja a hagu da layuka da aka ƙara masu haskakawa da kore a dama. Layukan ba a canza ba suna bayyana a cikin ginshiƙi biyu an layana a jere iri ɗaya. Haɗewa yana nuna ginshiƙi ɗaya tare da prefix da bango ja don layukan da aka cire da prefix + da bango kore don layukan da aka ƙara — tsarin iri ɗaya da git diff ke buga a terminal ɗinka. Yi amfani da haɗewa lokacin da kake son kwafin sakamakon a matsayin fayil ɗin patch ko liƙa shi cikin zancen nazarin lambar. Yi amfani da gefen-da-gefen lokacin da layin gani na abin da ya maye gurbin abin da ya fi dacewa fiye da rubutun patch na asali.

Liƙa ainihin a hagu, nau'in da ya canza a dama, zaɓi kallo da ƙaurar, kuma kwatantin yana bayyana a milliseconds. Kunna Yanayin kai tsaye kuma diff yana sake gudana a kowane buga-maballin yayin da kake shirya ɗayan bangaren. Sauke sakamakon a matsayin fayil ɗin haɗewa ma'aunin .patch wanda git apply ke cinye kai tsaye. Babu lodawa, babu asusun, babu maɓallin API na vendor, babu ƙayyade.