Diff Checker

Diff Checker

ሁለት ጽሑፎችን ወይም ኮዶችን በመስመርና በቃል ደረጃ ማሳያ ያወዳድሩ። ጎን-ለጎን ወይም የተዋሃደ፣ ክፍተትን-መተው፣ ፊደል-መጠን-መተው — ሙሉ በሙሉ በአሳሽዎ ውስጥ።

አይደለም። መሣሪያው ሙሉ በሙሉ በዚህ ገጽ ውስጥ የሚሰራ JavaScript ነው። የዲፍ አልጎሪዝሙ (longest-common-subsequence) በሲፒዩዎ ላይ ይሰራል እና ውጤቱ በቀጥታ ወደDOM ይታያል። DevTools → Network ይክፈቱና ይመልከቱ — በዲፍ ጊዜ ምንም ጥያቄ አይነሳም። የውስጥ ኮድ፣ የደንበኛ መረጃ፣ የውል ረቂቆች ወይም በሰርቨር መሣሪያ እንዲመዘገብ የማይፈልጉትን ማንኛውንም ነገር ለመለጠፍ አስተማማኝ ነው።

በመጀመሪያ ሁለቱንም ግቤቶች በመስመሮች ከፋፍለን LCS (longest common subsequence) አልጎሪዝም እንሰራለን። በሁለቱም ጎኖች የሚዛመዱ መስመሮች እኩል ተብለው ይደመቃሉ። የማይዛመዱ መስመሮች መጨመር ከመሰረዝ አጠገብ ሲመጣ በ'ለውጥ' ረድፎች ይጣመራሉ። ለእያንዳንዱ የተጣመረ ለውጥ፣ የተለወጡ ቃላት ብቻ ቀይ/አረንጓዴ እንዲበሩ — መላውን መስመር አይደለም — በመስመሩ ቃላት (በክፍተት ተከፋፍለው) ላይ ሁለተኛ LCS እንሰራለን።

iKit Diff Checker ለምን?

ያለ ማስታወቂያ፣ ብቅ-ባይ መስኮት ወይም የሶስተኛ ወገን ተከታታይ ያለ ንፁህና ፈጣን የጽሑፍ ዲፍ መሞከሪያ — ለገንቢዎች፣ ለጸሐፊዎችና የተቀየረውን ለማየት ለሚፈልግ ሁሉ የተሰራ።

ጎን-ለጎን + የተዋሃዱ እይታዎች

በተከፈለ (ሁለት አምድ፣ ጥንታዊ የIDE ስሜት) እና በተዋሃደ (በ +/− ምልክቶች ያለው አንድ አምድ) መካከል በአንድ ጠቅታ ይቀያይሩ። ሁለቱም እይታዎች የመስመር ቁጥሮችን ያሳያሉ እና እያንዳንዱን ለውጥ በውስጥ ያደምቃሉ።

በቃል ደረጃ ማድመቅ

ሁለት መስመሮች ሲቀየሩ፣ የተለወጡ ቃላት ብቻ እንዲደምቁ ሁለተኛ የቃል-ደረጃ ዲፍ እናሰራለን — መላውን መስመር አይደለም። በ200 ቁምፊ መስመር ውስጥ አንድ የፊደል ስህተትን ለማግኘት ቀላል ያደርገዋል።

ክፍተት-መተው + ፊደል-መጠን-መተው

የመልክ ለውጦችን (እንደገና የተቀረጸ ሕዳግ፣ የፊደል መጠን ማስተካከያ) ለማጣራትና በእውነተኛ አርትዖቶች ላይ ለማተኮር ክፍተትንና የፊደል መጠንን ይቀያይሩ።

በዲዛይን የተጠበቀ ግላዊነት

ሁለቱም ጽሑፎች በአሳሽ ትርዎ ውስጥ ይቆያሉ። የዲፍ አልጎሪዝም በአካባቢ በJavaScript ይሰራል። በDevTools → Network የሚረጋገጥ፡ ሲተይቡ ምንም ጥያቄ አይነሳም።

ስታትስቲክስ + ቅጂ

ስንት መስመሮች እንደተጨመሩ፣ እንደተወገዱ፣ እና እንደተሻሻሉ በአንድ እይታ ይመልከቱ። አንድ ጠቅታ ዲፉን ወደ ቅንጥብ ሰሌዳዎ ይቀዳል ወደ ኮድ ግምገማ ወይም ኮሚት መልዕክት ለመለጠፍ።

ከመስመር ውጭም ይሰራል

ገጹ ከተጫነ በኋላ፣ እያንዳንዱ ባይት በአካባቢ ይሰላል። በአውሮፕላን ውስጥ፣ ከኮርፖሬት ፋየርዎል በስተጀርባ፣ ወይም ምንም አውታረ መረብ ሳይኖር ይሰራል — ለምስጢራዊ ኮድ ግምገማዎች ጠቃሚ።

diff checker በትክክል እንዴት ይሰራል

ከሽፋኑ ስር ያለው ሂሳብ ከድሩ የሚበልጥ ጥንታዊ ነው — በ1965 LCS የተባለ አልጎሪዝም፣ እንዲሁም በ1986 በEugene Myers የተደረገ ማሻሻያ።

  1. 1

    በመስመሮች መከፋፈል

    ሁለቱም ግቤቶች በ\n (ወይም \r\n) ይሰበራሉ። እያንዳንዱ መስመር ቶከን ይሆናል። ቶከኖችን — ቁምፊዎችን አይደለም — እናወዳድራለን ምክንያቱም በእውነተኛ ኮድ ወይም ሰነዶች ውስጥ አብዛኞቹ አርትዖቶች ሙሉ መስመሮችን ይጨምራሉ፣ ያስወግዳሉ፣ ወይም ይሻሻላሉ።

  2. 2

    LCS ማስላት

    Longest Common Subsequence በሁለቱም ግቤቶች ውስጥ በተመሳሳይ ቅደም ተከተል የሚታዩ ትልቁ የመስመሮች ስብስብ ነው። ከታች-ቀኝ የሚሄድ የDP ሰንጠረዥ እንሞላለን፤ እያንዳንዱ ሕዋስ ከዚያ ቦታ እስከ መጨረሻው ያለውን LCS ርዝመት ይይዛል። ይህ O(m × n) ጊዜና ማህደረ ትውስታ ይወስዳል።

  3. 3

    ኦፕሬሽኖችን ለማውጣት ወደ ኋላ መሄድ

    ከሰንጠረዡ ግራ-ላይ ጀምሮ ወደ ፊት እንሄዳለን፡ ሁለቱ የአሁን መስመሮች ከተዛመዱ እኩል እናወጣለን፤ ካልሆነ የLCS ርዝመትን የሚጠብቀውን አቅጣጫ (ቀኝ ወይም ታች) እንመርጣለን፣ delete ወይም insert በማውጣት። ውጤቱ Original ወደ Modified የሚቀይር የኦፕሬሽኖች ቅደም ተከተል ነው።

  4. 4

    በተለወጡ ጥንዶች ውስጥ የቃል-ደረጃ ዲፍ

    delete በinsert ሲከተል፣ እንደ change ረድፍ እናጣምራቸዋለን። በመስመሩ ውስጥ የሚለያዩትን ክፍሎች ብቻ ለማድመቅ፣ ተመሳሳይ የLCS አልጎሪዝም በእያንዳንዱ ጎን ቃላት ላይ ሁለተኛ ጊዜ እናሰራለን፣ በክፍተት ድንበሮች በመከፋፈል።

የተለመዱ የዲፍ ስራዎች

ለdiff checker የሚደርሱባቸው እውነተኛ ሁኔታዎች።

PR ከመተቸት በፊት መገምገም

የGitHub diff እይታ ድንቅ ነው፣ ግን አንዳንድ ጊዜ የቅርጸት ጫጫታ ሳይኖር ብቻ ጉልህ ለውጦችን ማየት ይፈልጉ ይሆናል። ሁለቱንም ስሪቶች ይለጥፉ፣ Ignore whitespace ያብሩ፣ የመልክ ቅርጸቶች ይጠፋሉ — ብቻ የሎጂክ አርትዖቶችን ይተዋሉ።

ሁለት የውል ረቂቆችን ማወዳደር

ጠበቆችና የኦፕስ ቡድኖች ብዙ ጊዜ በውል v1 እና v2 መካከል ምን እንደተቀየረ ማወቅ ያስፈልጋቸዋል። ሁለቱንም ይለጥፉ፣ በቃል-ደረጃ ማድመቅ ያለው ባለቀለም ዲፍ ያግኛሉ — ምንም Word፣ ምንም Track Changes፣ የምስጢራዊ ውሎችን ወደ ሶስተኛ ወገን ሰርቨር መስቀል አያስፈልግም።

የስክሪፕት አርትዖት በትክክል ምን እንዳደረገ መፈተሽ

በማዋቀሪያ ፋይል ላይ sed/awk/Python regex አስኪደዋል? ስክሪፕቱ የጠበቁትን ብቻ መሆኑን ለማረጋገጥ የመጀመሪያውንና ውጤቱን እዚህ ይለጥፉ። የቁምፊ-ደረጃ ማድመቅ ፈጣን የእይታ ቅኝት የሚያመልጡ የተበታተኑ አርትዖቶችን ይይዛል።

በተተረጎመ ጽሑፍ ውስጥ የፊደል ስህተት ማግኘት

የትርጉም ጥንድ (ምንጭ vs ትርጉም፣ ወይም የአንድ ምንጭ ሁለት ትርጉሞች) — የቃል-ደረጃ ዲፍ የጠፋ ቃል፣ የተደጋገመ ሐረግ ወይም አስተካካዮች ያመለጠ የሥርዓተ-ነጥብ መለዋወጥ ለማግኘት ቀላል ያደርገዋል።

የአካባቢ ዲፍ ለምን አስፈላጊ ነው

የሚያወዳድሩዋቸው ጽሑፎች አብዛኛውን ጊዜ ግላዊ ናቸው፡ ከውስጥ ማከማቻዎች ኮድ፣ የውል ረቂቆች፣ የደንበኛ-መረጃ ኤክስፖርቶች ወይም ያልተለቀቀ የምርት ቅጂ። ወደ የማያውቁት ሰው ሰርቨር መለጠፍ የማይቆጣጠሩት የወረቀት መንገድ ይፈጥራል። የiKit diff checker በአሳሽ ትርዎ ውስጥ አስቀድሞ የተጫነ JavaScript ነው — ንፅፅሩ በሲፒዩዎ ላይ ይሰራል እና ምንም የአውታረ መረብ ሶኬት አይነካም።

  • በዲፍ ጊዜ ዜሮ የአውታረ መረብ ጥያቄዎች — በDevTools → Network ሊረጋገጥ የሚችል።
  • ግቤቶች በአሳሽ ማህደረ ትውስታ ውስጥ ይቆያሉ፤ በClear ወይም ገጽ ሲታደስ ይጸዳሉ።
  • ለውስጥ ኮድ፣ በNDA ለተጠበቁ ሰነዶች፣ ለደንበኛ ድጋፍ ግልባጮችና በመረጃ-መኖሪያ ፖሊሲዎች ለሚሸፈን ማንኛውም ነገር አስተማማኝ።

Related guides

Deep-dive tutorials and tool comparisons from the iKit blog.

ተደጋጋሚ ጥያቄዎች

ይህ አስተማማኝ ነው? ጽሑፎቼ ይሰቀላሉ?

አይደለም። መሣሪያው ሙሉ በሙሉ በዚህ ገጽ ውስጥ የሚሰራ JavaScript ነው። የዲፍ አልጎሪዝሙ (longest-common-subsequence) በሲፒዩዎ ላይ ይሰራል እና ውጤቱ በቀጥታ ወደDOM ይታያል። DevTools → Network ይክፈቱና ይመልከቱ — በዲፍ ጊዜ ምንም ጥያቄ አይነሳም። የውስጥ ኮድ፣ የደንበኛ መረጃ፣ የውል ረቂቆች ወይም በሰርቨር መሣሪያ እንዲመዘገብ የማይፈልጉትን ማንኛውንም ነገር ለመለጠፍ አስተማማኝ ነው።

የመስመር + የቃል-ደረጃ ማድመቅ እንዴት ይሰራል?

በመጀመሪያ ሁለቱንም ግቤቶች በመስመሮች ከፋፍለን LCS (longest common subsequence) አልጎሪዝም እንሰራለን። በሁለቱም ጎኖች የሚዛመዱ መስመሮች እኩል ተብለው ይደመቃሉ። የማይዛመዱ መስመሮች መጨመር ከመሰረዝ አጠገብ ሲመጣ በ'ለውጥ' ረድፎች ይጣመራሉ። ለእያንዳንዱ የተጣመረ ለውጥ፣ የተለወጡ ቃላት ብቻ ቀይ/አረንጓዴ እንዲበሩ — መላውን መስመር አይደለም — በመስመሩ ቃላት (በክፍተት ተከፋፍለው) ላይ ሁለተኛ LCS እንሰራለን።

በSplit እና Unified እይታ መካከል ያለው ልዩነት ምንድነው?

Split እይታ ሁለቱን ጽሑፎች ጎን ለጎን ከተጣመሩ የመስመር ቁጥሮች ጋር ያሳያል — diff በIDE ውስጥ (VS Code, JetBrains) እንዴት እንደሚታይ ቅርብ ነው። Unified እይታ በ +/− ቅድመ-ቅጥያ መስመሮች ያለው አንድ አምድ ያሳያል — `git diff` የሚያትመውን ይመስላል። የስራ ፍሰትዎን የሚስማማውን ይምረጡ፤ ሁለቱም ተመሳሳይ መረጃ ያሳያሉ።

'ክፍተትን ችላ በል' ለምን ይረዳል?

ኮድን እንደገና መቅረጽ (Prettier ማስኬድ፣ ታብ/ክፍተት መቀየር፣ የመስመር መጨረሻዎችን ማስተካከል) እውነተኛ ለውጦችን የሚቀብር የእይታ ጫጫታ ይጨምራል። 'ክፍተትን ችላ በል' ማብራት ተከታታይ ክፍተቶችን/ታቦችን ወደ አንድ ክፍተት ያዋህዳል እና ከዲፍ በፊት የመስመር ጠርዞችን ይቆርጣል — ስለዚህ የመልክ ለውጦችን ሳይሆን ትርጉም ያላቸውን አርትዖቶች ብቻ ያያሉ።

በአሳሽ ውስጥ ዲፍ ማድረግ የምችለው ትልቁ ግቤት ምንድነው?

የLCS አልጎሪዝም O(m × n) ማህደረ ትውስታ ይጠቀማል፣ m እና n በእያንዳንዱ ጎን ያሉ የመስመር ብዛቶች ናቸው። iKit ንፅፅሩን በ~4 ሚሊዮን ሕዋሶች (≈16 MB) ይገድባል፣ ይህም ጥቂት ሺህ መስመሮችን ከጥቂት ሺህ መስመሮች ጋር በምቾት ይይዛል። ለትላልቅ diffs (ሙሉ የውሂብ ጎታ ዳምፖች፣ ሙሉ-ፋይል ምዝግቦች)፣ እንደ `diff` ወይም `git diff --no-index` ያሉ የCLI መሣሪያዎችን ይጠቀሙ — እነዚህ ወደ ሚሊዮኖች መስመሮች የሚዘረጋ ብልህ አልጎሪዝም (Myers diff) ይጠቀማሉ።