بل اعتراض دا دی چې C++ اوس یوازینۍ ژبه نه ده چې په پراختیا کې کارول کیږي، او په ساده ډول د تایید کولو د لارې په توګه د غلطۍ څخه پاک مجلس ته اړتیا کمزورې ده. د ازموینو ځینې سیټ (د بیلګې په توګه، د واحد ازموینې په محلي توګه اجرا شوي) باید په بریالیتوب سره بشپړ شي. په اوس وخت کې، ټولنه د دې اړتیا په لور حرکت کوي، او په راتلونکي کې به د "جوړولو + واحد ازموینې" شاید یو عام عمل شي، که دا مخکې نه وي.
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);
});
فایل ته د لومړي 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 как описано выше
ستاسو ذخیره باید د دې ګامونو تعقیب وروسته داسې ښکاري.
کنوانډیټ
# Установите 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 د ګیټ سره] (http://devops.redpill.solutions/).
بله لاره دا ده چې یوازې یو ریموټ ذخیره وکاروئ او یوازې څانګه حساب کړئ master شریک شوی ذخیره "محفوظ شوی". په دې سناریو کې، انفرادي پراختیا کونکي خپل کوډ د لیرې پرتو ذخیره څانګو ته خپروي ترڅو نور کولی شي دا کوډ وګوري، که هرڅه سم وي، دا سره یوځای کړئ. master شریک ذخیره.
پدې ځانګړي کورس کې ، موږ به د کاري فلو څخه کار واخلو چې څانګې کاروي.
> **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/).
بدلونونه ژمن کړئ.
موضوع خپره کړئ bugfix یو لیرې ذخیره ته.
په نوم د پلولو غوښتنه جوړه کړئ د تبصرې اضافه کول د سر څانګې سره bugfix او بنسټ څانګه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 как описано выше
د پلولو غوښتنه تصویب کړئ "د تبصرې اضافه کول"
️ دنده
د کشولو غوښتنه جوړه کړئ.
"د یوځای کولو غوښتنه" کلیک وکړئ.
کلیک وکړئ "ضبط تایید کړئ".
"څانګه ړنګ کړئ" کلیک وکړئ، موږ نور ورته اړتیا نه لرو.
دا د ادغام وروسته د ژمنو ډیاګرام دی.
️ کار ته دوام ورکړئ او ازموینې اضافه کړئ
د پلې غوښتنې په اړه همکاري اکثرا د اضافي کار پایله وي. دا معمولا د کوډ بیاکتنې یا بحث پایله وي ، مګر زموږ په کورس کې موږ د CI مرحلو لیست کې نوي توکي اضافه کولو سره دا ماډل کوو.
په دوامداره توګه ادغام کې معمولا ځینې ازموینې پوښښ شامل وي. د ازموینې پوښښ اړتیاوې توپیر لري او معمولا په یو سند کې موندل کیږي چې د "محصلین لارښوونې" په نوم یادیږي. موږ به دا ساده وساتو او زموږ په چک لیست کې به د هرې کرښې لپاره ازموینه اضافه کړو.
کله چې دندې پرمخ وړئ، لومړی د ازموینې ترسره کولو هڅه وکړئ. که تاسو په سمه توګه نصب کړئ pre-commit هوک مخکې، نوې اضافه شوې ازموینه به پرمخ وړل کیږي، ناکام به وي، او هیڅ شی به ژمن نه وي. په یاد ولرئ چې دا څنګه موږ پوهیږو چې زموږ ازموینې واقعیا یو څه ازموي. په زړه پورې ، که موږ د ازموینو دمخه د کوډ سره پیل وکړو ، د ازموینو تیریدل یا دا معنی لري چې کوډ د تمې سره سم کار کړی ، یا دا چې ازموینې واقعیا هیڅ نه ازموي. برسیره پردې، که موږ په لومړي ځای کې ازموینې نه وای لیکلي، ممکن موږ د دوی په اړه په بشپړه توګه هیر کړی وای، ځکه چې هیڅ شی به موږ ته یادونه نه وي کړې.
ځکه چې د ازموینو پایلې چې ناکامې کیږي معمولا په سور کې ښودل کیږي، او هغه چې تیریږي معمولا په شنه کې ښودل کیږي، دا دوره د سور - شنه - ریفیکٹر په نوم هم پیژندل کیږي.
️ دنده
لومړی ، د ازموینو ترسره کولو هڅه وکړئ او دوی ته یې د ناکامۍ اجازه ورکړئ ، بیا پخپله د CI مرحلې لیست متن اضافه او ژمن کړئ. تاسو به وګورئ چې ازموینې تیریږي ("شنه").
بیا نوی کوډ ریموټ ذخیره ته خپور کړئ او د پل غوښتنې بحث او د PR حالت تازه کولو په پای کې د ګیټ هب انٹرفیس کې ازموینې وګورئ.
څانګې ته لاړشئ feature.
دا ازموینې اضافه کړئ 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);
});
د ازموینې ترسره کولو هڅه وکړئ. که pre-commit هک نصب شوی، د ژمنې هڅه به ناکامه شي.
بیا دا متن اضافه کړئ 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.
په سیمه ایزه توګه بدلونونه رامینځته کړئ.
په څانګه کې بدلونونه پوسټ کړئ 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. د دې له امله موږ نشو کولی یوازې سر بیرته راوباسئ master د تار پای ته feature. پدې حالت کې ، موږ اړتیا لرو چې یا ادغام یا ژمنې پلي کړو feature بیا ځای master. GitHub کولی شي په حقیقت کې اتوماتیک انضمام ترسره کړي که چیرې شخړې شتون ونلري. افسوس، زموږ په وضعیت کې، دواړه څانګې په فایل کې سیالي بدلونونه لري ci.md. دا وضعیت د یوځای کیدو شخړې په توګه پیژندل کیږي، او موږ اړتیا لرو چې دا په لاسي ډول حل کړو.
یوځای کول یا بیا ځای پرځای کول
ضميمه
د ادغام اضافي ژمنې رامینځته کوي او د کار تاریخ خوندي کوي.
د څانګې سره یوځای کول پیل کړئ master. د رقابتي بدلونونو له امله د یوځای کیدو شخړه ci.md.
شخړه حل کړئ ترڅو زموږ د CI مرحلو لیست او د هغې په اړه یادښت دواړه په متن کې پاتې شي.
لیرې څانګې ته د ادغام ژمنه خپره کړئ feature.
په 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.
git checkout master
# Обновите локальный репозиторий из удалённого репозитория.
git pull
# Отмените коммит слияния PR Steps review в master.
# Мы отменяем коммит слияния, поэтому нам нужно выбрать ветку истории, которую мы захотим оставить
git show HEAD
# предположим, что коммит, который был последним в ветке master до слияния, был отображён предыдущей командой первым
git revert HEAD -m 1
# можете не менять сообщения коммитов
# Опубликуйте изменения в удалённый репозиторий
git push
️ ځان ازموينه
ډاډ ترلاسه کړئ چې دا ci.md د ادغام ژمنې بیرته راګرځولو وروسته نور د "سترګو بګ" متن نلري.
د CI مرحلو لیست سم کړئ او ماسټر ته یې بیرته راشئ
موږ د څانګې ادغام ژمنه په بشپړ ډول بیرته راګرځولې ده. feature. ښه خبر دا دی چې موږ اوس کومه تېروتنه نلرو master. بد خبر دا دی چې زموږ د دوامداره ادغام ګامونو قیمتي لیست هم تیر شوی. نو ، په مثالي توګه ، موږ اړتیا لرو د ژمنو لپاره فکس پلي کړو feature او دوی ته بیرته راستانه کړئ master د اصلاح سره.
د ازموینې بدلونونه او د مرحلې لیست بدلونونه په شاخص کې اضافه کړئ او ژمنې یې کړئ.
څانګه په لیرې پرتو ذخیره کې خپره کړئ.
تاسو باید دې ته ورته یو څه سره پای ته ورسیږئ:
کنوانډیټ
# Создайте ветку под названием 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