በተኚታታይ ውህደት ውስጥ ዚተለመዱ ሁኔታዎቜ

ዚጂት ትዕዛዞቜን ተምሹዋል ነገር ግን ቀጣይነት ያለው ውህደት (CI) በእውነቱ እንዎት እንደሚሰራ መገመት ይፈልጋሉ? ወይም ምናልባት ዚዕለት ተዕለት እንቅስቃሎዎን ማመቻ቞ት ይፈልጋሉ? ይህ ኮርስ ዹ GitHub ማኚማቻን በመጠቀም ቀጣይነት ባለው ውህደት ውስጥ ተግባራዊ ክህሎቶቜን ይሰጥዎታል። ይህ ኮርስ በቀላሉ ጠቅ ማድሚግ ዚምትቜለው ጠንቋይ እንዲሆን ዚታሰበ አይደለምፀ በተቃራኒው ሰዎቜ በሚያደርጉት መንገድ በስራ ላይ ዚሚሰሩትን ተመሳሳይ ድርጊቶቜን ትፈጜማለህ። ዚተካተቱትን ደሚጃዎቜ በምታሳልፉበት ጊዜ ንድፈ ሃሳቡን እገልጻለሁ።

ምን እናድርግ?

እዚሄድን ስንሄድ፣ ቀስ በቀስ ዚተለመዱ ዹCI ደሚጃዎቜ ዝርዝር እንፈጥራለን፣ ይህ ዝርዝር ለማስታወስ ጥሩ መንገድ ነው። በሌላ አነጋገር ገንቢዎቜ ቀጣይነት ያለው ውህደት ሲሰሩ፣ ተኚታታይ ውህደት ሲያደርጉ ዚሚያደርጓ቞ውን ተግባራት ዝርዝር እንፈጥራለን። ዹ CI ሂደታቜንን ኚእውነተኛው ጋር ለማቀራሚብ ቀላል ዹሆኑ ዚፈተናዎቜን ስብስብ እንጠቀማለን።

ይህ ጂአይኀፍ በኮርሱ ውስጥ እዚገፉ ሲሄዱ በማኚማቻዎ ውስጥ ያሉትን ቁርጠኝነት ያሳያል። እንደሚመለኚቱት, እዚህ ምንም ዚተወሳሰበ ነገር ዹለም እና በጣም አስፈላጊው ብቻ ነው.

በተኚታታይ ውህደት ውስጥ ዚተለመዱ ሁኔታዎቜ

ዚሚኚተሉትን መደበኛ ዚሲአይ ሁኔታዎቜ ውስጥ ያልፋሉ፡

  • በአንድ ባህሪ ላይ ይስሩ;
  • ጥራትን ለማሚጋገጥ አውቶማቲክ ሙኚራዎቜን መተግበር;
  • ቅድሚያ ዹሚሰጠውን ተግባር መተግበር;
  • ቅርንጫፎቜን ሲያዋህዱ ዚግጭት አፈታት (ግጭት መቀላቀል);
  • በምርት አካባቢ ውስጥ ስህተት ይኚሰታል.

ምን ይማራሉ?

ለሚኚተሉት ጥያቄዎቜ መልስ መስጠት ይቜላሉ.

  • ቀጣይነት ያለው ውህደት (CI) ምንድን ነው?
  • በ CI ውስጥ ምን ዓይነት አውቶማቲክ ሙኚራዎቜ ጥቅም ላይ ይውላሉ, እና በምን አይነት እርምጃዎቜ ምላሜ ይሰጣሉ?
  • ዚመሳብ ጥያቄዎቜ ምንድን ናቾው እና መቌ ያስፈልጋሉ?
  • በፈተና ዚሚነዳ ልማት (TDD) ምንድን ነው እና ኹ CI ጋር እንዎት ይዛመዳል?
  • ለውጊቹን ማዋሃድ ወይም እንደገና መሠሚት ማድሚግ አለብኝ?
  • በሚቀጥለው ስሪት ውስጥ ይመለሱ ወይም ይጠግኑ?

መጀመሪያ ላይ እንደ “ዚጎትት ጥያቄዎቜ” ያሉ ነገሮቜን በዚቊታው ተርጉሜአለሁ፣ በዚህ ምክንያት ግን በጜሑፉ ውስጥ ያለውን ዚእብደት መጠን ለመቀነስ በአንዳንድ ቊታዎቜ በእንግሊዝኛ ሀሚጎቜን ለመመለስ ወሰንኩ። እኔ አንዳንድ ጊዜ ሰዎቜ በእርግጥ በሥራ ላይ ዚሚጠቀሙበት "ፕሮግራመር ሱርዚክ" እንደ አስደናቂ ግስ እጠቀማለሁ።

ቀጣይነት ያለው ውህደት ምንድን ነው?

ቀጣይነት ያለው ውህደት, ወይም CI, እያንዳንዱ ዚቡድን አባል ቢያንስ በቀን አንድ ጊዜ ኮዳ቞ውን ወደ አንድ ዚጋራ ማኚማቻ ውስጥ ዚሚያዋህድበት ቎ክኒካዊ ልምምድ ነው, እና ዹተገኘው ኮድ ቢያንስ ቢያንስ ያለምንም ስህተቶቜ መገንባት አለበት.

በዚህ ቃል ላይ አለመግባባቶቜ አሉ

ዚክርክሩ ነጥብ ዚውህደት ድግግሞሜ ነው። አንዳንዶቜ በቀን አንድ ጊዜ ኮድ ማዋሃድ በትክክል ያለማቋሚጥ ለመዋሃድ በቂ አይደለም ብለው ይኚራኚራሉ። አንድ ምሳሌ ሁሉም ሰው ጠዋት ላይ ትኩስ ኮድ ወስዶ ምሜት ላይ አንድ ጊዜ ዚሚያዋህድበት ቡድን ተሰጥቷል። ይህ ምክንያታዊ ተቃውሞ ቢሆንም፣ በአጠቃላይ በቀን አንድ ጊዜ ዹሚሰጠው ፍቺ ምክንያታዊ ተግባራዊ፣ ዹተለዹ እና ዚተለያዚ መጠን ላላቾው ቡድኖቜ ተስማሚ ነው ተብሎ ይታመናል።

ሌላው ተቃውሞ C++ በልማት ውስጥ ጥቅም ላይ ዹሚውለው ቋንቋ ብቻ አይደለም፣ እና በቀላሉ ኚስህተት ዚጞዳ ስብሰባን እንደ ማሚጋገጫ መንገድ መፈለጉ ደካማ ነው። አንዳንድ ዚፈተናዎቜ ስብስብ (ለምሳሌ፣ በአገር ውስጥ ዹተኹናወኑ ዹክፍል ሙኚራዎቜ) በተሳካ ሁኔታ ማጠናቀቅ አለባ቞ው። በአሁኑ ጊዜ ማህበሚሰቡ ይህንን መስፈርት ወደማዘጋጀት እዚተንቀሳቀሰ ነው፣ እና ወደፊት "ዚግንባታ + አሃድ ፈተናዎቜ" ምናልባት ካልሰራ ዹተለመደ አሰራር ይሆናል።

ቀጣይነት ያለው ውህደት ይለያል ቀጣይነት ያለው ማድሚስ (ቀጣይ ማድሚስ፣ ሲዲ) ኚእያንዳንዱ ዚውህደት ዑደት በኋላ ዹሚለቀቅ እጩ አያስፈልገውም።

በኮርሱ በሙሉ ዚምንጠቀምባ቞ው ዚእርምጃዎቜ ዝርዝር

  1. ዚቅርብ ጊዜውን ኮድ ይሳቡ። ኹ ቅርንጫፍ ይፍጠሩ master. መስራት ጀምር።
  2. በአዲሱ ቅርንጫፍዎ ላይ ቁርጠኝነት ይፍጠሩ. በአካባቢው ይገንቡ እና ይፈትሹ. ማለፍ? ወደ ቀጣዩ ደሹጃ ይሂዱ. አልተሳካም? ስህተቶቜን ወይም ሙኚራዎቜን ያስተካክሉ እና እንደገና ይሞክሩ።
  3. ወደ ዚርቀት ማኚማቻዎ ወይም ዚርቀት ቅርንጫፍዎ ይግፉ።
  4. ዚመሳብ ጥያቄ ፍጠር። ለውጊቹ ተወያዩ፣ ውይይቱ ሲቀጥል ተጚማሪ ቃል ኪዳን ጚምሩ። በባህሪው ቅርንጫፍ ላይ ሙኚራዎቜ እንዲተላለፉ ያድርጉ።
  5. ውህደት/ዳግም ቀዝ ኚጌታ ዚተሰጠ። በውህደት ውጀቱ ላይ ሙኚራዎቜ እንዲተላለፉ ያድርጉ።
  6. ኚባህሪው ቅርንጫፍ ወደ ምርት አሰማራ።
  7. ለተወሰነ ጊዜ ሁሉም ነገር በምርት ውስጥ ጥሩ ኹሆነ ፣ ለውጊቜን ወደ ጌታው ያዋህዱ።

በተኚታታይ ውህደት ውስጥ ዚተለመዱ ሁኔታዎቜ

 ዝግጅት

ትክክለኛው ሶፍትዌር እንዳለህ አሚጋግጥ

ይህንን ኮርስ ለመውሰድ ያስፈልግዎታል Node.js О ዚጊት ደንበኛ.

ማንኛውንም ዹ Git ደንበኛ መጠቀም ትቜላለህ፣ ግን ለትእዛዝ መስመሩ ትዕዛዞቜን ብቻ አቀርባለሁ።

ዚትእዛዝ መስመሩን ዹሚደግፍ ዚጂት ደንበኛ መጫኑን ያሚጋግጡ

ዚትእዛዝ መስመሩን ዹሚደግፍ ዚጊት ደንበኛ ገና ኚሌልዎት ዚመጫኛ መመሪያዎቜን ማግኘት ይቜላሉ። እዚህ.

ማኚማቻውን ያዘጋጁ

ዹግል ቅጂ (ሹካ) መፍጠር ያስፈልግዎታል አብነት ማኚማቻ ለኮርሱ ኮድ ያለው በ GitHub ላይ. ይህንን ዹግል ቅጂ ለመጥራት እንስማማ ዚኮርስ ማኚማቻ.

ተኹናውኗል? ነባሪውን መቌቶቜ ካልቀዚሩት ዚኮርስ ማኚማቻዎ በጣም አይቀርም ይባላል continuous-integration-team-scenarios-studentsበ GitHub መለያዎ ውስጥ ይገኛል እና ዩአርኀሉ ይህን ይመስላል

https://github.com/<ваше ОЌя пПлзПвателя Ма GitHub>/continuous-integration-team-scenarios-students

በቀላሉ ወደዚህ አድራሻ እደውላለሁ። <URL репПзОтПрОя>.

ዹማዕዘን ቅንፎቜ እንደ <тут> እንዲህ ዓይነቱን አገላለጜ በተገቢው ዋጋ መተካት አለብዎት ማለት ነው.

እርግጠኛ ሁን GitHub ድርጊቶቜ ለዚህ ኮርስ ማኚማቻ ተካቷል. ካልነቁ እባኮትን በገጹ መሃል ያለውን ትልቅ ቁልፍ በመጫን ያነቋ቞ው፣ በ GitHub በይነገጜ ውስጥ ያሉትን ድርጊቶቜ ጠቅ በማድሚግ ማግኘት ይቜላሉ።

GitHub Actions ካልነቃ ዚእኔን መመሪያ በመኹተል ኮርሱን ማጠናቀቅ አይቜሉም።

በተኚታታይ ውህደት ውስጥ ዚተለመዱ ሁኔታዎቜ

እኛ እዚህ እዚጻፍን ያለነውን ዚዝርዝሩን ሁኔታ ለማዚት ሁል ጊዜ ዹ GitHubን Markdown ዚማሳዚት ቜሎታ መጠቀም ትቜላለህ።

https://github.com/<your GitHub user name>/continuous-integration-team-scenarios-students/blob/master/ci.md

ስለ መልሶቹ

ይህንን ኮርስ ለማጠናቀቅ በጣም ጥሩው መንገድ እራስዎ ማድሚግ ቢሆንም አንዳንድ ቜግሮቜ ሊኖሩዎት ይቜላሉ።

ምን ማድሚግ እንዳለቊት እንዳልገባህ ኹተሰማህ እና መቀጠል እንደማትቜል ኹተሰማህ ወደ ክሩ ውስጥ ማዚት ትቜላለህ solutionበመነሻ ማኚማቻዎ ውስጥ ያለው።
እባካቜሁ አትዋሃዱ solution в master በኮርሱ ወቅት. ይህንን ቅርንጫፍ በመጠቀም ምን ማድሚግ እንዳለቊት ለማወቅ ወይም ዚእርስዎን ኮድ ኹጾሃፊው ጋር በማነፃፀር ጊት ዹሚሰጠንን ሁሉንም ቜሎታዎቜ በመጠቀም መጠቀም ይቜላሉ። ሙሉ በሙሉ ኹጠፉ, ቅርንጫፍዎን ሙሉ በሙሉ መተካት ይቜላሉ master በቅርንጫፍ ላይ solution እና ኚዚያ ዚስራ ማውጫዎን ወደሚፈልጉት ዚኮርስ ደሹጃ ዳግም ያስጀምሩት።

ይህንን በትክክል ኹፈለጉ ብቻ ይጠቀሙ

ኮድህን አስገባ

git add .
git commit -m "Backing up my work"

እነዚህ ትዕዛዞቜ

  • እንደገና መሰዹም master в master-backup;
  • እንደገና መሰዹም solution в master;
  • ወደ አዲስ ቅርንጫፍ መውጣት master እና ዚስራ ማውጫውን ይዘቶቜ እንደገና ይፃፉ;
  • ለወደፊቱ "መፍትሄ" ቅርንጫፍ ካስፈለገዎት ኹ "ማስተር" ("መፍትሄ" ነበር) "መፍትሄ" ቅርንጫፍ ይፍጠሩ.

git branch -m master master-backup
git branch -m solution master
git checkout master -f
git branch solution

ኚእነዚህ እርምጃዎቜ በኋላ መጠቀም ይቜላሉ git log master ዚትኛውን ቁርጠኝነት እንደሚያስፈልግዎ ለማወቅ.
ዚስራ ማውጫዎን ወደዚህ ቁርጠኝነት ዳግም ማስጀመር ይቜላሉ፡-

git reset --hard <the SHA you need>

በውጀቱ ደስተኛ ኹሆኑ, በሆነ ጊዜ ዚእርስዎን ዚማኚማቻ ስሪት ወደ ዚርቀት ማኚማቻ ማተም ያስፈልግዎታል. ይህንን ሲያደርጉ ዚርቀት ቅርንጫፍን በግልፅ መግለጜዎን አይርሱ።

git push --force origin master

እባኮትን እንጠቀማለን git push --force. ይህን ብዙ ጊዜ ለማድሚግ መፈለግህ ዚማይመስል ነገር ነው፣ ነገር ግን ኚአንድ ዹመሹጃ ቋት ተጠቃሚ ጋር እዚህ ጋር በጣም ዹተለዹ ሁኔታ አለን።

መስራት በመጀመር ላይ

በተኚታታይ ውህደት ውስጥ ዚተለመዱ ሁኔታዎቜ

ዚእኛን ዹCI ደሚጃዎቜ ዝርዝር ማጠናቀር እንጀምር። በመደበኛነት ይህን ደሹጃ ኚርቀት ማኚማቻው ዚቅርብ ጊዜውን ዚኮዱ ስሪት በመመልኚት ይጀምራሉ ነገር ግን እስካሁን ዚአካባቢ ማኚማቻ ዚለንምፀ ስለዚህ በምትኩ ኚርቀት እናዘጋዋለን።

 ተግባር፡ ዚአካባቢውን ማኚማቻ አዘምን፣ ኹ ቅርንጫፍ ፍጠር master, መስራት ጀምር

  1. ዚኮርስ ማኚማቻውን ኹ <URL репПзОтПрОя>.
  2. አሂድ npm install በኮርስ ማኚማቻ ማውጫ ውስጥ; ሙኚራዎቜን ለማካሄድ ዹምንጠቀመውን ጄስትን ለመጫን እንፈልጋለን።
  3. ቅርንጫፍ ይፍጠሩ እና ስም ይስጡት። feature. ወደዚህ ክር ቀይር።
  4. ዚሙኚራ ኮድ ያክሉ ci.test.js ይህን እንዳደርግ በሚጠይቁኝ አስተያዚቶቜ መካኚል።

    it('1. pull latest code', () => {
      expect(/.*pull.*/ig.test(fileContents)).toBe(true);
    });
    
    it('2. add commits', () => {
      expect(/.*commit.*/ig.test(fileContents)).toBe(true);
    });
    
    it('3. push to the remote branch with the same name', () => {
      expect(/.*push.*/ig.test(fileContents)).toBe(true);
    });
    
    it('4. create a pull request and continue working', () => {
      expect(/.*pulls+request.*/ig.test(fileContents)).toBe(true);
    });

  5. ወደ ፋይሉ ዚመጀመሪያዎቹ 4 እርምጃዎቜ ጜሑፍ ያክሉ ci.md.
    1. Pull in the latest code. Create a branch from `master`. Start working.    
    2. Create commits on your new branch. Build and test locally.  
    Pass? Go to the next step. Fail? Fix errors or tests and try again.  
    3. Push to your remote repository or remote branch.  
    4. Create a pull request. Discuss the changes, add more commits  
    as discussion continues. Make tests pass on the feature branch.  

    ቡድኖቜ

# КлПМОруйте репПзОтПрОй курса
git clone <repository URL>
cd <repository name>

# ВыпПлМОте npm install в каталПге репПзОтПрОя курса; ПМ устаМПвОт Jest, кПтПрый Ќы ОспПльзуеЌ Ўля запуска тестПв.
npm install

# СПзЎайте ветку О МазПвОте ее feature. ПереключОтесь Ма эту в ветку.
git checkout -b feature

# ОтреЎактОруйте ci.test.js как ПпОсаМП выше.
# ОтреЎактОруйте ci.md как ПпОсаМП выше

በአዲስ ቅርንጫፍ ላይ ቁርጠኝነት ይፍጠሩ፣ ይገንቡ እና በአካባቢው ይሞክሩት።

ፈተናዎቜን ኚማድሚጋቜን በፊት እንዲሰሩ እናዘጋጃለን እና ኚዚያ ኮዱን እንፈፅማለን።

ሙኚራዎቜ በራስ-ሰር ሲሄዱ ዚተለመዱ ሁኔታዎቜ

  • በአካባቢው፡
    • ያለማቋሚጥ ወይም ለተገቢው ኮድ ለውጊቜ ምላሜ መስጠት;
    • በማስቀመጥ ላይ (ለትርጉም ወይም ለጂአይቲ-ዚተጠናቀሩ ቋንቋዎቜ);
    • በስብሰባ ጊዜ (ማጠናቀር በሚያስፈልግበት ጊዜ);
    • በቁርጠኝነት;
    • ወደ ዚጋራ ማኚማቻ ሲታተም

  • በግንባታ አገልጋይ ወይም በግንባታ አካባቢ ላይ፡-
    • ኮድ ወደ ዹግል ቅርንጫፍ/ማኚማቻ ሲታተም።
    • በዚህ ክር ውስጥ ያለው ኮድ በመሞኹር ላይ ነው።
    • ዚውህደቱ እምቅ ውጀት ይሞኚራል (ብዙውን ጊዜ በ master).
    • እንደ ቀጣይነት ያለው ውህደት ደሹጃ / ቀጣይነት ያለው ዚመላኪያ ቧንቧ

በተለምዶ፣ ዚሙኚራ ስብስብ በፈጠነ መጠን፣ ብዙ ጊዜ ለማሄድ አቅምዎ ይጚምራል። ዹተለመደው ዹደሹጃ ስርጭት ይህን ሊመስል ይቜላል።

  • ፈጣን አሃድ ሙኚራዎቜ - በግንባታ ጊዜ, በ CI ቧንቧ መስመር ውስጥ
  • ዘገምተኛ ክፍል ሙኚራዎቜ፣ ፈጣን አካል እና ውህደት ሙኚራዎቜ - በቁርጠኝነት ፣ በ CI ቧንቧ መስመር ውስጥ
  • ዘገምተኛ አካል እና ውህደት ሙኚራዎቜ - በ CI ቧንቧ መስመር ውስጥ
  • ዚደህንነት ሙኚራ, ጭነት ሙኚራ እና ሌሎቜ ጊዜ ዹሚፈጅ ወይም ውድ ፈተናዎቜ - CI / ሲዲ ቧንቧዎቜ ውስጥ, ነገር ግን ግንባታ ውስጥ ዹተወሰኑ ሁነታዎቜ / ደሚጃዎቜ / ቧንቧዎቜ ውስጥ ብቻ, ለምሳሌ, ዚመልቀቂያ እጩ ለማዘጋጀት ጊዜ ወይም በእጅ ሲሮጥ.

ተግባር

በመጀመሪያ ትዕዛዙን በመጠቀም ሙኚራዎቜን በእጅ እንዲሮጡ ሀሳብ አቀርባለሁ። npm test. ኚዚያ በኋላ፣ በቁርጠኝነት ላይ ፈተናዎቻቜንን ለማስኬድ git hook እንጚምር። አንድ መያዝ አለ፡ ዚጂት መንጠቆዎቜ እንደ ማኚማቻው አካል አይቆጠሩም እና ስለዚህ ኹ GitHub ኚቀሪዎቹ ዚኮርስ ቁሳቁሶቜ ጋር ሊጣመሩ አይቜሉም። መንጠቆን ለመጫን መሮጥ ያስፈልግዎታል install_hook.sh ወይም ፋይሉን ይቅዱ repo/hooks/pre-commit ወደ አካባቢያዊ ማውጫ .git/hooks/.
ሲፈጜሙ፣ ፈተናዎቜ ሲካሄዱ ያያሉ እና ዹተወሰኑ ቁልፍ ቃላቶቜ በዝርዝሩ ውስጥ መኖራ቞ውን ያሚጋግጡ።

  1. ትዕዛዙን በማሄድ ሙኚራዎቜን እራስዎ ያሂዱ npm test በእርስዎ ዚኮርስ ማኚማቻ አቃፊ ውስጥ። ፈተናዎቹ መጠናቀቁን ያሚጋግጡ።
  2. በመሮጥ ዚቁርጥ መንጠቆን (ቅድመ-ቁርጠኝነት መንጠቆን) ያዘጋጁ install_hook.sh.
  3. ለውጊቜዎን በአካባቢያዊ ማኚማቻዎ ላይ ያድርጉ።
  4. ሙኚራዎቜን ኚማድሚግዎ በፊት መደሹጉን ያሚጋግጡ።

እነዚህን ቅደም ተኚተሎቜ ኹተኹተለ በኋላ ዚእርስዎ ማኚማቻ ይህን ይመስላል።
በተኚታታይ ውህደት ውስጥ ዚተለመዱ ሁኔታዎቜ

ቡድኖቜ

# УстаМПвОте pre-commit hook выпПлМОв install_hook.sh.  

# ЗакПЌЌОтьте ОзЌеМеМОя в лПкальМый репПзОтПрОй. ИспПльзуйте "Add first CI steps" в качестве сППбщеМОя прО кПЌЌОте.
git add ci.md ci.test.js
git commit -m "Add first CI steps"

# УбеЎОтесь, чтП тесты запускаются переЎ кПЌЌОтПЌ.  

ኮድ ወደ ዚርቀት ማኚማቻ ወይም ዚርቀት ቅርንጫፍ ያትሙ

አንዮ በአገር ውስጥ መስራታ቞ውን ኚጚሚሱ በኋላ፣ ገንቢዎቜ በመጚሚሻ ኚህዝብ ጋር እንዲዋሃድ ኮዳ቞ውን በይፋ እንዲገኙ ያደርጋሉ። በ GitHub፣ ይህ በተለምዶ ስራውን ወደ ማኚማቻው ዹግል ቅጂ (ዹግል ሹካ) ወይም ዹግል ቅርንጫፍ በማተም ይሳካል።

  • በሹካዎቜ፣ ገንቢ ዚርቀት ዚተጋራ ማኚማቻን ይዘጋዋል፣ ዹግል ዚርቀት ቅጂውን ይፈጥራል፣ እሱም ሹካ በመባልም ይታወቃል። ኚዚያ ይህን ዹግል ማኚማቻ ኚአካባቢው ጋር ለመስራት ይዘጋል። ሥራው ሲጠናቀቅ እና ተግባሮቹ ሲፈጞሙ, ወደ ሹካው ይገፋፋቾዋል, እዚያም ለሌሎቜ ይገኛሉ እና ወደ ዚጋራ ማኚማቻው ሊጣመሩ ይቜላሉ. ይህ አካሄድ በ GitHub ላይ በክፍት ምንጭ ፕሮጀክቶቜ ውስጥ በብዛት ጥቅም ላይ ይውላል። በተጚማሪም በእኔ ዹላቀ ኮርስ ውስጥ ጥቅም ላይ ይውላል [ዚቡድን ሥራ እና CI ኹ Git ጋር] (http://devops.redpill.solutions/).
  • ሌላው አቀራሚብ አንድ ዚርቀት ማኚማቻ ብቻ መጠቀም እና ቅርንጫፉን ብቻ መቁጠር ነው master ዚተጋራ ማኚማቻ "ዹተጠበቀ". በዚህ ሁኔታ ውስጥ፣ እያንዳንዱ ገንቢዎቜ ይህን ኮድ ሌሎቜ እንዲመለኚቱት በሩቅ ማኚማቻ ቅርንጫፎቜ ላይ ያትማሉ፣ ሁሉም ነገር በሥርዓት ኚሆነ፣ ያዋህዱት። master ዚጋራ ማኚማቻ.

በዚህ ልዩ ኮርስ, ቅርንጫፎቜን ዹሚጠቀም ዚስራ ፍሰት እንጠቀማለን.

ዚእኛን ኮድ እናተም.

ተግባር

  • ኚሚሰራው ቅርንጫፍዎ ጋር ተመሳሳይ ስም ባለው ዚርቀት ቅርንጫፍ ላይ ለውጊቜን ያትሙ

ቡድኖቜ

git push --set-upstream origin feature

ዚመሳብ ጥያቄ ፍጠር

ኚርዕስ ጋር ዚመሳብ ጥያቄ ይፍጠሩ ዚእርምጃዎቜ ግምገማ. ጫን feature እንደ "ዚጭንቅላት ቅርንጫፍ" እና master እንደ "መሰሚታዊ ቅርንጫፍ".

መጫኑን ያሚጋግጡ master በእሱ ውስጥ ማስቀመጫውን ሹካ እንደ "መሰሚታዊ ቅርንጫፍ" በኮርሱ ቁሳቁሶቜ ማኚማቻ ላይ ለሚቀርቡ ለውጊቜ ምላሜ አልሰጥም።

በ GitHub lingo ውስጥ "መሰሚታዊ ቅርንጫፍ" ስራዎን መሰሚት ያደሚጉበት ቅርንጫፍ ነው, እና "ዚጭንቅላት ቅርንጫፍ" ዚታቀዱትን ለውጊቜ ዚያዘ ቅርንጫፍ ነው.

በለውጊቹ ላይ ተወያዩ፣ ውይይቱ ሲቀጥል አዲስ ቃል ኪዳን ጚምሩ

ዚመሳብ ጥያቄ(PR)

ዚመሳብ ጥያቄ(PR) ኮድን ለመወያዚት እና ለመመዝገብ, እንዲሁም ዚኮድ ግምገማን ዚማካሄድ መንገድ ነው. ዚመሳብ ጥያቄዎቜ ዚተሰዚሙት ዚግለሰቊቜን ለውጊቜ ወደ አጠቃላይ ኮድ በማዋሃድ አጠቃላይ መንገድ ነው። በተለምዶ አንድ ሰው ዚፕሮጀክቱን ዚርቀት ኩፊሮላዊ ማኚማቻ ክሎታል እና በኮዱ ላይ በአካባቢው ይሰራል። ኹዚህ በኋላ ኮዱን በግል ዚርቀት ማኚማቻው ውስጥ ያስቀምጣል እና ለኩፊሮላዊው ማኚማቻ ኃላፊነት ያለባ቞ው ሰዎቜ እንዲያነሱት ይጠይቃል(ጎትትዚሚገመገሙበት እና ምናልባትም ዚሚዋሃዱበት ኮድ ወደ አካባቢያ቞ው ማኚማቻዎቜሁለቱን ድርጅቶቜ ተዋሐደ) ዚእሱ። ይህ ጜንሰ-ሐሳብ በሌሎቜ ስሞቜም ይታወቃል, ለምሳሌ, ዚውህደት ጥያቄ.

ዹ GitHubን ዚመሳብ ጥያቄ ባህሪን ወይም ተመሳሳይ መድሚኮቜን በትክክል መጠቀም አያስፈልግም። ዚልማት ቡድኖቜ ፊት ለፊት መገናኘትን፣ ዚድምጜ ጥሪዎቜን ወይም ኢሜልን ጚምሮ ሌሎቜ ዹመገናኛ ዘዎዎቜን ሊጠቀሙ ይቜላሉ ነገርግን ዚመድሚክ አይነት ዚመሳብ ጥያቄዎቜን ለመጠቀም ብዙ ምክንያቶቜ አሉ። ኚእነዚህ ውስጥ ጥቂቶቹ እነሆ፡-

  • ኹተወሰኑ ዚኮድ ለውጊቜ ጋር ዚተያያዙ ዚተደራጁ ውይይቶቜ;
  • ኚሁለቱም አውቶሞተሮቜ እና እኩዮቜ በሂደት ላይ ባሉ ስራዎቜ ላይ አስተያዚትን ለመመልኚት እንደ ቊታ;
  • ዚኮድ ግምገማዎቜን መደበኛ ማድሚግ;
  • ስለዚህ በኋላ ላይ ኹዚህ ወይም ኚዚያ ኮድ በስተጀርባ ያሉትን ምክንያቶቜ እና ግምትዎቜ ማወቅ ይቜላሉ.

አንድ ነገር መወያዚት ሲፈልጉ ወይም ግብሚመልስ ሲፈልጉ ብዙውን ጊዜ ዚመሳብ ጥያቄ ይፈጥራሉ። ለምሳሌ፣ ኚአንድ በላይ በሆነ መንገድ ሊተገበር በሚቜል ባህሪ ላይ እዚሰሩ ኚሆነ፣ ሀሳብዎን ለማካፈል እና እቅድዎን ኚተባባሪዎቜዎ ጋር ለመወያዚት ዚመጀመሪያውን መስመር ኮድ ኚመጻፍዎ በፊት ዚመሳብ ጥያቄ መፍጠር ይቜላሉ። ስራው ቀለል ያለ ኹሆነ, አንድ ነገር ኚተሰራ, ኹተፈፀመ እና መወያዚት በሚቜልበት ጊዜ ዚመሳብ ጥያቄ ይኚፈታል. በአንዳንድ ሁኔታዎቜ፣ ለጥራት ቁጥጥር ምክንያቶቜ ብቻ PRን መክፈት ይፈልጉ ይሆናል፡ አውቶማቲክ ሙኚራዎቜን ለማካሄድ ወይም ዚኮድ ግምገማዎቜን ለመጀመር። ዚወሰኑት ምንም ይሁን ምን፣ በመጎተት ጥያቄዎ ላይ ይሁንታ ዚሚፈልጉትን ሰዎቜ @ መጥቀስዎን አይርሱ።

በተለምዶ፣ PR ሲፈጥሩ ዚሚኚተሉትን ያደርጋሉ።

  • ለመለወጥ ያቀሚቡትን እና ዚት ያመልክቱ።
  • ዚለውጊቹን ዓላማ ዚሚያብራራ መግለጫ ይጻፉ። ሊፈልጉ ይቜላሉ፡
    • ኚኮዱ ግልጜ ያልሆነ ማንኛውንም አስፈላጊ ነገር መጹመር ወይም አውዱን ለመሚዳት ጠቃሚ ነገር ለምሳሌ ተዛማጅ #bugs እና ቁጥሮቜን ያድርጉ;
    • @ኹማንኛውም ሰው ጋር መስራት ለመጀመር ዚሚፈልጉትን ይጥቀሱ ወይም በኋላ ላይ በአስተያዚቶቹ ውስጥ @ መጥቀስ ይቜላሉ;
    • በአንድ ነገር ላይ እንዲሚዱ ወይም ዹተወሰነ ነገር እንዲያሚጋግጡ ባልደሚቊቜዎን ይጠይቁ።

አንዮ PR ን ኚኚፈቱ በእንደዚህ ዓይነት ሁኔታዎቜ ውስጥ እንዲሰሩ ዚተዋቀሩ ሙኚራዎቜ ይኹናወናሉ. በእኛ ሁኔታ, ይህ በአገር ውስጥ ያካሂድንበት ተመሳሳይ ዚፈተናዎቜ ስብስብ ይሆናል, ነገር ግን በእውነተኛ ፕሮጀክት ውስጥ ተጚማሪ ሙኚራዎቜ እና ቌኮቜ ሊኖሩ ይቜላሉ.

እባክዎ ፈተናዎቹ እስኪጠናቀቁ ድሚስ ይጠብቁ። ዚፈተናዎቹን ሁኔታ ኹ PR ውይይት ግርጌ በ GitHub በይነገጜ ውስጥ ማዚት ይቜላሉ። ፈተናዎቹ ሲጠናቀቁ ይቀጥሉ.

 ስለ CI ደሚጃዎቜ ዝርዝር ዚዘፈቀደነት ማስታወሻ ያክሉ

በዚህ ኮርስ ውስጥ ጥቅም ላይ ዹዋለው ዝርዝር ዹዘፈቀደ እና ተጚባጭ ነው, ስለዚህ ጉዳይ ማስታወሻ ማኹል አለብን.

 ተግባር፡ ለዚህ አስተያዚት ዚመሳብ ጥያቄ ፍጠር

  1. ወደ ቅርንጫፍ ቀይር master.
  2. ዹተሰዹመ ቅርንጫፍ ይፍጠሩ bugfix.
  3. በፋይሉ መጚሚሻ ላይ ዚማስታወሻ ጜሑፍ ያክሉ ci.md.
    > **GitHub flow** is sometimes used as a nickname to refer to a flavor of trunk-based development  
    when code is deployed straight from feature branches. This list is just an interpretation  
    that I use in my [DevOps courses](http://redpill.solutions).  
    The official tutorial is [here](https://guides.github.com/introduction/flow/).
  4. ለውጊቜን ያድርጉ.
  5. ክርውን ያትሙ bugfix ወደ ሩቅ ማኚማቻ.
  6. ዹተሰዹመ ዚመጎተት ጥያቄ ይፍጠሩ አስተያዚት በማኹል ላይ ኚራስ ቅርንጫፍ ጋር bugfix እና ዚመሠሚት ቅርንጫፍmaster.

መጫኑን ያሚጋግጡ master በእሱ ውስጥ ማስቀመጫውን ሹካ እንደ "መሰሚታዊ ቅርንጫፍ" በኮርሱ ቁሳቁሶቜ ማኚማቻ ላይ ለሚቀርቡ ለውጊቜ ምላሜ አልሰጥም።

ይህ ዚእርስዎ ማኚማቻ መምሰል ያለበት ነው።
በተኚታታይ ውህደት ውስጥ ዚተለመዱ ሁኔታዎቜ

ቡድኖቜ

# ПереключОтесь Ма ветку master. СПзЎайте ветку bugfix.
git checkout master

# СПзЎайте ветку bugfix-remark.
git checkout -b bugfix

# ДПбавьте текст прОЌечаМОя вМОзу ci.md.

# ЗакПЌЌОтьте ОзЌеМеМОя
git add ci.md
git commit -m "Add a remark about the list being opinionated"

# ОпублОкуйте ветку bugfix в уЎалёММый репПзОтПрОй.
git push --set-upstream origin bugfix

# СПзЎайте pull request прО пПЌПщО ОМтерфейса GitHub как ПпОсаМП выше

ዚመጎተት ጥያቄን አጜድቅ "አስተያዚት ማኹል"

ተግባር

  1. ዚመሳብ ጥያቄ ፍጠር።
  2. "ዚጎትት ጥያቄን አዋህድ" ን ጠቅ ያድርጉ።
  3. "ውህደቱን አሚጋግጥ" ን ጠቅ ያድርጉ።
  4. "ቅርንጫፍ ሰርዝ" ን ጠቅ ያድርጉ, ኹአሁን በኋላ አያስፈልገንም.

ይህ ኹተዋሃደ በኋላ ዹተፈጾመው ዲያግራም ነው።
በተኚታታይ ውህደት ውስጥ ዚተለመዱ ሁኔታዎቜ

 መስራትዎን ይቀጥሉ እና ሙኚራዎቜን ይጚምሩ

በመጎተት ጥያቄ ላይ መተባበር ብዙ ጊዜ ተጚማሪ ስራን ያስኚትላል። ይህ ብዙውን ጊዜ ዚኮድ ግምገማ ወይም ዚውይይት ውጀት ነው፣ ነገር ግን በእኛ ኮርስ ይህንን በ CI ደሚጃዎቜ ዝርዝር ውስጥ አዳዲስ እቃዎቜን በመጹመር ሞዮል እንሰራለን።

ቀጣይነት ያለው ውህደት በተለምዶ አንዳንድ ዚሙኚራ ሜፋንን ያካትታል። ዚሙኚራ ሜፋን መስፈርቶቜ ይለያያሉ እና ብዙውን ጊዜ እንደ "ዚአስተዋጜኊ መመሪያዎቜ" በተባለ ሰነድ ውስጥ ይገኛሉ። ቀላል እናደርገዋለን እና ለእያንዳንዱ መስመር በፍተሻ ዝርዝራቜን ውስጥ ፈተና እንጚምራለን ።

ስራዎቜን በሚሰሩበት ጊዜ መጀመሪያ ፈተናዎቹን ይሞክሩ። በትክክል ኚጫኑ pre-commit መንጠቆ ቀደም ብሎ, አዲስ ዹተጹመሹው ፈተና ይካሄዳል, አይሳካም, እና ምንም ነገር አይፈፀምም. ዚእኛ ፈተናዎቜ አንድ ነገር እዚሞኚሩ መሆናቾውን ዹምናውቀው በዚህ መንገድ መሆኑን ልብ ይበሉ። ዚሚገርመው፣ ኚፈተናዎቹ በፊት በኮዱ ኹጀመርን ፈተናዎቜን ማለፍ ወይ ኮዱ እንደተጠበቀው ሰርቷል ወይም ፈተናዎቹ ምንም ነገር እዚሞኚሩ አይደሉም ማለት ነው። በተጚማሪም ፈተናዎቹን በመጀመሪያ ደሹጃ ባንጜፍ ኖሮ ምንም ነገር ስለማያስታውሰን ልንሚሳ቞ው እንቜላለን።

በሙኚራ ዚሚመራ ልማት (TDD)

TDD ፈተናዎቜን ኚኮድ በፊት መፃፍ ይመክራል። TDD ዹሚጠቀም ዹተለመደ ዚስራ ሂደት ይህን ይመስላል።

  1. ፈተና ጚምር።
  2. ሁሉንም ፈተናዎቜ ያሂዱ እና አዲሱ ፈተና አለመሳካቱን ያሚጋግጡ።
  3. ኮዱን ይፃፉ።
  4. ፈተናዎቜን ያካሂዱ, ሁሉም ፈተናዎቜ ማለፋቾውን ያሚጋግጡ.
  5. ኮድዎን እንደገና ይፍጠሩ።
  6. ይድገሙ።

ያልተሳካላ቞ው ዹፈተና ውጀቶቜ ብዙውን ጊዜ በቀይ ስለሚታዩ እና ያለፉት ብዙውን ጊዜ በአሹንጓዮ ስለሚታዩ ዑደቱ ቀይ-አሹንጓዮ-ሪፋክተር በመባልም ይታወቃል።

ተግባር

በመጀመሪያ ፈተናዎቹን ለመሞኹር ይሞክሩ እና እንዲወድቁ ይፍቀዱ, ኚዚያም ዹ CI ደሹጃ ዝርዝርን ጜሁፍ ይጚምሩ እና ያስገቡ. ፈተናዎቹ እንዳለፉ ("አሹንጓዮ") ያያሉ.
ኚዚያ አዲሱን ኮድ ወደ ዚርቀት ማኚማቻው ያትሙ እና በGitHub በይነገጜ ውስጥ ዹሚደሹጉ ሙኚራዎቜን በፑል ጥያቄ ውይይቱ ግርጌ እና ዹPR ሁኔታ ማሻሻያ ይመልኚቱ።

  1. ወደ ቅርንጫፍ ቀይር feature.
  2. እነዚህን ሙኚራዎቜ ወደ ላይ ያክሉ ci.test.js ኚመጚሚሻው ጥሪ በኋላ it (...);.

    it('5. Merge/rebase commits from master. Make tests pass on the merge result.', () => {
      expect(/.*merge.*commits.*testss+pass.*/ig.test(fileContents)).toBe(true);
    });
    
    it('6. Deploy from the feature branch to production.', () => {
      expect(/.*Deploy.*tos+production.*/ig.test(fileContents)).toBe(true);
    });
    
    it('7. If everything is good in production for some period of time, merge changes to master.', () => {
      expect(/.*merge.*tos+master.*/ig.test(fileContents)).toBe(true);
    });

  3. ፈተናዎቜን ለመፈጾም ይሞክሩ. ኹሆነ pre-commit መንጠቆው ተጭኗል ፣ ዚቁርጠኝነት ሙኚራው አይሳካም።
  4. ኚዚያ ይህን ጜሑፍ ወደ ላይ ያክሉ ci.md.
    5. Merge/rebase commits from master. Make tests pass on the merge result.  
    6. Deploy from the feature branch with a sneaky bug to production.
    7. If everything is good in production for some period of time, merge changes to master. 
  5. በአካባቢው ለውጊቜን ያድርጉ እና ያድርጉ።
  6. በቅርንጫፉ ላይ ለውጊቜን ይለጥፉ feature.

አሁን እንደዚህ ያለ ነገር ሊኖርዎት ይገባል
በተኚታታይ ውህደት ውስጥ ዚተለመዱ ሁኔታዎቜ

ቡድኖቜ


# ПереключОтельМа ветку feature
git checkout feature

# ДПбавОть тесты в ci.test.js как ПпОсаМП выше

# ДПбавьте в ОМЎекс ci.test.js чтПбы пПзже закПЌЌОтОть
git add ci.test.js

# ППпытайтесь закПЌЌОтОть тесты. ЕслО pre-commit hook устаМПвлеМы, кПЌЌОт Ме прПОзПйЎёт.
git commit

# Теперь ЎПбавьте текст в ci.md как ПпОсаМП выше

# ВМесОте ОзЌеМеМОя О закПЌЌОтьте Ох
git add ci.md
git commit -m "Add the remaining CI steps"

# ОпублОкуйте ОзЌеМеМОя в ветку feature
git push

ግጭት አዋህድ

ወደ ጥያቄ ለውጥ ይሂዱ ዚእርምጃዎቜ ግምገማ.

ምንም እንኳን ስህተት ባናደርግም እና ዹኛ ኮድ ፈተናዎቜ ቢያልፉም፣ ቅርንጫፉን አሁንም ማዋሃድ አልቻልንም። feature О master. ሌላኛው ክር ስለሆነ ነው። bugfix ጋር ተቀላቅሏል master በዚህ PR ላይ እዚሰራን ሳለ.
ይህ ዚርቀት ቅርንጫፍ ያለበትን ሁኔታ ይፈጥራል master ቅርንጫፉን መሠሚት ካደሚግንበት ዹበለጠ አዲስ ስሪት አለው። feature. በዚህ ምክንያት HEADን ወደ ኋላ መመለስ አንቜልም። master እስኚ ክር መጚሚሻ ድሚስ feature. በዚህ ሁኔታ ቁርጠኝነትን መቀላቀል ወይም መተግበር አለብን feature እንደገና መመስሚት master. GitHub ምንም ግጭቶቜ ኹሌሉ አውቶማቲክ ውህደቶቜን በትክክል ማኹናወን ይቜላል። ወዮ፣ በእኛ ሁኔታ፣ ሁለቱም ቅርንጫፎቜ በፋይሉ ላይ ተቀናቃኝ ለውጊቜ አሏቾው ci.md. ይህ ሁኔታ ዚውህደት ግጭት በመባል ይታወቃል, እና እኛ በእጅ መፍታት አለብን.

አዋህድ ወይም እንደገና መሰሚት አድርግ

አዋህደኝ

  • ተጚማሪ ዚውህደት ቃል ይፈጥራል እና ዚስራ ታሪክን ያስቀምጣል።
    • ዚቅርንጫፎቜን ኊሪጅናል ቁርጠኝነት ኚመጀመሪያው ዹጊዜ ማህተም እና ደራሲያን ጋር ይጠብቃል።
    • በለውጥ ጥያቄ ውይይቶቜ ውስጥ ዚፈጞሙትን SHA ይቆጥባል እና ኚእነሱ ጋር ይገናኛል።
  • ዚአንድ ጊዜ ግጭት አፈታት ያስፈልገዋል።
  • ታሪኩን ቀጥተኛ ያልሆነ ያደርገዋል።
    • ኚቅርንጫፎቹ ብዛት ዚተነሳ (ዚአይዲኢ ገመድን ዚሚያስታውስ) ታሪኩ ለማንበብ አስ቞ጋሪ ሊሆን ይቜላል።
    • አውቶማቲክ ማሹም ዹበለጠ ኚባድ ያደርገዋል፣ ለምሳሌ git bisect ብዙም ጥቅም ዹሌለው - ዚውህደት ቃል ብቻ ነው ዚሚያገኘው።

ድጋሚ ገንዘብ

  • ድጋሚ ጚዋታዎቜ ኚመሠሚቱ ቅርንጫፍ አናት ላይ ካለው ዹአሁኑ ቅርንጫፍ አንድ በአንድ ይፈጜማሉ።
    • ኚአዳዲስ SHAዎቜ ጋር አዲስ ቁርጠኝነት ይፈጠራል፣ ይህም በ GitHub ውስጥ ያሉ ድርጊቶቜ ኹዋናው ዚመሳብ ጥያቄዎቜ ጋር እንዲጣጣሙ ያደርጋል፣ ነገር ግን ተዛማጅ አስተያዚቶቜ አይደሉም።
    • ኮሚቶቜ በሂደቱ ውስጥ እንደገና ሊጣመሩ እና ሊሻሻሉ ወይም ወደ አንድ ሊዋሃዱ ይቜላሉ።
  • በርካታ ግጭቶቜ መፍታት ሊያስፈልግ ይቜላል።
  • መስመራዊ ታሪክ እንዲቆዩ ያስቜልዎታል።
    • ታሪኩ በጣም ሹጅም እስካልሆነ ያለምክንያት ለማንበብ ቀላል ሊሆን ይቜላል።
    • ራስ-ሰር ማሹም እና መላ መፈለግ ትንሜ ቀላል ነው፡ ዚሚቻል ያደርገዋል git bisect, አውቶማቲክ መልሶ ማገገሚያዎቜን ዹበለጠ ግልጜ እና ዹበለጠ ሊተነብይ ይቜላል.
  • ኚባንዲራ ጋር ዚተሰደዱ ግዎታዎቜ ያለው ቅርንጫፍ ማተም ያስፈልገዋል --force ኚመጎተት ጥያቄዎቜ ጋር ጥቅም ላይ ሲውል.

በተለምዶ ቡድኖቹ ለውጊቜን ማዋሃድ ሲፈልጉ ሁልጊዜ ተመሳሳይ ስልት ለመጠቀም ይስማማሉ። ይህ ምናልባት "ንፁህ" ውህደት ወይም ኹላይ "ንፁህ" ቁርጠኝነት ወይም በመካኚል ያለ ነገር ለምሳሌ ኹላይ በይነተገናኝ ማድሚግ() ሊሆን ይቜላል።git rebase -i) በአገር ውስጥ ለቅርንጫፎቜ ለሕዝብ ማኚማቻ ላልታተሙ, ግን ለ "ሕዝባዊ" ቅርንጫፎቜ ይዋሃዳሉ.

እዚህ ውህደትን እንጠቀማለን.

ተግባር

  1. ኮዱ በአካባቢው ቅርንጫፍ ውስጥ መሆኑን ያሚጋግጡ master ኚርቀት ማኚማቻ ዘምኗል።
  2. ወደ ቅርንጫፍ ቀይር feature.
  3. ኚቅርንጫፍ ጋር ውህደት ይጀምሩ master. በተወዳዳሪ ለውጊቜ ምክንያት ዚውህደት ግጭት ci.md.
  4. ሁለቱም ዚእኛ ዹCI ደሚጃዎቜ ዝርዝር እና ስለሱ ያለው ማስታወሻ በጜሁፉ ውስጥ እንዲቆዩ ግጭቱን ይፍቱ።
  5. ወደ ሩቅ ቅርንጫፍ ዚውህደት ቃል ያትሙ feature.
  6. በ GitHub UI ውስጥ ዚመጎተት ጥያቄን ሁኔታ ይፈትሹ እና ውህደቱ እስኪፈታ ድሚስ ይጠብቁ።

ቡድኖቜ

# УбеЎОтесь, чтП кПЎ в лПкальМПе ветке `master` ПбМПвлёМ Оз уЎалёММПгП репПзОтПрОя.
git checkout master
git pull

# ПереключОтесь Ма ветку feature
git checkout feature

# ИМОцООруйте слОяМОе с веткПй master 
git merge master

# A merge conflict related to concurrent changes to ci.md will be reported
# => Auto-merging ci.md
#    CONFLICT (content): Merge conflict in ci.md
#    Automatic merge failed; fix conflicts and then commit the result.

# РазрешОте кПМфлОкт так, чтПбы О Маш спОсПк шагПв CI, О заЌечаМОе П МеЌ ПсталОсь в тексте.
# ПтреЎактОруйте ci.md чтПб ПМ Ме сПЎержал ЌаркерПв кПМфлОкта слОяМОя
git add ci.md
git merge --continue
# прО кПЌЌОте ЌПжете ПставОть сППбщеМОе пП уЌПлчаМОю

# ОпублОкуйте кПЌЌОт слОяМОя в уЎалеММую ветку feature.
git push

# ПрПверьте статус запрПса Ма ОзЌеМеМОя в пПльзПвательскПЌ ОМтерфейсе GitHub, ЎПжЎОтесь пПка слОяМОе Ме буЎет разрешеМП.

ታላቅ ስራ!

ዝርዝሩን ጹርሰሃል እና አሁን ዚመሳብ ጥያቄውን ማጜደቅ አለብህ master.

 ተግባር፡ ዚመጎተት ጥያቄን አጜድቅ "ዚእርምጃ ግምገማ"

  1. ዚመጎተት ጥያቄን ይክፈቱ።
  2. "ዚጎትት ጥያቄን አዋህድ" ን ጠቅ ያድርጉ።
  3. "ውህደቱን አሚጋግጥ" ን ጠቅ ያድርጉ።
  4. ኹአሁን በኋላ ስለማያስፈልገን "ቅርንጫፍ ሰርዝ" ን ጠቅ ያድርጉ።

ይህ በአሁኑ ጊዜ ዚእርስዎ ማኚማቻ ነው።
በተኚታታይ ውህደት ውስጥ ዚተለመዱ ሁኔታዎቜ

ዚምርት ስህተት

“ፈተና ስህተቶቜ መኖራ቞ውን ለማሳዚት፣ ግን መቅሚታ቞ውን ለማሳዚት ፈጜሞ መጠቀም ይቻላል” ተብሏል። ምንም እንኳን ፈተናዎቜ ቢያጋጥሙንም እና ምንም ስህተት ቢያሳዩንም አንድ ተንኮለኛ ሳንካ ወደ ምርት ገባ።

በእንደዚህ ዓይነት ሁኔታ ውስጥ እኛ ጥንቃቄ ማድሚግ አለብን-

  • በምርት ላይ ዹሚተገበሹው;
  • በክር ውስጥ ኮድ master ኚስህተት ጋር, ገንቢዎቜ አዲስ ሥራ መጀመር ይቜላሉ.

በሚቀጥለው እትም ልመልሰው ወይስ ላስተካክለው?

ወደ ኋላ መመለስ ማለት ስህተቱን ያካተቱ ወንጀሎቜን ወደ ማምሚት እና ወደነበሚበት መመለስ ዚታወቀውን ዚቀድሞ ስሪት ዚማሰማራት ሂደት ነው። "ወደ ፊት መግጠም" ዹመጠግን መጹመር ነው master እና አዲሱን ስሪት በተቻለ ፍጥነት ማሰማራት. ኮድ ወደ ምርት በሚሰራጭበት ጊዜ ኀፒአይ እና ዹመሹጃ ቋት መርሃ ግብሮቜ ስለሚቀያዚሩ ቀጣይነት ያለው ማድሚስ እና ጥሩ ዚሙኚራ ሜፋን፣ ወደ ኋላ መመለስ በሚቀጥለው ስሪት ውስጥ ኚማስተካኚል ዹበለጠ ኚባድ እና አደገኛ ነው።

ወደ ኋላ መዞር በእኛ ጉዳይ ምንም ዓይነት አደጋ ስለሌለው፣ ወደዚህ መንገድ እንሄዳለን፣ ምክንያቱም ይፈቅድልናል።

  • ስህተቱን በተቻለ ፍጥነት በምርቱ ላይ ያስተካክሉት;
  • ኮድ ያስገቡ master አዲስ ሥራ ለመጀመር ወዲያውኑ ተስማሚ።

ተግባር

  1. ወደ ቅርንጫፍ ቀይር master በአካባቢው።
  2. ዚአካባቢውን ማኚማቻ ኚርቀት ማኚማቻ ያዘምኑ።
  3. ዹPR ውህደት ቃልን ይመልሱ ዚእርምጃዎቜ ግምገማ в master.
  4. ለውጊቜን ወደ ዚርቀት ማኚማቻ ያትሙ።

ይህ ዚውህደት ቁርጠኝነት ዹተመለሰ ዚማኚማቻ ታሪክ ነው።
በተኚታታይ ውህደት ውስጥ ዚተለመዱ ሁኔታዎቜ

ቡድኖቜ

# ПереключОтесь Ма ветку master.
git checkout master

# ОбМПвОте лПкальМый репПзОтПрОй Оз уЎалёММПгП репПзОтПрОя.
git pull

# ОтЌеМОте кПЌЌОт слОяМОя PR Steps review в master.
# Мы ПтЌеМяеЌ кПЌЌОт слОяМОя, пПэтПЌу МаЌ МужМП выбрать ветку ОстПрОО, кПтПрую Ќы захПтОЌ ПставОть
git show HEAD

# преЎпПлПжОЌ, чтП кПЌЌОт, кПтПрый был пПслеЎМОЌ в ветке master ЎП слОяМОя, был ПтПбражёМ преЎыЎущей кПЌаМЎПй первыЌ
git revert HEAD -m 1
# ЌПжете Ме ЌеМять сППбщеМОя кПЌЌОтПв

# ОпублОкуйте ОзЌеМеМОя в уЎалёММый репПзОтПрОй
git push

 እራስን መሞኹር

እርግጠኛ ሁን ci.md ዚውህደት ቃልን ካድህሚ በኋላ "sneaky bug" ዹሚል ጜሑፍ አልያዘም።

ዹ CI ደሚጃዎቜን ዝርዝር ያስተካክሉ እና ወደ ዋና ይመልሱት።

ዚቅርንጫፉን ዚውህደት ቃል ሙሉ በሙሉ መልሰነዋል። feature. መልካም ዜናው አሁን ምንም ስህተት ዚለብንም master. መጥፎው ዜና ውድ ዹሆነ ቀጣይነት ያለው ዚውህደት እርምጃዎቜ ዝርዝራቜን ጠፍቷል። ስለዚህ ፣ በሐሳብ ደሹጃ ፣ ማስተካኚያውን ወደ ፈጻሚዎቹ መተግበር አለብን feature እና ወደ እነርሱ ይመልሱ master ኚማስተካኚያው ጋር.

ቜግሩን በተለያዚ መንገድ ልንመለኹተው እንቜላለን፡-

  • ውህደትን ዚሚያፈርስ ቁርጠኝነትን ይመልሱ feature с master;
  • መንቀሳቀስ ኚቀድሞው ይፈጾማል feature.

በዚህ ጉዳይ ላይ ዚተለያዩ ዚልማት ቡድኖቜ ዚተለያዩ አቀራሚቊቜን ይጠቀማሉ፣ ነገር ግን ጠቃሚ ቁርጠኝነትን ወደተለዹ ቅርንጫፍ እናንቀሳቅሳለን እና ለዚህ አዲስ ቅርንጫፍ ዹተለዹ ዚመሳብ ጥያቄ እንፈጥራለን።

ተግባር

  1. ዚሚባል ክር ይፍጠሩ feature-fix እና ወደ እሱ ይቀይሩ.
  2. ሁሉንም ግዎታዎቜ ኚቀድሞው ቅርንጫፍ ያዛውሩ feature ወደ አዲስ ክር. በስደት ወቅት ዚተኚሰቱትን ዚውህደት ግጭቶቜ መፍታት።

    በተኚታታይ ውህደት ውስጥ ዚተለመዱ ሁኔታዎቜ

  3. ዚድጋሚ ፈተናን ወደ ላይ ያክሉ ci.test.js:

    it('does not contain the sneaky bug', () => {
    expect( /.*sneakys+bug.*/gi.test(fileContents)).toBe(false);
    });

  4. አለመውደቃቾውን ለማሚጋገጥ ፈተናዎቹን በአካባቢው ያካሂዱ።
  5. ጜሑፉን "በድብቅ ሳንካ" አስወግድ ci.md.
  6. በመሹጃ ጠቋሚው ላይ ዚሙኚራ ለውጊቜን እና ዚእርምጃ ዝርዝር ለውጊቜን ይጚምሩ እና ያስፈጜሙ።
  7. ቅርንጫፉን ወደ ዚርቀት ማኚማቻ ያትሙ።

ኹዚህ ጋር ዚሚመሳሰል ነገር መጚሚስ አለቊት፡-
በተኚታታይ ውህደት ውስጥ ዚተለመዱ ሁኔታዎቜ

ቡድኖቜ

# СПзЎайте ветку пПЎ МазваМОеЌ feature-fix О переключОтесь Ма Мее.
git checkout -b feature-fix

# ПереМесОте все кПЌЌОты Оз бывшей веткО feature в МПвую ветку. РазрешОте кПМфлОкты слОяМОя, кПтПрые вПзМОклО прО переМПсе.
# ОспПльзуйте ОстПрОю чтПбы узМать хэшО кПЌЌОтПв:
# - преЎшествующегП кПЌЌОту с первПй частью спОска: C0
# - ЎПбавляющегП пПслеЎМОе элеЌеМты спОска: C2
git log --oneline --graph
git cherry-pick C0..C2
# разрешОте кПМфлОкты слОяМОя
# - ПтреЎактОруйте ci.md О/ОлО ci.test.js
# - ЎПбавьте файлы в ОМЎекс
# - выпПлМОте "git cherry-pick --continue", ЌПжете Ме ЌеМять сППбщеМОе кПЌЌОта

# ДПбавьте регрессОПММый тест в ci.test.js
# ЗапустОте тесты лПкальМП, чтПбы убеЎОться, чтП ПМО Ме завершаются успешМП.

# УЎалОте текст " with a sneaky bug" в ci.md.

# ДПбавьте в ОМЎекс ОзЌеМеМОя тестПв О в спОске шагПв О закПЌЌОтьте Ох.
git add ci.md ci.test.js
git commit -m "Fix the bug in steps list"

# ОпублОкуйте ветку в уЎалёММый репПзОтПрОй.
git push --set-upstream origin feature-fix

ዚመሳብ ጥያቄ ፍጠር።

ኚርዕስ ጋር ዚመሳብ ጥያቄ ይፍጠሩ ባህሪውን በማስተካኚል ላይ. ጫን feature-fix እንደ "ዚጭንቅላት ቅርንጫፍ" እና master እንደ "መሰሚታዊ ቅርንጫፍ".
እባክዎ ፈተናዎቹ እስኪጠናቀቁ ድሚስ ይጠብቁ። በPR ውይይት ግርጌ ላይ ዚፈተናዎቹን ሁኔታ ማዚት ይቜላሉ።

መጫኑን ያሚጋግጡ master በእሱ ውስጥ ማስቀመጫውን ሹካ እንደ "መሰሚታዊ ቅርንጫፍ" በኮርሱ ቁሳቁሶቜ ማኚማቻ ላይ ለሚቀርቡ ለውጊቜ ምላሜ አልሰጥም።

ዚመጎተት ጥያቄን አጜድቅ "ባህሪውን ማስተካኚል"

ስለ እርማትዎ እናመሰግናለን! እባክዎ ለውጊቹን ያጜድቁ master ኚመጎተት ጥያቄ.

ተግባር

  1. "ዚጎትት ጥያቄን አዋህድ" ን ጠቅ ያድርጉ።
  2. "ውህደቱን አሚጋግጥ" ን ጠቅ ያድርጉ።
  3. ኹአሁን በኋላ ስለማያስፈልገን "ቅርንጫፍ ሰርዝ" ን ጠቅ ያድርጉ።

በአሁኑ ጊዜ ሊኖርዎት ዚሚገባው ይህ ነው።
በተኚታታይ ውህደት ውስጥ ዚተለመዱ ሁኔታዎቜ

እንኳን ደስ አላቜሁ!

በተኚታታይ ውህደት ወቅት ሰዎቜ በተለምዶ ዚሚወስዷ቞ውን ሁሉንም እርምጃዎቜ ጚርሰሃል።

በትምህርቱ ላይ ማንኛቾውም ቜግሮቜ ካስተዋሉ ወይም እንዎት ማሻሻል እንደሚቜሉ ካወቁ እባክዎን ቜግር ይፍጠሩ ማኚማቻዎቜ ኚኮርስ ቁሳቁሶቜ ጋር. ይህ ኮርስ እንዲሁ አለው በይነተገናኝ ስሪት GitHub Learning Lab እንደ መድሚክ በመጠቀም።

ምንጭ: hab.com

አስተያዚት ያክሉ