අඛණ්ඩ ඒකාබද්ධතාවය සහිත සාමාන්ය තත්වයන්

ඔබ Git විධාන ඉගෙන ගෙන ඇති නමුත් යථාර්ථයේ දී අඛණ්ඩ ඒකාබද්ධතාවය (CI) ක්‍රියා කරන ආකාරය සිතා ගැනීමට අවශ්‍යද? එසේත් නැතිනම් ඔබේ දෛනික ක්‍රියාකාරකම් ප්‍රශස්ත කිරීමට ඔබට අවශ්‍ය විය හැකිද? මෙම පාඨමාලාව ඔබට GitHub ගබඩාවක් භාවිතයෙන් අඛණ්ඩව ඒකාබද්ධ කිරීමේ ප්‍රායෝගික කුසලතා ලබා දෙනු ඇත. මෙම පා course මාලාව ඔබට සරලව ක්ලික් කළ හැකි විශාරදයෙකු වීමට අදහස් නොකෙරේ; ඊට ප්‍රතිවිරුද්ධව, මිනිසුන් රැකියාවේදී සැබවින්ම කරන ක්‍රියාවන් ඔවුන් කරන ආකාරයටම ඔබ සිදු කරනු ඇත. ඔබ අදාළ පියවර හරහා යන විට මම න්‍යාය පැහැදිලි කරමි.

අපි මොකද කරන්නේ?

අපි ඉදිරියට යන විට, අපි ක්‍රමයෙන් සාමාන්‍ය CI පියවර ලැයිස්තුවක් සාදන්නෙමු, එය මෙම ලැයිස්තුව මතක තබා ගැනීමට හොඳ ක්‍රමයකි. වෙනත් වචන වලින් කිවහොත්, අපි සංවර්ධකයින් අඛණ්ඩ ඒකාබද්ධ කිරීම, අඛණ්ඩ ඒකාබද්ධ කිරීම සිදු කරන ක්‍රියා ලැයිස්තුවක් සාදන්නෙමු. අපගේ CI ක්‍රියාවලිය සැබෑ එකට සමීප කිරීමට අපි සරල පරීක්ෂණ මාලාවක් ද භාවිතා කරන්නෙමු.

මෙම GIF ඔබ පාඨමාලාව හරහා ඉදිරියට යන විට ඔබේ ගබඩාවේ ඇති කැපවීම් ක්‍රමානුකූලව පෙන්වයි. ඔබට පෙනෙන පරිදි, මෙහි සංකීර්ණ කිසිවක් නොමැති අතර වඩාත්ම අවශ්ය වන්නේ පමණි.

අඛණ්ඩ ඒකාබද්ධතාවය සහිත සාමාන්ය තත්වයන්

ඔබ පහත සම්මත CI අවස්ථා හරහා ගමන් කරනු ඇත:

  • විශේෂාංගයක් මත වැඩ කරන්න;
  • ගුණාත්මකභාවය සහතික කිරීම සඳහා ස්වයංක්‍රීය පරීක්ෂණ යෙදීම;
  • ප්රමුඛ කාර්යය ක්රියාත්මක කිරීම;
  • ශාඛා ඒකාබද්ධ කිරීමේදී ගැටුම් නිරාකරණය (ගැටුම් ඒකාබද්ධ කිරීම);
  • නිෂ්පාදන පරිසරයක දෝෂයක් ඇතිවේ.

ඔබ ඉගෙනගන්නේ කුමක්ද?

ඔබට පහත ප්‍රශ්නවලට පිළිතුරු දීමට හැකි වනු ඇත:

  • අඛණ්ඩ ඒකාබද්ධ කිරීම (CI) යනු කුමක්ද?
  • CI හි කුමන ආකාරයේ ස්වයංක්‍රීය පරීක්ෂණ භාවිතා කරන්නේද, සහ ඒවා ක්‍රියාත්මක කරන්නේ කුමන ක්‍රියාවලටද?
  • ඇදීමේ ඉල්ලීම් මොනවාද සහ ඒවා අවශ්‍ය වන්නේ කවදාද?
  • Test Driven Development (TDD) යනු කුමක්ද සහ එය CI හා සම්බන්ධ වන්නේ කෙසේද?
  • මම වෙනස්කම් ඒකාබද්ධ කළ යුතුද නැතහොත් නැවත සකස් කළ යුතුද?
  • ආපසු පෙරළන්නද නැතහොත් ඊළඟ අනුවාදය නිවැරදි කරන්නද?

මුලදී මම “අදින්න ඉල්ලීම්” වැනි දේවල් සෑම තැනකම පරිවර්තනය කළ නමුත් එහි ප්‍රතිඵලයක් ලෙස පෙළෙහි ඇති පිස්සුව අඩු කිරීම සඳහා සමහර ස්ථානවල ඉංග්‍රීසි වාක්‍ය ඛණ්ඩ ආපසු ලබා දීමට මම තීරණය කළෙමි. මම සමහර විට "ක්‍රමලේඛක surzhik" භාවිතා කරනු ඇත පුදුම ක්‍රියා පදය "commit" වැනි මිනිසුන් එය සැබවින්ම භාවිතා කරයි.

අඛණ්ඩ ඒකාබද්ධතාවය යනු කුමක්ද?

අඛණ්ඩ ඒකාබද්ධතාවය, හෝ CI, යනු එක් එක් කණ්ඩායම් සාමාජිකයා අවම වශයෙන් දිනකට වරක් තම කේතය පොදු ගබඩාවකට ඒකාබද්ධ කරන තාක්ෂණික භාවිතයකි, සහ ප්‍රතිඵලයක් ලෙස ලැබෙන කේතය අවම වශයෙන් දෝෂයකින් තොරව ගොඩනගා ගත යුතුය.

මෙම පදය සම්බන්ධයෙන් මතභේද පවතී

මතභේදයට තුඩු දෙන කරුණ වන්නේ ඒකාබද්ධතාවයේ වාර ගණනයි. ඇතැමුන් තර්ක කරන්නේ, සැබවින්ම අඛණ්ඩව ඒකාබද්ධ වීමට දිනකට එක් වරක් පමණක් කේතය ඒකාබද්ධ කිරීම ප්‍රමාණවත් නොවන බවයි. සෑම කෙනෙකුම උදෑසන නැවුම් කේතයක් ගෙන සවස් වරුවේ එය ඒකාබද්ධ කරන කණ්ඩායමක් සඳහා උදාහරණයක් ලබා දී ඇත. මෙය සාධාරණ විරෝධයක් වුවද, සාමාන්‍යයෙන් විශ්වාස කරන්නේ දිනකට එක් වරක් අර්ථ දැක්වීම සාධාරණ ලෙස ප්‍රායෝගික, විශේෂිත සහ විවිධ ප්‍රමාණයේ කණ්ඩායම් සඳහා සුදුසු බවයි.

තවත් විරෝධයක් නම්, C++ තවදුරටත් සංවර්ධනයේදී භාවිතා වන එකම භාෂාව නොවන අතර, වලංගු කිරීමේ ක්‍රමයක් ලෙස දෝෂ රහිත එකලස් කිරීම දුර්වලයි. සමහර පරීක්ෂණ කට්ටල (උදාහරණයක් ලෙස, දේශීයව ක්‍රියාත්මක කරන ලද ඒකක පරීක්ෂණ) ද සාර්ථකව සම්පූර්ණ කළ යුතුය. මේ මොහොතේ, ප්‍රජාව මෙය අවශ්‍යතාවයක් බවට පත් කිරීම කරා ගමන් කරමින් සිටින අතර, අනාගතයේ දී "ඉදිකිරීම් + ඒකක පරීක්ෂණ" එය දැනටමත් කර නොමැති නම්, සාමාන්‍ය භාවිතයක් බවට පත්වනු ඇත.

අඛණ්ඩ ඒකාබද්ධතාවය වෙනස් වේ අඛණ්ඩ බෙදාහැරීම (අඛණ්ඩ බෙදාහැරීම, සීඩී) එය එක් එක් ඒකාබද්ධ චක්රය පසු නිදහස් අපේක්ෂකයා අවශ්ය නොවේ.

අපි පාඨමාලාව පුරාම භාවිතා කරන පියවර ලැයිස්තුව

  1. නවතම කේතය අදින්න. සිට ශාඛාවක් සාදන්න master. වැඩ පටන් ගන්න.
  2. ඔබගේ නව ශාඛාවේ කැපවීම් සාදන්න. දේශීයව ගොඩනඟා පරීක්ෂා කරන්න. සමත්ද? ඊළඟ පියවරට යන්න. අසාර්ථකද? දෝෂ හෝ පරීක්ෂණ නිවැරදි කර නැවත උත්සාහ කරන්න.
  3. ඔබගේ දුරස්ථ ගබඩාව හෝ දුරස්ථ ශාඛාව වෙත තල්ලු කරන්න.
  4. ඇදීමේ ඉල්ලීමක් සාදන්න. වෙනස්කම් සාකච්ඡා කරන්න, සාකච්ඡාව දිගටම කරගෙන යන විට තවත් කැපවීම් එකතු කරන්න. විශේෂාංග ශාඛාව මත පරීක්ෂණ සමත් කරන්න.
  5. මාස්ටර් වෙතින් ඒකාබද්ධ/ප්‍රතිපාදන කැපවීම්. ඒකාබද්ධ ප්‍රතිඵලය මත පරීක්ෂණ සමත් කරවන්න.
  6. විශේෂාංග ශාඛාවේ සිට නිෂ්පාදනය දක්වා යෙදවීම.
  7. යම් කාලයක් සඳහා නිෂ්පාදනයේ සෑම දෙයක්ම හොඳ නම්, මාස්ටර් වෙත වෙනස්කම් ඒකාබද්ධ කරන්න.

අඛණ්ඩ ඒකාබද්ධතාවය සහිත සාමාන්ය තත්වයන්

️ සකස් කිරීම

ඔබ සතුව නිවැරදි මෘදුකාංගයක් ඇති බවට වග බලා ගන්න

මෙම පාඨමාලාව හැදෑරීමට ඔබට අවශ්ය වනු ඇත Node.js и Git සේවාදායකයා.

ඔබට ඕනෑම Git සේවාදායකයක් භාවිතා කළ හැකිය, නමුත් මම විධාන රේඛාව සඳහා පමණක් විධාන ලබා දෙන්නෙමි.

ඔබ විධාන රේඛාවට සහය දක්වන Git සේවාදායකයක් ස්ථාපනය කර ඇති බවට වග බලා ගන්න

ඔබට තවමත් විධාන රේඛාවට සහය දක්වන Git සේවාලාභියෙකු නොමැති නම්, ඔබට ස්ථාපන උපදෙස් සොයාගත හැක මෙහි.

ගබඩාව සකස් කරන්න

ඔබට පුද්ගලික පිටපතක් නිර්මාණය කිරීමට අවශ්‍ය වනු ඇත (දෙබලක) පාඨමාලා සඳහා කේතය සහිත අච්චු ගබඩාව GitHub මත. මෙම පුද්ගලික පිටපත ඇමතීමට එකඟ වෙමු පාඨමාලා ගබඩාව.

ඉවරද? ඔබ පෙරනිමි සැකසුම් වෙනස් කර නොමැති නම්, ඔබේ පාඨමාලා ගබඩාව බොහෝ විට හඳුන්වනු ලැබේ continuous-integration-team-scenarios-students, එය ඔබගේ GitHub ගිණුමේ පිහිටා ඇති අතර URL එක මෙලෙස දිස්වේ

https://github.com/<ваше имя ползователя на GitHub>/continuous-integration-team-scenarios-students

මම සරලව මෙම ලිපිනය අමතන්නෙමි <URL репозитория>.

වැනි කෝණ වරහන් <тут> එයින් අදහස් වන්නේ ඔබ එවැනි ප්‍රකාශනයක් සුදුසු අගයක් සමඟ ප්‍රතිස්ථාපනය කළ යුතු බවයි.

එය සහතික කර ගන්න GitHub ක්‍රියා මෙම පාඨමාලා ගබඩාව සඳහා ඇතුළත් කර ඇත. ඒවා සක්‍රීය කර නොමැති නම්, කරුණාකර පිටුවේ මැද ඇති විශාල බොත්තම ක්ලික් කිරීමෙන් ඒවා සක්‍රීය කරන්න, GitHub අතුරුමුහුණතෙහි ඇති ක්‍රියා ක්ලික් කිරීමෙන් ඔබට ලබාගත හැක.

GitHub ක්‍රියා සක්‍රීය කර නොමැති නම් මගේ උපදෙස් අනුගමනය කරමින් ඔබට පාඨමාලාව සම්පූර්ණ කිරීමට නොහැකි වනු ඇත.

අඛණ්ඩ ඒකාබද්ධතාවය සහිත සාමාන්ය තත්වයන්

අපි මෙහි සම්පාදනය කරන ලැයිස්තුවේ වත්මන් තත්ත්වය බැලීමට ඔබට සැමවිටම GitHub හි Markdown විදැහුම් කිරීමේ හැකියාව භාවිතා කළ හැක.

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

පිළිතුරු ගැන

මෙම පාඨමාලාව සම්පූර්ණ කිරීමට හොඳම ක්රමය එය ඔබම කිරීම වුවද, ඔබට යම් දුෂ්කරතා ඇති විය හැක.

ඔබට කුමක් කළ යුතු දැයි නොතේරෙන බවත් දිගටම කරගෙන යා නොහැකි බවත් ඔබට හැඟේ නම්, ඔබට නූල් දෙස බැලිය හැකිය solution, එය ඔබගේ ආරම්භක ගබඩාවේ ඇත.
කරුණාකර ඒකාබද්ධ නොකරන්න solution в master පාඨමාලාව අතරතුර. Git අපට ලබා දෙන සියලුම හැකියාවන් භාවිතා කරමින් ඔබට කළ යුතු දේ සොයා ගැනීමට හෝ ඔබේ කේතය කතුවරයා සමඟ සංසන්දනය කිරීමට ඔබට මෙම ශාඛාව භාවිතා කළ හැකිය. ඔබ සම්පූර්ණයෙන්ම නැති වී ඇත්නම්, ඔබට ඔබේ ශාඛාව සම්පූර්ණයෙන්ම ප්රතිස්ථාපනය කළ හැකිය 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 පාඨමාලා ගබඩා නාමාවලියෙහි; පරීක්ෂණ ක්‍රියාත්මක කිරීමට අපි භාවිතා කරන Jest ස්ථාපනය කිරීමට අපට එය අවශ්‍යයි.
  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 как описано выше

නව ශාඛාවක් මත කැපවීම් සාදන්න, දේශීයව ගොඩනඟා පරීක්ෂා කරන්න

අපි සිදු කිරීමට පෙර පරීක්ෂණ ක්‍රියාත්මක කිරීමට සහ පසුව කේතය සිදු කිරීමට සූදානම් කරන්නෙමු.

පරීක්ෂණ ස්වයංක්‍රීයව ක්‍රියාත්මක වන විට සාමාන්‍ය අවස්ථා

  • දේශීයව:
    • අඛණ්ඩව හෝ සුදුසු කේත වෙනස් කිරීම් වලට ප්‍රතිචාර වශයෙන්;
    • සුරැකීමේදී (පරිවර්ථනය කරන ලද හෝ JIT සම්පාදනය කරන ලද භාෂා සඳහා);
    • එකලස් කිරීමේදී (සම්පාදනය අවශ්ය විට);
    • කැපවීම මත;
    • හවුල් ගබඩාවකට ප්‍රකාශනය කරන විට.

  • ගොඩනැගීමේ සේවාදායකයේ හෝ ගොඩනැගීමේ පරිසරයේ:
    • කේතය පුද්ගලික ශාඛාවකට/ ගබඩාවකට ප්‍රකාශ කළ විට.
    • මෙම ත්‍රෙඩ් එකේ කේතය පරීක්‍ෂා කරමින් පවතී.
    • ඒකාබද්ධයේ විභව ප්‍රතිඵලය පරීක්‍ෂා කෙරේ (සාමාන්‍යයෙන් සමග master).
    • අඛණ්ඩ ඒකාබද්ධ කිරීමේ අදියර / අඛණ්ඩ බෙදාහැරීමේ නල මාර්ගයක් ලෙස

සාමාන්‍යයෙන්, පරීක්ෂණ කට්ටලයක් වේගයෙන් ක්‍රියාත්මක වන තරමට, ඔබට එය ක්‍රියාත්මක කිරීමට බොහෝ විට දැරිය හැකිය. සාමාන්‍ය වේදිකා බෙදා හැරීමක් මේ වගේ විය හැකිය.

  • වේගවත් ඒකක පරීක්ෂණ - ගොඩනැගීමේදී, CI නල මාර්ගයේ
  • මන්දගාමී ඒකක පරීක්ෂණ, වේගවත් සංරචක සහ ඒකාබද්ධතා පරීක්ෂණ - කැපවීමෙන්, CI නල මාර්ගයේ
  • මන්දගාමී සංරචක සහ ඒකාබද්ධතා පරීක්ෂණ - CI නල මාර්ගයේ
  • ආරක්‍ෂක පරීක්‍ෂණය, බර පරීක්‍ෂා කිරීම සහ අනෙකුත් කාලය ගතවන හෝ මිල අධික පරීක්‍ෂණ - CI/CD නල මාර්ගවල, නමුත් ගොඩනැගීමේ ඇතැම් මාතයන්/අදියර/නල මාර්ගවල පමණි, උදාහරණයක් ලෙස, මුදා හැරීමේ අපේක්ෂකයෙකු සූදානම් කිරීමේදී හෝ අතින් ධාවනය වන විට.

️ පැවරුම

විධානය භාවිතා කර පළමුව පරීක්ෂණ අතින් ධාවනය කිරීමට මම යෝජනා කරමි npm test. ඊට පසු, අපගේ පරීක්ෂණ කැපවීම මත ධාවනය කිරීමට git කොක්කක් එක් කරමු. එක් අල්ලා ගැනීමක් ඇත: Git කොකු ගබඩාවේ කොටසක් ලෙස නොසැලකෙන අතර එම නිසා 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 හි විවෘත මූලාශ්‍ර ව්‍යාපෘති වල බහුලව භාවිතා වේ. එය මගේ උසස් පාඨමාලාවේ ද භාවිතා වේ [කණ්ඩායම් වැඩ සහ Git සමඟ CI] (http://devops.redpill.solutions/).
  • තවත් ප්රවේශයක් වන්නේ එක් දුරස්ථ ගබඩාවක් පමණක් භාවිතා කිරීම සහ ශාඛාව පමණක් ගණන් කිරීමයි master හවුල් ගබඩාව "ආරක්ෂිත". මෙම අවස්ථාවෙහිදී, තනි සංවර්ධකයින් ඔවුන්ගේ කේතය දුරස්ථ ගබඩාවක ශාඛා වෙත ප්‍රකාශයට පත් කරයි, එවිට අනෙක් අයට මෙම කේතය දෙස බැලිය හැකිය, සියල්ල පිළිවෙලට තිබේ නම්, එය සමඟ ඒකාබද්ධ කරන්න master හවුල් ගබඩාව.

මෙම විශේෂිත පාඨමාලාවේදී, අපි ශාඛා භාවිතා කරන කාර්ය ප්රවාහයක් භාවිතා කරනු ඇත.

අපි අපේ කේතය ප්‍රකාශයට පත් කරමු.

️ පැවරුම

  • ඔබගේ වැඩ කරන ශාඛාවේ නමම ඇති දුරස්ථ ශාඛාවකට වෙනස්කම් ප්‍රකාශ කරන්න

කොමන්ඩ්

git push --set-upstream origin feature

ඇදීමේ ඉල්ලීමක් සාදන්න

මාතෘකාවක් සහිත ඇදීමේ ඉල්ලීමක් සාදන්න පියවර සමාලෝචනය. ස්ථාපනය කරන්න feature "හිස ශාඛාව" වැනි සහ master "මූලික ශාඛාව" වගේ.

ඔබ ස්ථාපනය කර ඇති බවට වග බලා ගන්න master ඔහුගේ තුළ ගබඩාව දෙබලන්න "මූලික ශාඛාවක්" ලෙස, පාඨමාලා ද්‍රව්‍ය ගබඩාවේ වෙනස්කම් සඳහා වන ඉල්ලීම් වලට මම ප්‍රතිචාර නොදක්වමි.

GitHub lingo හි, "base branch" යනු ඔබ ඔබේ කාර්යයට පාදක වන ශාඛාව වන අතර, "head branch" යනු යෝජිත වෙනස්කම් අඩංගු ශාඛාවයි.

සාකච්ඡාව දිගටම කරගෙන යන විට වෙනස්කම් සාකච්ඡා කරන්න, නව කැපවීම් එකතු කරන්න

අදින්න ඉල්ලීම (PR)

අදින්න ඉල්ලීම (PR) කේතය සාකච්ඡා කිරීමට සහ ලේඛනගත කිරීමට මෙන්ම කේත සමාලෝචනය කිරීමටද මාර්ගයකි. පුල් ඉල්ලීම් නම් කර ඇත්තේ පුද්ගල වෙනස්කම් සමස්ත කේතයට ඒකාබද්ධ කිරීමේ සාමාන්‍ය ක්‍රමය අනුව ය. සාමාන්‍යයෙන්, පුද්ගලයෙකු ව්‍යාපෘතියේ දුරස්ථ නිල ගබඩාව ක්ලෝන කර දේශීයව කේතය මත ක්‍රියා කරයි. මෙයින් පසු, ඔහු කේතය ඔහුගේ පුද්ගලික දුරස්ථ ගබඩාවේ තබා නිල ගබඩාව සඳහා වගකිව යුතු අයගෙන් ඉල්ලා සිටී(අදින්න) එහි කේතය ඔවුන්ගේ දේශීය ගබඩා තුළට, එහිදී ඔවුන් සමාලෝචනය කර සමහර විට ඒකාබද්ධ කරයි(ඒකාබද්ධ කිරීම) ඔහුගේ. මෙම සංකල්පය වෙනත් නම් වලින් ද හැඳින්වේ, උදාහරණයක් ලෙස, ඒකාබද්ධ ඉල්ලීම.

ඔබට ඇත්තටම GitHub හෝ ඒ හා සමාන වේදිකාවල ඇදීමේ ඉල්ලීම් විශේෂාංගය භාවිතා කිරීමට අවශ්‍ය නැත. සංවර්ධන කණ්ඩායම් මුහුණට මුහුණ සන්නිවේදනය, හඬ ඇමතුම් හෝ විද්‍යුත් තැපෑල ඇතුළුව වෙනත් සන්නිවේදන ක්‍රම භාවිතා කළ හැක, නමුත් සංසදයේ ආකාරයේ ඇදීමේ ඉල්ලීම් භාවිතා කිරීමට තවමත් හේතු ගණනාවක් තිබේ. ඒවායින් කිහිපයක් මෙන්න:

  • නිශ්චිත කේත වෙනස් කිරීම් සම්බන්ධ සංවිධිත සාකච්ඡා;
  • ස්වයං පරීක්ෂකයින් සහ සම වයසේ මිතුරන් යන දෙඅංශයෙන්ම වැඩ කරමින් පවතින ප්‍රතිපෝෂණ බැලීමට ස්ථානයක් ලෙස;
  • කේත සමාලෝචන විධිමත් කිරීම;
  • එවිට ඔබට මෙම හෝ එම කේතය පිටුපස ඇති හේතු සහ සලකා බැලීම් පසුව සොයාගත හැකිය.

ඔබට යමක් සාකච්ඡා කිරීමට හෝ ප්‍රතිපෝෂණ ලබා ගැනීමට අවශ්‍ය වූ විට සාමාන්‍යයෙන් ඔබ ඇදීමේ ඉල්ලීමක් සාදයි. උදාහරණයක් ලෙස, ඔබ එක් ආකාරයකින් ක්‍රියාත්මක කළ හැකි විශේෂාංගයක් මත වැඩ කරන්නේ නම්, ඔබේ අදහස් බෙදා ගැනීමට සහ ඔබේ සහකරුවන් සමඟ ඔබේ සැලසුම් සාකච්ඡා කිරීමට කේතයේ පළමු පේළිය ලිවීමට පෙර ඔබට ඇදීමේ ඉල්ලීමක් සෑදිය හැක. කාර්යය සරල නම්, යමක් දැනටමත් සිදු කර ඇති විට, කැපවී ඇති විට සහ සාකච්ඡා කළ හැකි විට ඇදීමේ ඉල්ලීමක් විවෘත වේ. සමහර අවස්ථා වලදී, ඔබට තත්ත්ව පාලන හේතූන් මත පමණක් PR විවෘත කිරීමට අවශ්‍ය විය හැකිය: ස්වයංක්‍රීය පරීක්ෂණ ධාවනය කිරීමට හෝ කේත සමාලෝචන ආරම්භ කිරීමට. ඔබ කුමක් තීරණය කළත්, ඔබගේ ඇදීමේ ඉල්ලීමෙහි ඔබට අනුමැතිය අවශ්‍ය පුද්ගලයින් @ සඳහන් කිරීමට අමතක නොකරන්න.

සාමාන්යයෙන්, PR නිර්මාණය කිරීමේදී, ඔබ පහත සඳහන් දේ කරන්න.

  • ඔබ වෙනස් කිරීමට යෝජනා කරන්නේ කුමක්ද සහ කොතැනද යන්න සඳහන් කරන්න.
  • වෙනස්කම්වල අරමුණ පැහැදිලි කරමින් විස්තරයක් ලියන්න. ඔබට අවශ්‍ය විය හැක:
    • කේතයෙන් නොපැහැදිලි වැදගත් දෙයක් හෝ අදාළ #දෝෂ සහ කැපවීම් අංක වැනි සන්දර්භය තේරුම් ගැනීමට ප්‍රයෝජනවත් දෙයක් එක් කරන්න;
    • ඔබට වැඩ ආරම්භ කිරීමට අවශ්‍ය ඕනෑම අයෙකු @සඳහන් කරන්න, නැතහොත් ඔබට පසුව අදහස් දැක්වීමේදී ඔවුන්ව @සඳහන් කළ හැකිය;
    • යම් දෙයකට උදව් කිරීමට හෝ විශේෂිත දෙයක් පරීක්ෂා කිරීමට සගයන්ගෙන් ඉල්ලා සිටින්න.

ඔබ PR විවෘත කළ පසු, එවැනි අවස්ථා වලදී ධාවනය කිරීමට වින්‍යාස කර ඇති පරීක්ෂණ ක්‍රියාත්මක වේ. අපගේ නඩුවේදී, මෙය අප දේශීයව ක්‍රියාත්මක කළ පරීක්ෂණ මාලාවම වනු ඇත, නමුත් සැබෑ ව්‍යාපෘතියක අමතර පරීක්ෂණ සහ චෙක්පත් තිබිය හැකිය.

පරීක්ෂණ අවසන් වන තෙක් කරුණාකර රැඳී සිටින්න. GitHub අතුරුමුහුණත තුළ PR සාකච්ඡාවේ පහළින් ඔබට පරීක්ෂණවල තත්ත්වය දැක ගත හැකිය. පරීක්ෂණ අවසන් වූ පසු ඉදිරියට යන්න.

️ 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 එක rewind කරන්න බෑ master නූල් අවසානය දක්වා feature. මෙම තත්වය තුළ, අපට බැඳීම් ඒකාබද්ධ කිරීමට හෝ යෙදීමට අවශ්‍ය වේ feature නැවත පදනම master. ගැටුම් නොමැති නම් GitHub හට ඇත්ත වශයෙන්ම ස්වයංක්‍රීය ඒකාබද්ධ කිරීම් සිදු කළ හැක. අහෝ, අපගේ තත්වය තුළ, ශාඛා දෙකම ගොනුවේ තරඟකාරී වෙනස්කම් ඇත ci.md. මෙම තත්වය ඒකාබද්ධ ගැටුමක් ලෙස හඳුන්වනු ලබන අතර, අපි එය අතින් විසඳා ගත යුතුය.

ඒකාබද්ධ කරන්න හෝ නැවත සකස් කරන්න

ඒකාබද්ධ කරන්න

  • අතිරේක ඒකාබද්ධ කැපවීමක් නිර්මාණය කර වැඩ ඉතිහාසය සුරකියි.
    • ශාඛාවල මුල් කැපවීම් ඒවායේ මුල් වේලා මුද්දර සහ කතුවරුන් සමඟ සංරක්ෂණය කරයි.
    • වෙනස් කිරීමේ ඉල්ලීම් සාකච්ඡාවලදී කැපවීම්වල SHA සුරකින අතර ඒවාට සම්බන්ධ කරයි.
  • එක් වරක් ගැටුම් නිරාකරණය කිරීම අවශ්‍ය වේ.
  • කතාව රේඛීය නොවන බවට පත් කරයි.
    • ශාඛා විශාල ප්‍රමාණයක් (අයිඩීඊ කේබලයක් සිහිගන්වයි) නිසා කතාව කියවීම අපහසු විය හැක.
    • ස්වයංක්‍රීය නිදොස්කරණය වඩාත් අපහසු කරයි, උදා. git bisect අඩු ප්‍රයෝජනවත් - එය ඒකාබද්ධ කිරීමේ කැපවීම පමණක් සොයා ගනී.

නැවත සකස් කරන්න

  • පාදක ශාඛාව මත ඇති වත්මන් ශාඛාවෙන් නැවත ධාවනය කිරීම එකින් එක සිදු වේ.
    • නව SHAs සමඟ නව බැඳීම් උත්පාදනය වන අතර, 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. අපට එය තවදුරටත් අවශ්‍ය නොවන බැවින් "මකන්න ශාඛාව" ක්ලික් කරන්න.

මේ මොහොතේ ඔබේ ගබඩාව මෙයයි
අඛණ්ඩ ඒකාබද්ධතාවය සහිත සාමාන්ය තත්වයන්

නිෂ්පාදන දෝෂය

“පරීක්‍ෂණයෙන් දෝෂ පවතින බව පෙන්වීමට භාවිත කළ හැකි නමුත් ඒවා නොමැති බව කිසිවිටෙක නොපෙන්වන” බව පැවසේ. අපට පරීක්ෂණ තිබුණත් ඔවුන් අපට කිසිදු දෝෂයක් පෙන්වූයේ නැතත්, ද්‍රෝහී දෝෂයක් නිෂ්පාදනයට රිංගා ඇත.

මෙවැනි අවස්ථාවක, අප සැලකිලිමත් විය යුත්තේ:

  • නිෂ්පාදනයේ යොදවා ඇති දේ;
  • ත්‍රෙඩ් එකේ code master දෝෂයක් සමඟ, සංවර්ධකයින්ට නව වැඩ ආරම්භ කළ හැකිය.

මම එය ආපසු හැරවිය යුතුද නැතහොත් ඊළඟ අනුවාදයෙන් එය නිවැරදි කළ යුතුද?

පෙරළීම යනු කලින් දන්නා හොඳ අනුවාදයක් නිෂ්පාදනයට යෙදවීම සහ දෝෂය අඩංගු කැපවීම් ප්‍රතිවර්තනය කිරීමේ ක්‍රියාවලියයි. "ඉදිරියට සවි කිරීම" යනු නිවැරදි කිරීමක් එකතු කිරීමයි master සහ හැකි ඉක්මනින් නව අනුවාදය යෙදවීම. අඛණ්ඩ බෙදාහැරීම් සහ හොඳ පරීක්ෂණ ආවරණයක් සහිතව, නිෂ්පාදනයට කේතය යොදවන විට API සහ දත්ත සමුදා ක්‍රම වෙනස් වන බැවින්, ආපසු හැරීම සාමාන්‍යයෙන් ඊළඟ අනුවාදයේ එය සවි කිරීමට වඩා දුෂ්කර හා අවදානම් සහගත වේ.

ආපසු පෙරළීම අපගේ නඩුවේදී කිසිදු අවදානමක් නොපවතින බැවින්, එය අපට ඉඩ සලසන බැවින්, අපි මෙම මාර්ගයේ යන්නෙමු

  • නිෂ්පාදනයේ දෝෂය හැකි ඉක්මනින් නිවැරදි කරන්න;
  • කේතය සාදන්න 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 භාවිතා කිරීම.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න