ααΎα’αααααΆααααααΆααααααααΆ Git ααα»ααααα αααααααααΎαααΆααΎααΆααα½ααααα αΌαααΆαααααααααΆαα (CI) ααααΎαααΆααα αααα»αααΆααα·ααααα¬αα? α¬αααα ααααΆα’αααα αααααααΎαααααα·αααααΆααααααααΆααααα αΆαααααααααα’ααα? αααααα·ααααΆαααααΉααααααα±ααα’αααααΌαααααΆαααΆααααααααααα»αααΆααα½ααααα αΌαααΆαααααααααΆαααααααααΎααααΆαα GitHub α αααααα·ααααΆααααα·αααΆαααααααααΆαααΆα’ααααααα½αααΆααααα’αααα’αΆα α α»α ααΆαααααα αααα»ααα αα·α α’αααααΉαα’αα»αααααααααααΆαααΌα ααααΆαααααα»ααααα·αααΆααααΎαα ααααααααααΎααΆα ααΆαααααααΌα ααααΆααααα½αααααααΎααΆα αααα»αβααΉαβααααααβααΈβααααΉααααΈβααΌα βαααβα’αααβααααβααΆααβααα αΆαβαααβααΆαααααααα
ααΎβααΎαβααααΎα’αααΈ?
αα ααααααααΎαααΈαα ααααΎα ααΎαααΉααααααΎαααΆαααααΎααααΌααααααΈααααα αΆα CI ααααααΆ αααααΆαα·ααΈααααα’αααα»αααΆαα αα αΆααααααΈαααα αααααΆααα·αααα ααΎαααΉααααααΎααααααΈαααααααΆααααα’αααα’αα·ααααααααααΎ αααααααααααααΎαααΆα αααααααααα ααααΎαααΆα ααααααααααα ααΎαααααΉαααααΎαααα»ααααααααΆαααα ααΎααααΈααΆαααααΎαααΆα CI ααααααΎααα·ααα αα·αααΆααα·αα
GIF ααααααα αΆαααΈααΆαααααααααΆα α·ααααα αααα»αααααΆααααααα’ααα αα αααα’αααααααΎαααΆααααααα·ααααΆα ααΌα αααα’αααα’αΆα ααΎαααΎααα·αααΆαα’αααΈαααα»αααααΆααα ααΈαααααα αΎαααΆαααα’αααΈαααα αΆαααΆα ααααα»αα
α’αααααΉαααααααΆααααααΆααΈαααΌ CI αααααααΆαααΆααααααα
- ααααΎααΆαααΎαα»αααΆααα½α;
- ααΆαα’αα»ααααααΆαααααΎααααααααααααααααααααα·ααΎααααΈααΆααΆαα»αααΆα;
- ααΆαα’αα»ααααααΆαααΆαα’αΆαα·ααΆα;
- ααΆαβαααααααΆαβααααααβαααβαααβααΆαβα ααααΆα αβαααα αΌαβααααΆβααβαααααΆα (αααα αΌαααααΆβαααααα);
- ααα α»αααΎαα‘αΎααα αααα»αααα·ααΆααΆαααα·αααααα
ααΎα’αααααΉααααα’αααΈαααα?
α’αααααΉαα’αΆα ααααΎααααα½αααΆααααααα
- ααΎαααΆα αααααααααα (CI) ααΆα’αααΈ?
- ααΎααΆαααααΎαααααααααααααααααα·ααααααααΆαααααααααααΌαααΆαααααΎαα αααα»α CI α αΎαααΎααααΈααααΎααααα ααΉααααααααΆαα’αααΈααααααααα½αααααααΌαααΆαααααα‘αΎα?
- ααΎβα’αααΈβαα βααΆβααααΎβααΆαβαα α αΎαβααΎβααΆβααααΌαβααΆαβαα βαααβααΆ?
- α’αααΈαα ααΆ Test Driven Development (TDD) α αΎαααΎααΆααΆααααααΉα CI αααΆαααΌα ααααα ?
- ααΎβαααα»αβαα½αβααΆααβαααα αΌαβααααΆ α¬βαααααΎαβααΆαβααααΆααβααααΌαβα‘αΎαβαα·α?
- αααα‘αα α¬αα½ααα»ααααα»ααααααααααΆαα?
ααααΌαβα‘αΎα αααα»αβααΆαβααααααβααΏαβααΌα ααΆ βααΆαβααααΎβ αααααβααΈαααααα ααα»ααααβααΆβαααααα αααα»αβααΆαβαααααα βα α·αααβαααα‘ααβααααΆβααΆβααΆααΆβα’αααααααβαα βααααααβαααα ααΎααααΈβααΆααβαααααβααααα·αβααβααΆαβαααα½αβαααα»αβα’αααααα ααααααααααα»αααΉαααααΎ "programmer surzhik" ααΌα ααΆαα·αα·ααΆααααααα’ααα αΆααα "commit" αααααα»ααααα·αααΆααααΎααΆαα ααααααααααΎααΆαα
ααΎαααΆα ααααααααααααΊααΆα’αααΈ?
ααΆααα½ααααα αΌαααΆαααααααααΆααα¬ CI ααΊααΆααΆαα’αα»αααααα αα αααααααααααΆαα·ααααα»αααΈαα½αααααα αΌαααΌααααααα½ααααα αααα»αααααΆααααΌαα αααΆαα αα ααΆαααααααααα»ααα½ααααα α αΎαααΌααααααααααΆαα αα ααΆααααααΌαααααααΌαααΆααααααΎααααααααΆαααα α»αα
ααΆαααΆαααααααααα·αααααΆα’αααΈααΆααααααα
α ααα»α ααααΆααααααααααααααααΆααΊααΆαααΉαααΆααααααΆααα½ααααα αΌαα α’αααααααααααααααΆααΆααααα αΌαααΌααααα½ααααααα»ααα½αααααααΊαα·ααααααααααΆαααααααα»αααΆααα½ααααα αΌαααΆαααααααααΆααα α§ααΆα ααααα½αααααΌαααΆααααααα±αααααα»ααααααα»ααααααααααααΆααααΌαααααΈααα αααααααΉα α αΎααααα αΌαααΆαααααα αααααααΆα α ααααααααααααααΊααΆααΆαααααΆααααααα ααα»αααα ααΆααΌαα ααααΏααΆαα·ααααααααααααα»ααα½αααααααΊααα ααα»ααααΆααααααα ααΆααααΆαα αα·ααααααααααααΆαααααα»ααααααΆαααα ααα»ααααααΆα
ααΆαααααΆαααα½ααααααΊααΆ C ++ αα·ααααααΆααΆααΆαααα½αααααααααααΌαααΆαααααΎααααΆαααααα»αααΆαα’αα·ααααααααααα α αΎαααααΆααααααΆαααΆαααΆααα½αααααα»αααααΆαααααααΆαααα α»αααΆαααααααΆααααα»ααααΆαααΊαααααα αααα»αααααΆαααααΎααααααα½αα ααα½α (α§ααΆα ααα ααΆαααααΎαααααα―αααΆαααααΆαααααα·ααααα·αααα»αααΌαααααΆα) ααααααΌααααααα ααααααααααααααααα αα αααααα αα αααααααα»αααααααα ααααΆαααααΎα±αααααααΆαααααΌαααΆα α αΎααα αααα’ααΆαα "ααΆαααααΎαααααααΆαααα + α―αααΆ" αααα ααααΆααΉαααααΆααα ααΆααΆαα’αα»ααααααααααΆ ααααα·αααΎαα·αααΆααααΆαα
ααΆααα½ααααα αΌαααΆαααααααααΆαα αα»αααααΆααΈ ααΆαα ααα αΆααααα (ααΆαα ααα αΆααααα, αααΈααΈ) αα αααα»ααααααΆαα·ααααααΌαα±ααααΆααααααααα ααααααΆααααααΆααααΈααααααααΆααα½ααααα αΌαααΈαα½ααα
αααααΈααααα αΆααααααΎαααΉαααααΎααααα½ααααα
- ααΆααααααΌαα
α»ααααααα αααααΎαααΆααΆααΈ
master
. α αΆααβααααΎβαβααααΎβααΆαααΆαα - αααααΎαααΆααααααΆαα ααΎααΆααΆααααΈααααα’αααα ααΆαααααα·αααΆααααααααα»ααααα»αα ααααααΆαα? αα ααα αΆααααααΆααα αααΆααα? αα½ααα»αααα α»α α¬ααΆαααααΎααααα α αΎαααααΆααΆααααααααα
- αα»ααα ααααΆααααΈα ααααΆα α¬ααΆααΆααΈα ααααΆαααααα’αααα
- αααααΎαααααΎαααΆαα αα·ααΆααααΆα’αααΈααΆαααααΆααααααΌα ααααααααΆαααααααααΆα α·αααααααααααα αα ααααααααΆααα·ααΆααααΆααααα ααααΎβα±ααβααΆαβααααΎβααβαααβααααβαα βααΎβααΆααΆβααααααβαα·αααβα
- ααΆααα½ααααα αΌαααααΆ / ααΌαααααΆαα‘αΎααα·αααααΎα‘αΎαααΈααα ααααΎα±ααααΆαααααΎαααααααααααΆαααααααααααα αΌαααααΆα
- ααΆαααααααΆαααΈααααααααααααα·ααααα ααα·αααααα
- ααααα·αααΎα’αααΈαααααααααΆαααα’αααα»αααα·ααααααααα»αααααααααΆαα½α ααΌααααα αΌαααΆαααααΆααααααΌααα ααΆααα
οΈ ααΆααααα α
ααααΌαααααΆααααΆα’αααααΆααααααα·ααΈααααΉαααααΌαα
ααΎααααΈααα½ααααααααα·ααααΆαααα’αααααΉαααααΌαααΆα
α’αααα’αΆα ααααΎαααΆαααΈαααααα Git ααΆαα½αααΆα ααα»αααααααα»αααΉααααααααααΆααααααααΆαααααΆαααααααΆααααΆααααααααΆααα»αααααα
ααααΌαααααΆααααΆα’αααααΆαααα‘αΎααααααα·ααΈ Git αααααΆαααααααααΆααααΆααααααααΆ
ααααα·αααΎα’ααααα·αααΆααααΆααααΆαααΈαααααα Git αααααΆαααααααααΆααααΆααααααααΆαα α’αααα’αΆα
αααααααααΆαααααΆαα’αααΈααΆαααα‘αΎα
αααα αααααΆαα
α’αααααΉαααααΌααααααΎαα
αααΆααα
ααααααααΆαααααα½α (fork)
αα½α
ααΆαα? ααααα·αααΎα’ααααα·αααΆαααααΆααααααΌαααΆααααααααααΆαααΎααα ααααΆαααααααα·ααααΆααααα’αααααααααΆααααΌαααΆαααα α
ααΆ 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
, α
αΆααβααααΎβαβααααΎβααΆαααΆα
- ααααΌαααααΆαααααααα·ααααΆααΈ
<URL ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ>
. - ααα
npm install
αα αααα»ααααααΈααααααΆαααααααα·ααααΆ; ααΎαααααΌαααΆαααΆααΎααααΈααα‘αΎα Jest αααααΎαααααΎααΎααααΈααααΎαααΆααααααα - αααααΎαααΆααΆαα½αα αΎαααΆαααααααααΆα
feature
. ααααΌααα αααααααα -
αααααααααααΌαααΆααααααα
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); });
- ααααααα’αααααααΆαα½α 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-α ααααα);
- ααα‘α»αααααα½αααααα»αααααΆ (αα ααααααααΆαα αααααααααΌαααΆαααΆαααΆα);
- αα ααΎααΆαααααααααΆα α·ααα;
- αα αααααααα»αααααααΆααα ααααΆααα αααααααα
- αα
ααΎ build server α¬ build environmentα
- αα αααααααααααΌαααααΌαααΆαααααααααααΆααα ααΆααααΆααΆ/ααααΆααααααΆαααααα½αα
- ααΌααα αααα»αααααααααααα»αααααΌαααΆαααΆαααααα
- αααααααααααΆαα»ααααααΆααα½ααααα
αΌαααααΆααααΌαααΆαααΆααααα (ααΆααααααΆααΆαα½α
master
). - ααΆααααΆααααΆααααΆα αααααααααα / αααααα ααα αΆααααα
ααΆααααααΆ αα»αααΆαααααααααΎαααΆαααΆααααααΏα α’αααα’αΆα ααΆαααααααΆααααα»αααΆαααααΎαααΆαααΆααΆαααΉαααΆααα ααΆαα ααα αΆαααααΆααααΆαααααααΆα’αΆα ααΎααα ααΌα αααα
- ααΆαααααΎαααααα―αααΆααΏα - ααα‘α»ααααααΆαααααααα»αααααα CI
- ααΆαααααΎαααααα―αααΆααΊα ααΆαααααΎααααααααΆαααΆαα»αα αα αα·αααΆαααααΎαααΆα αααααα - αα ααΎααΆαααααααααΆα α·ααα αα αααα»αααααα CI
- ααΆαααααΎααααααααΆαααΆαα»ααΊα αα·αααΆααα½ααααα αΌα - αα αααα»αααααα CI
- ααΆαααααΎααααααα»ααααα·ααΆα ααΆαααααΎααααααααα»α αα·αααΆαααααΎααααααααα αααΆααααααααΆ α¬ααΆαααααααααααααααααα - αα αααα»αααααα CI/CD ααα»ααααααΆααααα αααα»ααααα/ααααΆααααΆα/αααααααααΆαααΆααααααα»ααααα α§ααΆα ααα αα ααααααα ααααααααα ααααααΆα α¬αα αααααααΎαααΆααααααα
οΈ αα·α αα ααΆα
αααα»αααααΎα±ααααααΎαααΆαααΆαααααΎααααααααααααΆαα»ααα·ααααααααΎααΆααααααααΆ npm test
. αααααΆααααΈααα ααΌααααααα git hook ααΎααααΈααααΎαααΆαααΆαααααΎαααααααααααΎααα
ααΎααΆαααααααααΆα
α·αααα ααΆαααΆαα
αΆαααα½αα ααααα Git αα·αααααΌαααΆαα
αΆαααα»αααΆααΆααααααα½αααααααΆαααα ααΌα
ααααα αΎααα·αα’αΆα
ααααΌαα
ααααΈ GitHub αα½αααΆαα½αααΉααααααΆαααααααα·ααααΆααααα
αααααΆαααα ααΎααααΈααα‘αΎααααααα’αααααααΌαααααΎαααΆα install_hook.sh
α¬α
ααααα―αααΆα repo/hooks/pre-commit
αα
ααΆαααααααα»ααααα»α .git/hooks/
.
αα
αααα’ααααααααααΉααα α’αααααΉαααΎαααΆααΆαααααΎαααααααααΌαααΆαααααΎαααΆα α αΎααα½ααααα·αα·αααααΎαααΆααΎααΆααααααααΉααα½αα
ααα½αααΆαααααααΆααα
αααα»ααααααΈαααα¬ααα
- ααααΎαααΆαααΆαααααΎαααααααααααααααααΎαααΆαααΆααααααααΆ
npm test
αα αααα»αααααααΆαααααααα·ααααΆααααα’αααα αααααααααΆααααΆααΆαααααΎαααααααααΌαααΆααααα ααα - ααααα commit hook (pre-commit hook) αααααααΎαααΆα
install_hook.sh
. - ααααΎααΆαααααΆααααααΌαααααα’ααααα ααΆααααααΆααααΌαααααΆαααααα’αααα
- ααααΌαααααΆααααΆααΆαααααΎαααααααααΌαααΆαααααΎαααΆααα»ααααααααΎα
ααααΆααααααα’ααααα½αααααΎααα
ααΌα
ααα αααααΆααααΈααααΎααΆαααα αΆαααΆαααααα
αααα»α
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ 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 "ααΆααΆααΌαααααΆα" ααΊααΆααΆααΆαααα’αααααα’ααααΎααΆαααΆαααααα’ααα α αΎα "ααΆααΆααααΆα" ααΊααΆααΆααΆαααααΆαααΆαααααΆααααααΌααααααΆαααααΎα‘αΎαα
αα·ααΆααααΆα’αααΈααΆαααααΆααααααΌα ααααααααΆαααααααααΆα α·αααααααΈ αα ααααααααΆααα·ααΆααααΆαααα
ααααΎααΆα (PR)
ααααΎααΆα (PR) ααΊααΆαα·ααΈαα½αααΎααααΈαα·ααΆααααΆ αα·ααααααααΌα ααααΌα ααΆααααΎααΆααα·αα·αααααΌαα ααααΎααΆαααααΌαααΆαααΆαααααααααΆααα·ααΈααΌαα ααααΆααα½ααααα αΌαααΆαααααΆααααααΌααα»αααααα αααα»αααΌααα½αα ααΆααααααΆ ααα»αααααααΆααααααΌαααααΆααααααΌαααΆαααΈα ααααΆααααααααααα α αΎαααααΎααΆαααΎααΌααααα»ααααα»αα αααααΆααααΈααα ααΆααααΆαααααααΌααα αααα»αααααΆααααΈα ααααΆαααααΆαααααα½αααααααΆαα α αΎααα»αα±ααα’αααααα½ααα»αααααΌαα ααααααααΆααααααΌαααΆααααα(ααΆα) ααΌαααααααΆαα αααα»αααααΆααααΌαααααΆααααααα½ααα ααααα½ααααα·αα·αααααΎα αα·αα’αΆα αα½ααααα αΌα (αααα αΌα) ααααααΆααα αααα·ααααααααΌαααΆαααααααΆαααααααααααααααααααααααα§ααΆα αααα ααΆααααα»ααααα αΌαααααΆ.
α’ααααα·αα αΆαααΆα αααααΎαα»αααΆαααααΎαααΆααααα GitHub α¬αααα·ααΆααααααααααΆαααααα αααα»αα’αα·ααααααα’αΆα ααααΎαα·ααΈααΆαααααααααΆαααααααααααααα αα½αααΆααααΆαααααΆααααααααααα»α ααΆαα α ααΆααα‘αα α¬α’ααΈααα ααα»αααααα ααααΆαα ααα»αααα½αα ααα½ααααααααΌαααααΎααααΎααΆααααααααααα·ααΆα αααααΊααΆαα½ααααα½αα ααα½αα
- ααΆααα·ααΆααααΆαααααΆααααα αααΆααααααΉαααΆαααααΆααααααΌαααΌαααΆααααΆαα;
- ααΆαααααααααααΆααααΎαααα·αααααα’ααΎααΆαααΆαααααααα»αααααΎαααΆαααΈ autotesters αα·ααα ααΆααΈ;
- ααααΌαααΆαααααΆααα·αα·αααααΌα;
- ααΌα αααααα αααααααα α’αααα’αΆα ααααΎαα ααα»αα αα·αααΆααα·α αΆαααΆαα ααΈαααααααα α¬αααααααααΌααααα
ααΆααααααΆ α’ααααααααΎαααααΎαααΆα αα ααααααα’αααααααΌαααΆααα·ααΆααααΆα’αααΈαα½α α¬ααα½αααΆαααα·αααααα’α α§ααΆα ααα ααααα·αααΎα’ααααααα»αααααΎααΆαααΎαα»αααΆααααα’αΆα ααααΌαααΆαα’αα»ααααα αααΎαααΆααα½α α’αααα’αΆα αααααΎαααααΎααΆα αα»αααααααααααΌαααααΌαααΎααααΈα ααααααααααα·αααααα’ααα αα·ααα·ααΆααααΆα’αααΈαααααΆαααααα’αααααΆαα½αα’ααααα ααΆαααααα’αααα ααααα·αααΎααΆαααΆαααΆαααΆαααΆααααααΆαααα ααααΎαααΆαααααΌαααΆαααΎααα ααααααα’αααΈαα½αααααΌαααΆαααααΎαα½α ααααααααΆα α·ααα αα·αα’αΆα αα·ααΆααααΆααΆαα αα αααα»αααααΆααΈαααΌαα½αα ααα½α α’ααααααα ααααΆα ααααΎα PR αααααΆααααα ααα»αααααα½ααα·αα·ααααα»αααΆαααα»αααααα ααΎααααΈααααΎαααΆαααΆαααααΎααααααααααααααααααααα· α¬α αΆααααααΎαααΆααα·αα·αααααΌαα α’αααΈααααααααα’ααααααααα α α·ααα αα»αααααα @mention ααα»ααααααααΆαααΆαααααααααααα’αααα ααααΆααα αααα»αααααΎααΆαααααα’αααα
ααΆααααααΆαα ααααααααΎα PR α’αααααααΎααΌα ααΆααααααα
- α ααα’α»ααααα αΆαα’αααΈαααα’αααααααΎα±ααααααΆααααααΌα αα·αααααααααΆα
- αααααααΆααα·αααααΆααααααααΈαααααααααααΆαααααΆααααααΌαα α’αααα’αΆα
α
ααααΆαα
- ααααααβα’αααΈβαααβααααΆααβαααβαα·αβα αααΆααβααΈβααΌα α¬βα’αααΈβαααβααΆαβααααααααβαααααΆααβααΆαβαααβααΈβααα·ααβααΌα ααΆ #bugs αααβααΆααααααα αα·αβαααβαααααααΉαααα
- @mention ααααΆααααΆαααααα’αααα ααα αΆααααααΎαααααΎααΆαααΆαα½α α¬α’αααα’αΆα @mention αα½ααααα αααα»αααα·ααααααα ααααααααα
- αα»αα±αααα αααα·ααα½αα’αααΈαα½α α¬αα·αα·αααααΎαα’αααΈαα½αααΆααααΆααα
αα ααααααα’αααααΎα PR ααΆαααααΎααααααααααΆαααααααα ααΆααααααααααΎααααΈααααΎαααΆααα αααα»αααααΈααααααααααΌαααΆαααααα·ααααα·α αααα»αααααΈααααααΎα αααααΉαααΆαααα»αααααΆαααααΎαααααααΌα ααααΆαααααΎαααΆαααααΎαααΆααααα»αααΌαααααΆα ααα»αααααα αααα»ααααααααα·α ααΆα’αΆα ααΆαααΆαααααΎααααα αα·αααΆααααα½ααα·αα·αααααααααα
ααΌααααα αΆααααααααααααΆαααααΎαααααααααΌαααΆααααα ααα α’αααα’αΆα ααΎαααααΆαααΆαααααΆαααααΎααααααα ααΆααααααααααΆααα·ααΆααααΆ PR αα αααα»αα ααα»α αααααΆαα GitHub α αααααα αααααΆαααααΎαααααααααΌαααΆααααα ααα
οΈ αααααααααααα αααΆαα’αααΈααΆαα ααααααααααααΈααα αΆα CI
αααααΈαααααααΎαααα»ααααααα·ααααΆαααααΊααααΆα αα·ααααααΆααα ααΎααα½αααααααα αααΆαα’αααΈααΏααααα
οΈ αα·α αα ααΆαα αααααΎαααααΎααΆααααααΆααααα·ααααααααα
- ααααΌααα
ααΆααΆ
master
. - αααααΎαααΆααΆαααααΆαααααα
bugfix
. - ααααααα’αααααα
αααΆααα
α
α»ααααα
ααααα―αααΆα
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/).
- ααααΎααΆαααααΆααααααΌαα
- αααααααΆααααααααα‘αΆα
bugfix
αα ααααΆααααΈα ααααΆαα - αααααΎαααΆααααα»αααΆααααααΆαααααα ααΆαααααααααΆαααααααααΆαα ααΆαα½αααΉαααΆααΆααααΆα
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 ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π²ΡΡΠ΅
α’αα»αααααααΎααΆα "ααααααααΆαααααααααΆαα"
οΈ αα·α αα ααΆα
- αααααΎαααααΎαααΆαα
- α α»α "αααα αΌαααααΎααΆα" α
- α α»α "αααααΆααααΆααααα αΌαααααΆ" α
- α α»α "αα»αααΆααΆ" ααΎααααααααΌαααΆαααΆαααα αΎαα
αααααΊααΆααααΆααααΆαααααΆαααααααααΆα
α·ααααααααΆααααΈααΆααααα
αΌαααααΆα
οΈααααααααΎααΆα αα·αααααααααΆαααααΎααααα
ααΆααα ααΆαααααΆααΎααααΎαααΆαααΆααΉαααΆααααΆααα ααααΆαααΆαααααααα ααΆααααααΆ αααβααΆβααααααβααβααΆαβαα·αα·αααβααΌα α¬βααΆαβαα·ααΆααααΆ ααα»ααααβαααα»αβααααβαα·ααααΆβααααβααΎα ααΎαβααΉαβααααΎβααΆβααααΌβαααβααααααβααΆαα»βααααΈβαα βαααα»αβαααααΈβααα αΆα CI ααααβααΎαα
ααΆααα½ααααα αΌαααΆαααααααααΆααααΆααααααΆααΆαααααααααΉαααΆαααααααααααααΆαααααΎααααααα½αα ααα½αα αααααΌαααΆαααααααααααααΎααΆαααααΎαααααααΆαααΆααα»ααααααααααΆ α αΎαααΆααααααΆααααΌαααΆαααααΎααα αααα»αα―αααΆααααα α ααΆα’αααΈαα½αααΌα ααΆ "αααααΆαααααααΆαα’αααΈααΆααα½αα αααα"α ααΎαααΉααααααΆααΆα±ααααΆαααα α αΎαααααααααΆαααααΎααααααααααΆαααααααΆααααΈαα½αααα αααα»ααααααΈαααα½ααα·αα·αααααααααΎαα
αα
αααααααΎαααΆααα·α
αα
ααΆα ααΌαααΆαααααααααΎαααααααΆαα»ααα·αα ααααα·αααΎα’αααααα‘αΎαααααΉαααααΌαα pre-commit
ααααααα»αααα ααΆαααααΎααααααααααΆαααααααααααΈααΉαααααΌαααααΎαααΆα ααΉααααΆααα α αΎαααααΆαα’αααΈααΉαααααΌαααΆαααααααααΆα
α·αααα‘αΎαα α
αααΆαααΆαααααΆαααααααααΎαααΉαααΆααΆαααααΎαααααααααααΎααα·αααΆαααα»αααΆαααααα’αααΈαα½αα αα½αα±ααα
αΆααα’αΆαααααα ααααα·αααΎααΎαα
αΆααααααΎαααΆαα½αααΌααα»ααααααααΎααααα ααΆαααααααΆααααΆαααααΎαααααα’αΆα
ααΆααααααΆαααααΌαααααΎαααΆαααΌα
ααΆαααααΉααα»α α¬ααΆααΆαααααΎααααααα·αααΆαα·αααΆαααΆαααααα’αααΈααΆααα’ααα ααΎαααΈααα ααααα·αααΎααΎααα·αααΆααααααααΆααααααααΆααααΈααααΌααα ααΎααααα ααααΆααααα
α’αααΈααΆααΆαααααα»α αααααααααΆαα’αααΈα’αΆα
ααααΉαααΎαααΈααΆααΆαααα
ααΆαααααααΆαα’αα·αααααααααα»α (TDD)
TDD ααααΆαα±αααααααααΆαααααΎααααααα»αααααααααααΌαα ααα αΌαααΆαααΆαααααααΆαααααααΎ TDD ααΎααα ααΌα αααα
- ααααααααΆαααααΎαααααα
- ααααΎαααΆαααΆαααααΎαααααααΆααα’αα α αΎαααΆααΆααΆααΆαααααΎαααααααααΈαααΆαααα
- αααααααΌαα
- ααααΎαααΆαααΆαααααΎααααα ααααΌαααααΆααααΆααΆαααααΎαααααααΆααα’ααααααααΆααα
- ααααΌαααααα’αααα
- ααααΎαααααααα
αααααΆαααααααααααααΆαααααΎαααααααααααΆαααααΆααααααΆααααΌαααΆααααα αΆαααΆααααααα α α αΎαα’ααααααααααααΆααααΆααααααΆααααΌαααΆααααα αΆαααΆααααααα αααααααααααΌαααΆαααααααΆααααΆααΆ red-green-refactorα
οΈ αα·α αα ααΆα
ααααΌα ααΆαααααααααΎααααα α αΎαα’αα»ααααΆαα±αααα½ααααααΆααα αααααΆαααααααααα αα·ααααα
αΌαα’ααααααααααααΈααα αΆα CI ααααααα½αα―αα α’αααααΉαααΎαααΆααΆαααααΎααααααααα»αααααααΆαα ("αααα") α
αααααΆαααααααααααΆααααααΌαααααΈαα
ααΆααααααΆααααΈα
ααααΆα α αΎαααΎαααΆαααΆαααααααααΎαααΆααα
αααα»αα
ααα»α
αααααΆαα GitHub αα
αααααααΆααααααααααΆααα·ααΆααααΆααααΎααΆα αα·αααΆαααααΎαα
αα
α»ααααααααΆαααααΆαααΆα 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
. αααβααΆαβααβααΆβααΎαβαα·αβα’αΆα
βααααΆααβααβαααα‘αα HEAD αα·αα master
αα
α
α»ααααα
αααααααααααα‘αΆα feature
. αααα»αααααΆαααΆαααα ααΎαααααΌααααα
αΌαααααΆ α¬α’αα»ααααααΆαααααααααΆα
α·ααα feature
ααΌαααααΆαα‘αΎααα·α master
. GitHub αα·αααΆα’αΆα
α’αα»ααααααΆααααα
αΌαααααΆαααααααααααααααα· ααααα·αααΎαα·αααΆαααΆααααααααα·α
α Alas αα
αααα»αααααΆαααΆαααααααΎα ααΆααΆααΆααααΈαααΆαααΆαααααΆααααααΌαααααα½ααααααααα
αααα»αα―αααΆα ci.md
. ααααΆαααΆααααααααΌαααΆαααααααΆααααΆααΆαααααααααα
αΌαααααΆ α αΎαααΎαααααΌααααααααΆαααΆαααααα
αααα αΌαααααΆ α¬αααααΎαα‘αΎααα·α
αααα αΌαα αΌαααααΆ
- αααααΎαααΆααα½ααααα
αΌααααααα αα·ααααααΆαα»ααααααααα·ααΆαααΆαα
- αααααΆααΆαααααααααΆα α·αααααΎαααααΆααΆααΆαα½αααΉαααααΆαααααααΆααΎα αα·αα’ααααα·αααααααααα½αααα
- αααααΆαα»α SHA ααααΆαααααααααΆα α·ααα αα·ααααααααΆαααα αα½ααααα αααα»αααΆααα·ααΆααααΆααααΎααΆαααααΆααααααΌαα
- ααΆαααΆααααααααααΆαααααααααααααα
- ααααΎα±ααααΆα
αααΏααα·ααααααα
- ααΏαβα’αΆα βαα·ααΆαβα’αΆαβαααααΆαβα ααα½αβααΆααΆβα αααΎα (ααΉαβααΎαβαααβαααα IDE)α
- ααααΎα±ααααΆαααααα α»ααααααααααααααααα·ααΆαααααα·ααΆα α§.
git bisect
αα·αααΌαααΆααααααααα - ααΆααΉαααααΎαααααΆααααα αΌαααααΆααα»αααααα
ααΆαααΆααααααΆααα‘αΎααα·α
- ααΆαβα
αΆααβα‘αΎααα·αβαααααααΉαααβααΈβααΆααΆβαα
αα
α»ααααααβαα
βααΎβααααΌαβααβααΆααΆβααΌαααααΆαβαα½αβαααααΆααβααΈβαα½ααααα
- ααΆαααααααααΆα α·αααααααΈααΆαα½α SHAs ααααΈααααΌαααΆααααααΎα ααααααααΆαα±ααααΆαααααααααΆα α·ααααα αααα»α GitHub ααααΌαααααΆααΉαααααΎααΆαααΎα ααα»αααααα·ααααααΆααα·ααααααααααααΌαααααΆαααααα
- ααΆαααααααααΆα α·αααα’αΆα ααααΌαααΆαααααα‘αΎααα·α αα·ααααααααα αααα»αααααΎαααΆα α¬ααΌααααΈαααα½ααααα αΌαααααΆαα ααΆαα½αα
- ααααααααΆα αααΎαα’αΆα ααΉαααααΌααααααααΆαα
- α’αα»ααααΆαα±ααα’ααααααααΆααΆα
αααΏαααΈααα’αααα
- ααΆα αααΏααααα ααααΆααΆααααα½αα’αΆα αααΆαααΆααΆαα·αααΆαααααααα αααααααΆαα ααα»ααααα ααα»ααα
- ααΆαααααα α»ααααααααααααααααα· αα·αααΆααααααααΆααααα αΆααΊααΆααααα½αααΆαααααα·α
α ααααΎα±ααααΆα’αΆα
ααααΎαα
ααΆα
git bisect
α’αΆα ααααΎα±αα rollbacks αααααααααααααααα·ααΆααααα αααΆαα αα·αα’αΆα ααααΆααααααΆαα
- αααααΌαβα±ααβααΆαβααΆαβαααβαα»αααβααααΆαβααΆααΆβαααβααΆαβααΆαβααααΎβα
αααΆαβαααα»αβαααβααΆαβααα
--force
αα αααααααΎααΆαα½αααααΎααΆαα
ααΆααααααΆ αααα»αααΆααα’ααααααααααααα»αααΆαααααΎαα»αααααΆαααααααΌα
ααααΆααΆαα·α
αα
αα
αααααααα½αααααααΌαααΆααααα
αΌαααΆαααααΆααααααΌαα αααα’αΆα
ααΆααΆααα½ααααα
αΌαααααΆ "ααα·αα»ααα" α¬ααΆαααααααααΆα
α·ααα "ααα·αα»ααα" αα
ααΎααααΌα α¬α’αααΈαα½ααα
α
ααααα ααΌα
ααΆααΆαααααΎα’αααααααααα
ααΎααααΌα (git rebase -i
) αααα»αααΌαααααΆααααααΆααααΆααΆααααα·αααααΌαααΆααααααααΆααα
ααααΆααααΆααΆααα ααα»αααααααα
αΌαααααΆαααααΆααααΆααΆ "ααΆααΆααα" α
αα ααΈαααααΎαααΉαααααΎααΆααααα αΌαααααΆα
οΈ αα·α αα ααΆα
- ααααΌαααααΆααααΆαααααΌααααα·ααα
αααα»αααΆααΆαααα»ααααα»α
master
ααΆαααααΎαα αα α»ααααααααΆαααΈααααΆααααΈα ααααΆαα - ααααΌααα
ααΆααΆ
feature
. - αααα½α
ααααΎαααΆααααα
αΌαααααΆααΆαα½αααΆααΆ
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
.
οΈ αα·α αα ααΆαα α’αα»αααααααΎαααΆα "ααΆααα·αα·αααααα αΆα"
- ααΎαααααΎααΆαα
- α α»α "αααα αΌαααααΎααΆα" α
- α α»α "αααααΆααααΆααααα αΌαααααΆ" α
- α α»α "αα»αααΆααΆ" αααααααΎααααααααΌαααΆαααΆαααα αΎαα
αααααΊααΆααααΆααααααα’ααααα
αααααα
ααα α»αααα·ααα
ααΆααααΌαααΆααααα·ααΆαααΆ "ααΆαααααΎαααααα’αΆα ααααΌαααΆαααααΎααΎααααΈαααα αΆαααΈααααααΆαααααα α»αααα»αααααα»ααααα αΆαα’ααααααΆααααααα½ααα" α αααααΈααΆααΎαααΆαααΆαααΆααααα α αΎααα½ααααα·αααΆααααα αΆαααΎαααΌαααα α»αααααα ααααα α»αααα’αΆααααααα½αααΆαα αΌααα αααα»αααα·αααααα
αααα»αβααααΆααΈαααΌβαααβααα ααΎαβααααΌαβαααααααΆα
- α’αααΈαααααααΌαααΆαααΆαααααααΆααα αααα»αααα·ααααα;
- ααΌααα
αααα»ααααααααα‘αΆα
master
ααΆαα½αααΉαααα α»ααααα’αααα’αα·ααααααα’αΆα α αΆααααααΎαααΆαααΆαααααΈα
ααΎβαααα»αβαα½αβαααα‘ααβα¬βαα½ααα»αβααΆβαα βαααα»αβααααβαααααΆααβ?
ααΆααααααααααα·αααΊααΆααααΎαααΆαααααΆαααΆαααααααΆααααααα»ααααααααααΆααααΆααα’αα
ααα·ααααα αα·ααααα‘ααααΆααααααααΉααααααααΆαααα α»αα "αα½ααα»ααα
αα»α" ααΊααΆααΆαααααααααααΆααα½ααα»ααα
master
αα·αααΆαααααααΆαααααααααΈα±ααααΆαααΆααααΆααααα’αΆα
ααααΎαα
ααΆαα αααααΆααα APIs αα·ααααααααΆαααααΌαααααΆααα·ααααααααααΆααααααΌααα
ααααααααΌαααααΌαααΆαααΆααα±ααααααΎαααΆαααΆαα½αααΉαααΆαα
ααα
αΆααααα αα·αααΆαααααααααααααΆαααΆαααααααα’ ααΆααα·ααααα‘αααααα·αααΆααααααΆααΆαααΆαααααΆα αα·αααααα»ααααααΆαααΆαααΆααα½ααα»αααΆαα
αααα»ααααααααααΆααα
αααααΆαααΆααα·ααααα‘αααααα·ααα·αααΆααααααααααΆααα’αααΈαααααα»αααααΈααααααΎα ααΎαααΉααα ααααΌαααα αααααααΆα’αα»ααααΆαα±ααααΎα
- αα½ααα»αααα α»αααΎααα·αααα±ααααΆαααΆααααΆααααα’αΆα ααααΎαα ααΆα;
- αααααΎααααααΌα
master
ααααΆαααααααααααααΆααααΆαα αΆααααααΎαααΆαααΆαααααΈα
οΈ αα·α αα ααΆα
- ααααΌααα
ααΆααΆ
master
αααα»ααααα»αα - ααααΎαα αα α»ααααααααΆαααααΆααααΌαααααΆαααΈααααΆααααΈα ααααΆαα
- αααα‘ααααΆαααααααααΆα
α·ααα PR αααα
αΌαααααΆ ααα αΆααα·αα·αααα‘αΎααα·α Π²
master
. - αααααααΆαααΆαααααΆααααααΌααα ααααΆααααΈα ααααΆαα
αααβααΆβαααααααα·βααβααααΆααβαααβααΆαβααΆαβααΆααβαααα
αΌαβααααΆβαααα‘ααβααβαα·αα
αααα»α
# ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΠ΅ΡΡ Π½Π° Π²Π΅ΡΠΊΡ 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
. ααααΉαβα’αΆαααααβααΊβααΆβαααααΈβααβααΆαβαααααβααβααα αΆαβαααΆα ααααααβααααβααααβααΎαβααβααΆααβαα
βαααα ααΌα
ααααααΆαα§ααααααα· ααΎαααααΌαα’αα»ααααααΆααααααααΌαα
αααα commits ααΈ feature
α αΎααααααΌααα½ααααα
master
αα½αααΆαα½αααΉαααΆααα½ααα»αα
ααΎαα’αΆα αααααααΆααααα αΆααΆααα·ααΈααααααααααΆα
- αααα‘ααβααΆαβαααααααΉαααβαααβαα·αβααααΎβααΆαβαααα
αΌαβααααΆα
feature
Ρmaster
; - ααααΆααααΈβαααααααΉαααβααΈβα’ααΈα
feature
.
αααα»αα’αα·αααααααααααααααΆααααΎαα·ααΈααΆααααααααααααααΆαααα»αααααΈααα ααα»ααααααΎαααΉαααααΆααααΈααΆααααααΆαααααΆααααααααααα ααΆααααΆααΆααΆα ααααα‘αααα½α α αΎααααααΎαααααΎααΆαααΆα ααααα‘αααααααΆααααΆααΆααααΈαααα
οΈ αα·α αα ααΆα
- αααααΎαβααααβαααβα α
βααΆβ
feature-fix
α αΎαααααΌααα ααΆα -
αααααααΆαααααααααΆα α·αααααΆααα’ααααΈα’ααΈαααΆααΆ
feature
αα ααΆααααααααααΈα αααααααΆααααααααααα αΌαααααΆαααααΆαααΎαα‘αΎαα’αα‘α»ααααααααΎα αααΆααααα»αα -
ααααααααΆαααααΎαααααααααααααααα
ci.test.js
:it('does not contain the sneaky bug', () => { expect( /.*sneakys+bug.*/gi.test(fileContents)).toBe(false); });
- ααααΎαααΆαααΆαααααΎααααααααα»αααΌαααααΆα ααΎααααΈααααΆααααΆαα½ααααα·ααααΆαααα
- αα»αα’ααααα "ααΆαα½αααα α»ααααα" αα
αααα»α
ci.md
. - ααααααααΆαααααΆααααααΌαααΆαααααΎααααα αα·αααΆαααααΆααααααΌααααααΈααα αΆααα ααΆαααα·αα·αααα α αΎαααααααααΆα α·ααααα½αααα
- αααααααΆαααΆααΆαα ααααΆααααΈα ααααΆαα
α’ααααα½ααααααα
αααααα’αααΈαα½αααααααααΉααααα
αααα»α
# Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π²Π΅ΡΠΊΡ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ 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
ααΈααΆαααααΎαα»αααΆαα
οΈ αα·α αα ααΆα
- α α»α "αααα αΌαααααΎααΆα" α
- α α»α "αααααΆααααΆααααα αΌαααααΆ" α
- α α»α "αα»αααΆααΆ" αααααααΎααααααααΌαααΆαααΆαααα αΎαα
αααααΆα’αααΈαααα’ααααα½αααααΆααα
ααααααα
α’αα’αααΆαα!
α’αααααΆααααα ααααα αΆαααΆααα’αααααααα»αααααΌαα ααααΎαααα»αα’αα‘α»αααααα½ααααα αΌαααΆαααααααααΆααα
ααααα·αααΎα’αααααααααααΆαααααα αΆααΆαα½αααΆαα½ααααααα·ααααΆ α¬ααΉαααΈαααααααααα’ααΆ ααΌααααααΎααααα αΆαα
αααα»α
ααααα: www.habr.com