mergiraf - በጊት ውስጥ AST-ተኮር የሶስት መንገድ ውህደት መሳሪያ

የሜርጊራፍ 0.4 ፕሮጀክት መለቀቅ ታትሟል, ለጊት ሾፌር በማዘጋጀት በሶስት መንገድ የመዋሃድ እድል ትግበራ. Mergiraf የተለያዩ አይነት የውህደት ግጭቶችን ለመፍታት ይደግፋል እና ለተለያዩ የፕሮግራም ቋንቋዎች እና የፋይል ቅርጸቶች ሊያገለግል ይችላል። ከመደበኛ Git ጋር በሚሰሩበት ጊዜ የሚነሱ ግጭቶችን ለመፍታት ሜርጊራፍን በተናጠል መጥራት ወይም በጊት የሚገኘውን የውህደት ተቆጣጣሪ በመተካት እንደ ውህደት፣ መመለሻ፣ መልሶ ማቋቋም እና ቼሪ ፒክ የመሳሰሉ የትእዛዞችን ችሎታዎች ማስፋት ይቻላል። ኮዱ የተሰራጨው በGPLv3 ፍቃድ ነው። አዲሱ ስሪት ለ Python፣ TOML፣ Scala እና Typescript ቋንቋዎች ድጋፍን እንዲሁም የአፈጻጸም ማሻሻያዎችን ይጨምራል።

ከዚህ በታች mergiraf በመጠቀም የተፈቱትን ችግሮች ዝርዝር መግለጫ ነው-

ሶፍትዌር እጅግ ውስብስብ ስርዓት ዋና ምሳሌ ነው። ውስብስብ ስርዓቶች አንድ የሚያመሳስላቸው ነገር አለ - እነሱ COMPLEX ናቸው - እና እርስዎ የሚፈልጉትን ውስብስብ ባህሪ በአጋጣሚ እንዲከሰት መጠበቅ አይችሉም. ይልቁንስ እነዚህ ስርዓቶች በጊዜ ሂደት ደረጃ በደረጃ ይሻሻላሉ, እና እያንዳንዱ ሚውቴሽን በእያንዳንዱ ደረጃ በጥንቃቄ ይሞከራል. ይህንን ለማግኘት በደንብ የተገለጸ መዋቅር እና ተገቢ መሳሪያዎች ያስፈልጋሉ. የማንኛውም ውስብስብ ሥርዓት ዝግመተ ለውጥ እንደ መመሪያ ዛፍ ሆኖ ሊታይ ይችላል፣ ሥሩ ባዶ የሆነ የተግባር ስብስብ ሲሆን እያንዳንዱ መስቀለኛ መንገድ - ከሥሩ በስተቀር - ሚውቴሽን ለወላጁ የመተግበር ውጤት ነው።

በምርቶች አውድ ውስጥ እያንዳንዱ መስቀለኛ መንገድ "ስሪት" ተብሎ ይጠራል, እሱም የተወሰኑ ተግባራትን እና ፀረ-ተግባራትን ይወክላል. የዚህ ስብስብ ማንኛውም ለውጥ እንደ ሚውቴሽን ይቆጠራል፣ ይህም በእኛ በተመራው አሲሊክ ግራፍ ውስጥ ጠርዝ ይፈጥራል። እነዚህ ተግባራት በተፈጥሯቸው ረቂቅ ናቸው; አካላዊ ሥርዓቶች የሚሠሩበትን መንገድ በቀጥታ አያንጸባርቁም፣ ይልቁንም የማሰብ ችሎታ ያላቸው ወኪሎች የእነዚያን ሥርዓቶች ጥቅም ምን ያህል እንደሚገነዘቡ ያሳያሉ። ሀሳቦችን ወደ የገሃዱ አለም አተገባበር ለመተርጎም እጅጌዎን ጠቅልለው ወደ *በቂ* ዝቅተኛ ደረጃ ዝርዝሮች ዘልለው በመግባት ነገሮች በትክክል እንዴት እንደሚሰሩ መግለጽ ያስፈልግዎታል። በሶፍትዌር ልማት ውስጥ፣ እነዚህ ዝቅተኛ ደረጃ ያላቸው አብዛኛውን ጊዜ በምንጭ ኮድ ይወከላሉ።

የምንጭ ኮዳቸውን ቀስ በቀስ የሚፈለገውን ባህሪ ወደሚያሳይ ሁኔታ ለመግባት እና እዚያ እንዴት እንደደረሱ ለመመዝገብ ፕሮግራመሮች ስራቸውን በቅጽበተ-ፎቶዎች እና ለውጦችን ይወክላሉ። ቅጽበተ-ፎቶ ሁሉንም ዝቅተኛ-ደረጃ ዝርዝሮች ጋር አንድ የተወሰነ ምርት ሁኔታ ይወክላል, አንድ changeet ሳለ ቅጽበተ ፎቶዎች መካከል ያለውን ሽግግር ይወክላል. በተለምዶ ቅጽበተ-ፎቶዎች የሚመነጩት በነጠላ ለውጦች ለወላጆቻቸው ነው፣ ስለዚህ እነዚህ ቅጽበታዊ ገጽ እይታዎች ሁልጊዜ ማለት ይቻላል የፈጠሯቸውን የለውጥ ስራዎች ተደርገው ይሰየማሉ፣ ስለዚህ ቃላቱ ብዙ ጊዜ በተለዋዋጭነት ጥቅም ላይ ይውላሉ።

አንዳንድ ጊዜ በበርካታ ሽግግሮች ምክንያት የተገኙ ቅጽበተ-ፎቶዎች አሉ - የማዋሃድ ተግባራት። ከእነሱ ጋር ለመስራት አስቸጋሪ ናቸው, ስለዚህ አብዛኛውን ጊዜ ይርቃሉ. እንደ Git ያሉ ዘመናዊ የክፍት ምንጭ ሥሪት ቁጥጥር ስርዓቶች የልማት የስራ ሂደቶችን ለመቆጣጠር በጣም መሠረታዊ ችሎታዎችን ይሰጣሉ። ገንቢዎች ቅጽበተ-ፎቶዎችን እንደ ቀጥተኛ አሲክሊክ ግራፎች እንዲያደራጁ ያስችላቸዋል፣ በአስተያየቶች እንዲያብራሩዋቸው እና እንደ አስፈላጊነቱ እንደገና እንዲደራጁ ያስችላቸዋል።

ይህ ተግባር ገንቢዎች የፕሮጀክቱን ትርጉም ያለው ትርጉም ያለው ታሪክ እንዲጽፉ ያስችላቸዋል፣ ይህም ለማረም እና እንደ “ይህ ዝቅተኛ ደረጃ ዝርዝር (ለምሳሌ ተለዋዋጭ) ለምን አስተዋወቀ?”፣ “ለዚህ ፕሮጀክት ያደረኩት አስተዋፅኦ በግምት ምን ያህል ፐርሰንት ነው የሚሉ ጥያቄዎችን ለመመለስ ወሳኝ ነው። ?”፣ “በዕልባት ትግበራዎች የተጠለፈው ማነው እና መቼ?”፣ “ምን ዝቅተኛ ደረጃ ለውጥ ይህንን ተግባር አፈረሰው (ምንም እንኳን እሱ ሊኖረው የማይገባ ቢመስልም ሁሉንም ነገር አረጋግጠናል!?)”

የስሪት ቁጥጥር ስርዓቶች ይህንን ከቅርንጫፍ ፅንሰ-ሀሳብ ጋር ያሟሉታል፣ ዝቅተኛ ደረጃ ፅንሰ-ሀሳብ ማለት በቀላሉ የፕሮጀክት አጭር ታሪክ ለገንቢው በትርጉም ትርጉም ያለው ነው። ቅርንጫፎች አብዛኛውን ጊዜ ለተወሰኑ የባህሪዎች አተገባበር ያገለግላሉ፣ አንዳንድ ጊዜ ለተመሳሳይ ባህሪ ለተለያዩ እጩ አተገባበር ብዙ ቅርንጫፎች ይፈጠራሉ። የቅርንጫፎችን የስራ ፍሰቶች በመጠቀም (በተግባራዊ ዋና ዋና እና በሁሉም ቦታ እና በሁሉም ቦታ ጥቅም ላይ የዋለ የእድገት ደረጃ) እያንዳንዱ ግለሰብ ገንቢ ብዙ የሚጋጩ የፕሮጀክት ቅርንጫፎችን በብቃት ማስተዳደር ይችላል፣ እያንዳንዱም በብስለት ወይም በጥራት ይለያያል። ይህ ገንቢዎች ሁሉንም ነገር በእጅ እንደገና ሳይተይቡ የራሳቸውን እና የሌሎች ሰዎችን ስራ ውጤት እንዲያጣምሩ ያስችላቸዋል።

በተለምዶ አንድ ዋና ቅርንጫፍ ተፈጥሯል "ኦፊሴላዊ" ምርትን የሚወክል ሲሆን ይህም ከጎን ቅርንጫፎች ለእያንዳንዱ ባህሪ ቅርንጫፍ ናቸው, ይህም በመደበኛነት (ከሁሉም ቃል በኋላ) ከዋናው ቅርንጫፍ ጋር በማመሳሰል, ገንቢዎች ከቅርብ ጊዜው የምርት ስሪት ጋር እንዲሰሩ እና እንዲሰሩ ያስችላቸዋል. የሚፈልጓቸውን ባህሪያት በአንድ ጊዜ ይተግብሩ ፣ በተቻለ ፍጥነት የሌሎች ገንቢዎች እርምጃዎች የሚፈጠሩ ችግሮችን በመለየት ነው።

የተለያዩ ቅጽበተ-ፎቶዎችን ተግባራት ለማጣመር በሚሞክሩበት ጊዜ (ይህም በቀላሉ የጋራ ቅድመ አያት ማግኘት እና እነሱን የሚያመነጩትን ለውጦች በመተግበር ፣ በሌላኛው ላይ በቅደም ተከተል ፣ ይህ ክዋኔ እንደገና ቤዝ ተብሎ ይጠራል ፣ ውህደት እንደ ዳግም ቤዝ ነው ፣ እሱ ቁርጠኝነትን ብቻ ያዋቅራል። ግራፍ በተለየ መልኩ, በውጤቱም እነሱን ለመንከባከብ የማይመች ያደርጋቸዋል, ስለዚህ ውህደቶችን ለዳግም ቤዝ ድጋፍ ለመተው ይሞክራሉ) ችግሮች ይነሳሉ. ዘመናዊ የስሪት ቁጥጥር ስርዓቶች (ቪሲኤስ) የውስጥ ለውጥ ውህደት ስልተ ቀመሮችን በመጠቀም ፋይሎችን በቀላሉ ወደ ነጠላ መስመር የሚሰብሩ፣ እያንዳንዱን መስመር እንደ ቁምፊ እና ፋይሎቹን እንደ ቅደም ተከተላቸው ይመለከቷቸዋል ከዚያም ከባዮኢንፎርማቲክስ የሚመጡትን ለማዋሃድ ስልተ ቀመሮችን ይተግብሩ።

እንደ አለመታደል ሆኖ፣ ይህ የመስመር-በ-መስመር የምንጭ ኮድ ውክልና ከይዘቱ ጋር ምንም ግንኙነት የለውም። ብቸኛው ጥቅም ቀላል እና ሁለንተናዊ ነው. አለመመጣጠን ወደ ግጭቶች ይመራል, ለገንቢዎች የማያቋርጥ የራስ ምታት ምንጭ ነው. የግጭት አፈታት ገንቢው ሁለቱንም የኮዱ ስሪቶች በጥንቃቄ እንዲያጠና ይጠይቃል፣ በመስመር-በ-መስመር ንፅፅር ስልተ-ቀመር “የተቀየረ” ወይም “የሚጋጭ” ተብሎ የተሰየሙትን ክፍሎች ብቻ ሳይሆን አጠቃላይ ፕሮጀክቱን ሊሆን ይችላል።

ገንቢው ለውጦቹን መረዳት፣ የተዋሃደውን ኮድ በእጅ መጻፍ እና ማናቸውንም አለመጣጣም መፍታት አለበት። የመስመር-በ-መስመር መሳሪያው ለውጦችን በስህተት ሲለይ ችግሮቹ የበለጠ ችግር እየፈጠሩ ይሄዳሉ፣ ይህም ብዙ ጊዜ ትላልቅ ለውጦች ሲከሰቱ፣ እንደ ኮድ ማሻሻያ ያሉ ቀላል ያልሆኑትንም ጨምሮ። ቀጣይ ለውጦች በእጅ የተዋሃዱ ኮድ ላይ ሊተገበሩ ካልቻሉ, ሁኔታው ​​ሙሉ በሙሉ ቅዠት ይሆናል. ምንም እንኳን አስፈሪ ሁኔታዎች ቢኖሩም, የመስመር-በ-መስመር ስልተ-ቀመር ብዙ ጊዜ ይሰራል, በተለይም ገንቢዎቹ በእሱ ላይ ችግር ላለመፍጠር በንቃት ቢሞክሩ. እንደነዚህ ያሉትን ችግሮች ለመቀነስ አንዱ መንገድ እንደ ጥቁር ያሉ ቀኖናዊ መሣሪያዎችን በመጠቀም የምንጭ ኮዶች እንዲሠሩ ማድረግ ነው።

በእርግጥ ለአስፈሪ ጉዳዮች ትክክለኛው መፍትሄ (እና በአጠቃላይ ለእነሱ ብቻ ሳይሆን የመስመር-በ-መስመር ስልተ ቀመር ሂዩሪስቲክ ነው ፣ በትንሹ ወደ የተሰበረ ኮድ ሊያመራ ይችላል ፣ ለምሳሌ ፣ አንድ ገንቢ ተለዋጭ ስም ሰጠው ፣ እና ሌላ በ በተመሳሳይ ጊዜ ያንን ተለዋዋጭ በመጠቀም አዲስ ኮድ ፃፈ ፣ ግጭት እዚህ ምንም ውህደት / እንደገና መመስረት አይኖርም ፣ ግን ውጤቱ የማይሰራ ይሆናል) - ይህ ትክክለኛ የውስጥ ሞዴል አጠቃቀም ነው።

ምንም እንኳን በዚህ አካባቢ ምርምር ለ 30 ዓመታት ያህል በመካሄድ ላይ ያለ እና በርካታ የባለቤትነት ምርቶች እንዲፈጠሩ ምክንያት ሆኗል, ይህ ምርምር እስከ ቅርብ ጊዜ ድረስ ወደ ተግባራዊ ክፍት ምንጭ ምርቶች አልተለወጠም. አብዛኛው የክፍት ምንጭ ሶፍትዌር መፍትሄዎች በ2010 ዎቹ መጀመሪያ ላይ ማደግ የጀመሩ ሲሆን በዋናነት በጃቫ ቋንቋ ላይ ያተኮሩ ነበሩ።

የዚያን ጊዜ በጣም ታዋቂው ነፃ ትግበራ GumTree የተፈጠረው በአካዳሚክ ዳራ ባለው ተመራማሪ ፣ በጃቫ የተጻፈ ፣ ከዛፍ ቆራጭ በፊት ያለው የራሱ ረቂቅ ውስጣዊ ውክልና አለው ፣ እና ሁለቱንም በዛፍ ቆጣቢ ላይ የተመሰረቱ እና ሌሎች ምንጮችን ለመተንተን የሚረዱ መሳሪያዎች አሉት ። ኮድ ወደ ረቂቅ ውክልናዎች። ይህ ሥርዓት ማመንጨት የሚችለው ብቻ ነው (በጽሑፍ ክስተት ሎግ መልክ፣ ከጃቫ ጋር ግንኙነት ካለው ከማንኛውም ቋንቋ በቀላሉ ሊጠራ የሚችል ኤፒአይም አለ) እና ለውጦችን በዓይነ ሕሊናህ መመልከት ይችላል። ነገር ግን፣ ለውጦችን ለማዋሃድ፣ እንዲሁም በእሱ የተፈጠሩ ልዩ ልዩ ፋይሎችን ለመመልከት ከሳጥኑ ውስጥ አይተገበርም (ነገር ግን የመጫኛ ልዩነቶች በኤፒአይ በኩል ሊተገበሩ ይችላሉ)።

ወጣት እና የበለጠ ተግባራዊ የዲፍታስቲክ አተገባበር በዛፍ ጠባቂ ላይ በመመስረት በሩስት ውስጥ ተጽፏል እና በኮንሶሉ ውስጥ የደመቁ ልዩነቶችን በማፍለቅ ላይ ያተኮረ ነው። ይህ ስርዓት ልዩነትን ለማየት ያለመ ነው እና በአጠቃላይ ለውጦችን ለማዋሃድ ወይም ጥገናዎችን ለመተግበር አላማ የለውም።

የመርጊራፍ ፕሮጀክት በቅርቡ ታይቷል እና በንቃት እያደገ ነው። ይህ መሳሪያ፣ በሩስት (21 ሚቢ!) የተጻፈው፣ በዛፍ ቆጣቢ ላይ የተመሰረተ ነው፣ ይህም ኤልኤልቪኤም ዝቅተኛ ደረጃ የማስተማሪያ ውክልናዎችን ለማመቻቸት ሆኖ በልማት መሳሪያዎች ውስጥ ከዐውድ-ነጻ ሰዋሰው መመዘኛዎች ሆኗል። ከተወዳዳሪዎቹ በተቃራኒ ሜርጊራፍ ተግባራትን የሚያቀርበው ልዩነቶችን ለመፍጠር ሳይሆን የውህደት ግጭቶችን በራስ-ሰር ለመፍታት ነው። በመከለያው ስር ሜርጊራፍ በ GumTree ውስጥ ጥቅም ላይ የሚውለውን ስልተ ቀመር ፕላስተሮችን ለማምረት እና ለትግበራ ደግሞ በስፖርክ ውስጥ ጥቅም ላይ የሚውለው ስልተ ቀመር ለዛፍ ሰሪ አወቃቀሮች የተስተካከለ ነው።

በኋላ ላይ ሊተገበሩ በሚችሉ ፋይሎች ውስጥ የንጥቆችን ተከታታይ ማድረግ፣ በሚያሳዝን ሁኔታ፣ አልተተገበረም (ነገር ግን በGumTree የመነጩ የክስተት ምዝግብ ማስታወሻዎችን በመተንተን ሊተገበር ይችላል)። ልዩነቶችን የመተግበር ሌላው ተስፋ ሰጪ መንገድ ልዩነቶችን በፕላስተር ሳይሆን በ LSP አገልጋዮችን በማደስ ተግባር ነው፣ ይህም በፕሮጀክት አቀፍ ደረጃ ግጭቶችን ለመለየት ይረዳል። የእይታ እይታ የሚደገፈው ለግጭቶች ብቻ ነው።

ምሳሌ በሥራ ላይ፡ የጋራ ቅድመ አያት "base.py" (የተጠለፉ ትሮች፣ በጅማሬ ላይ ተጨማሪ መስመር) foo = 1 def main()፡ ማተም(foo + 2 + 3) "a.py" (የተጠላለፉ ትሮች፣ 2 ተጨማሪ መስመሮች መጀመሪያ ላይ፣ ከአንዱ ይልቅ፣ የአይስክሬም ቤተ-መጽሐፍት ለማረም ጥቅም ላይ ይውላል፣ “ባዝ” ክፍል ተጨምሯል፡- ከአይስክሬም አስመጪ ic foo = 1 def main(): ic(foo + 2) + 3) ክፍል ባዝ፡ def __init__(self): """baz""""b.py"(ተለዋዋጭ "foo" ወደ "ባር" ተቀይሯል፣ከለውጦች በኋላ በ"ጥቁር" ተሰራ፣ይህም ከቦታዎች ጋር ዘልቆ መግባት እና ተጨማሪ መስመሮች ተቆርጠዋል፡- ባር = 1 ዴፍ ዋና()፡ ማተም (ባር + 2 + 3) ይደውሉ ./mergiraf ውህደት ./base.py ./a.py ./b.py -x a.py -y b.py -s base.py -o ./res.py ከአይስክሬም አስመጪ ic bar = 1 def main(): ic(ባር + 2 + 3) class baz: def __init__ (self): """ባዝ"" (ለማረም ማተም "አይስክሬም" ቤተ-መጽሐፍት ጥቅም ላይ ይውላል, "foo" ተለዋዋጭ ወደ "ባር" ተቀይሯል, ከለውጦቹ በኋላ በ "ጥቁር" ተሠርቷል, ይህም ወደ ውስጥ መግባትን ያስከትላል. - ክፍተቶች እና ተጨማሪ መስመሮች ተቆርጠዋል, የትሮች እና የቦታዎች ድብልቅ ለመግቢያ, ግን የተፈቀደው ቅፅ).

የመሳሪያው እጥረት ወዲያውኑ ይታያል. የሰነድ ስታይል አብዛኛውን ጊዜ በ.editorconfig ፋይሎች ውስጥ ይዋቀራል፣ እና አለምአቀፍ የቅጥ ለውጦች፣ ለምሳሌ ትሮችን ወደ ቦታዎች መቀየር እና በ b.py ላይ እንደተደረገው ጥቁር ዘይቤን መቀበል፣ አብዛኛውን ጊዜ በ.editorconfig ለውጦች ይታጀባሉ። ስለዚህ ለእንደዚህ አይነት ለውጦች የበለጠ ትክክለኛ መተግበሪያ መሳሪያው ለአለም አቀፍ "ነባሪ" ዘይቤ ጽንሰ-ሀሳብ ሊኖረው ይገባል እና ቅንብሮችን ከ ".editorconfig" ማውጣት መቻል አለበት።

ምንጭ: opennet.ru

አስተያየት ያክሉ