-
Notifications
You must be signed in to change notification settings - Fork 11
Git Flow
๋ํ์ ์ผ๋ก Git-Flow, GitHub flow, GitLab flow ๊ฐ ์๋ค.
- https://nvie.com/posts/a-successful-git-branching-model/
- https://danielkummer.github.io/git-flow-cheatsheet/index.ko_KR.html
- http://woowabros.github.io/experience/2017/10/30/baemin-mobile-git-branch-strategy.html
- https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow
-
๋ฉ์ธ ๋ธ๋์น
๋ฉ์ธ ๋ธ๋์น์๋ ๋ง์คํฐ ๋ธ๋์น์ ๋๋ฒจ๋กญ ๋ธ๋ฆฐ์น ๋ ๊ฐ๊ฐ ์กด์ฌํฉ๋๋ค. ๋ฉ์ธ ๋ธ๋์น๋ ํ๋ก์ ํธ ๊ธฐ๊ฐ๋์ ์ฌ๋ผ์ง์ง ์๊ณ ๊ณ์ ์กด์ฌํ๋ ๋ธ๋์น์ ๋๋ค.
๋ง์คํฐ์ ํค๋๋ ์๋น์ค๋๊ณ ์๋ ์ํ๋ฅผ ์๋ฏธํฉ๋๋ค. ๋๋ฒจ๋กญ ๋ธ๋์น์ ํค๋๋ ๋ค์ ๋ฆด๋ฆฌ์ฆ๋ฅผ ์ํด์ ๋ง์ง๋ง์ผ๋ก ์ ๋ฌ๋ ๊ฐ๋ฐ ๋ณ๊ฒฝ์ฌํญ์ ์๋ฏธํฉ๋๋ค. ๋๋ฒจ๋กญ ๋ธ๋์น์์๋ ์์ค์ฝ๋๊ฐ ์์ ๋ ์ํ์ด๊ณ ๋ฆด๋ฆฌ์ฆํ ์ค๋น๊ฐ ๋์๋ค๋ฉด ๋ชจ๋ ๋ณ๊ฒฝ์ฌํญ์ ๋ง์คํฐ ๋ธ๋์น๋ก ๋จธ์ง๋๊ณ ๋ฆด๋ฆฌ์ฆ ๋๋ฒ๊ฐ ํ๊ทธ๋์ด์ผํฉ๋๋ค. ๊ตฌ์ฒด์ ์ธ ์ฌํญ์ ๋ค์์ ์กฐ๊ธ ๋ ์์๋ด ์๋ค.
-
์ํฌํ ๋ธ๋์น
๋ฉ์ธ ๋ธ๋์น๋ค์ ํ ๋ฉค๋ฒ๋ค์ด ํจ๊ป ๊ฐ๋ฐํ๊ณ , ์ํ ๋ฆด๋ฆฌ์ฆ๋ฅผ ์ค๋นํ๊ณ , ์ํ์ ๋ฌธ์ ๋ฅผ ์ ์ํ๊ฒ ํด๊ฒฐํ๊ธฐ ์ํด ๋ค์ํ ์ํฌํ ๋ธ๋์น๋ค์ ํ์ฉํฉ๋๋ค. ์ด ์ํฌํ ๋ธ๋์น๋ค์ ํญ์ ์กด์ฌํ์ง ์๊ณ ํ์์ ๋ฐ๋ผ ์๊ฒผ๋ค ์ฌ๋ผ์ง๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ธ ์ํฌํ ๋ธ๋์น๋ค์๋ ํผ์ณ ๋ธ๋์น, ๋ฆด๋ฆฌ์ฆ ๋ธ๋์น, ํซํฝ์ค ๋ธ๋์น๊ฐ ์๋ค. ๊ฐ๊ฐ์ ๋ธ๋์น๋ค์ ๋ชฉ์ ์ด ๋๋ ทํ๊ณ , ์ด๋ ๋ธ๋์น์์ ๋ถ๋ฆฌ๋๊ณ ์ด๋ ๋ธ๋์น์ ๋จธ์ง๋์ด์ผํ๋์ง ์๊ฒฉํ ๋ฃฐ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด ๋ธ๋์น๋ค์ด ๊ธฐ์ ์ ๊ด์ ์์ ํน๋ณํ ๊ฒ์ ์ ๋ ์๋๋๋ค. ๊ทธ์ ์ด๋ป๊ฒ ์ฐ์ด๋์ ๋ฐ๋ผ ๋ถ๋ฅ๋ฉ๋๋ค.
-
ํผ์ณ ๋ธ๋์น
์ด๋์ ๋ถ๋ฆฌ๋๋๊ฐ? ๋๋ฒจ๋กญ ๋ธ๋์น ์ด๋๋ก ๋จธ์ง๋๋๊ฐ? ๋๋ฒจ๋กญ ๋ธ๋์น ๋ค์ด๋ฐ ์ปจ๋ฒค์ ?
master
,develop
,release-*
,hotfix-*
๋ฅผ ์ ์ธํ ๋ชจ๋ํผ์ณ ๋ธ๋์น(๊ฐํน ํ ํฝ ๋ธ๋์น๋ผ๊ณ ๋ ๋ถ๋ฆผ)๋ ์ถํ์ ์๋ก์ด ๋ฆด๋ฆฌ์ฆ์ ๋ฐ์๋ ์๋ก์ด ๊ธฐ๋ฅ์ ๋ง๋ค ๋ ์ฌ์ฉํฉ๋๋ค. ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ์์ํ ๋ ์ด ๋ธ๋์น๊ฐ ์ธ์ ํตํฉ๋ ์ง๋ ์ ์ ์์ต๋๋ค. ๋ฏธ๋์ ์ถ์ ๋ ๋ ๋๋ ๊ธฐ๋ฅ์ด ๋ฒ๋ ค์ง ๋ ๋จธ์ง๋๊ฑฐ๋ ๋ธ๋์น๊ฐ ์ญ์ ๋ฉ๋๋ค. ํผ์ณ ๋ธ๋์น๋ ์ผ๋ฐ์ ์ผ๋ก origin์๋ ์๊ณ ๊ฐ๋ฐํ๋ ๋ก์ปฌ ๋ ํฌ์งํ ๋ฆฌ์๋ง ์กด์ฌํฉ๋๋ค.
-
ํผ์ณ ๋ธ๋์น ๋ง๋๋ ๋ฒ
$ git checkout -b myfeature develop ์๋ก์ด ๋ธ๋์น 'myfeature'๋ก ์ ํ๋ฉ๋๋ค.
-
ํผ์ณ ๋ธ๋์น ํตํฉํ๋ ๋ฒ
๊ฐ๋ฐ์ด ๋๋ ๊ธฐ๋ฅ์ ๋ค์ ๋ฆด๋ฆฌ์ฆ๋ฅผ ์ํด์ ๋๋ฒจ๋กญ ๋ธ๋์น์ ๋จธ์ง๋์ด์ผํฉ๋๋ค.
$ git checkout develop 'develop' ๋ธ๋์น๋ก ์ ํ๋ฉ๋๋ค. $ git merge --no-ff myfeature Updating ea1b82a..05e9557 (๋ก๊ทธ ์์ฝ) $ git branch -d myfeature 'myfeature' ๋ธ๋์น ์ญ์ $ git push origin develop
--no-ff ํ๋๊ทธ๋ฅผ ์ฐ๋ ์ด์ ๋ ํจ์คํธ ํฌ์๋๋ก ๋์ํ ์ ์๋๋ผ๋ ๋จธ์งํ ๋ ์๋ก์ด ์ปค๋ฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ํจ์ด๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ธ๋์น๊ฐ ์กด์ฌํ์๋ค๋ ์ฌ์ค์ ๋ช ํํ๊ฒ ์ ์ ์๊ณ , ์ถ๊ฐ๋ ํผ์ณ์ ์ปค๋ฐ๋ค์ ๋ชจ์๋ ์ ์๋ค. ๋น๊ต๊ทธ๋ฆผ์ ๋ค์๊ณผ ๊ฐ๋ค.
๊ทธ๋ฆผ ์ค ํ์์ ๊ฒฝ์ฐ ๊น ํ์คํ ๋ฆฌ์์ ์ด๋ค ์ปค๋ฐ ๊ฐ์ฒด๊ฐ ํผ์ณ๋ฅผ ๊ตฌํํ๋์ง ๋ณผ ์ ์๋ค. - ์ ์์ ๊ฒฝ์ฐ ์ฝ๊ฒ ์์๋ณผ ์ ์๋ ๋ฐ๋ฉด์ ํ์๋ ๊ธฐ๋ฅ์ ๋๋๋ฆฌ๊ณ ์ ํ์ ๋ ๋ชจ๋ ๋ก๊ทธ ๋ฉ์ธ์ง๋ฅผ ์ฝ์ด์ผํ๋ค. ์ ์์ ๊ฒฝ์ฐ ์ธ๋ฐ์๋ ์ปค๋ฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฒ ์ง๋ง ๊ทธ๋ก์ธํด ์ป๋ ๊ฒ์ด ๋ ํฌ๋ค.
-
-
- ๋ธ๋์น ์ต์ ํ๋ฅผ ์ํ์ฌ develop ๋ธ๋์น๋ฅผ ์ต์ ์ ์ํ๋ก ๋ง๋ ๋ค.
[develop] git pull --rebase upstream develop
# upstream repo์ ์๋ develop ๋ธ๋์น๋ฅผ pull ํ๋ค.
# develop์ ์ง์ ์ปค๋ฐ์ ํ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ --rebase ๋ช
๋ น์ด๋ฅผ ๋นผ๋ ๋ฌด๋ฐฉํ๋ค.
- ์์ ๋ธ๋์น๋ฅผ ์์ฑํ๋ค.
[์๋ฌด ๋ธ๋์น] git checkout -b feat-make_new_feature develop
# develop ๋ธ๋์น์์ feat-make_new_feature ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ ์ฒดํฌ ์์ํ๋ ๋ช
๋ น์ด.
- ์์ ์ ํ๋ค.
- ์์ ๋ธ๋์น๋ฅผ ์ต์ ํ ์ํจ๋ค.
[feat-make_new_feature] git pull --rebase upstream develop
# ๋ด๊ฐ PR ์ ๋ ๋ฆฌ๊ธฐ ์ ์, upstream์ develop์ด ์
๋ฐ์ดํธ ๋์์ ๊ฐ๋ฅ์ฑ์ด ๋๊ธฐ ๋๋ฌธ์, rebase๋ฅผ ๋จผ์ ํด์ค๋ค.
- ์์ ๋ธ๋์น๋ฅผ origin ์ push ํ๋ค.
[feat-make_new_feature] git push origin feat-make_new_feature
- github ์์์ PR์ ๋ณด๋ธ๋ค.
[base repository:***][base:develop] <= [head repository:****][base:feat-make_new_feature]
์ด๊ฒ์ด ์ ์ธ ๋ ํผ๋ฐ์ค๋ฅผ ์ข ํฉ์ ์ผ๋ก ์ ๋ฆฌํ ๊ฒ์ด๋ค.
ํ์๊ฐ ์ฐธ์ฌํ ํ์ ์ฌ๋ฌ ์ํ ์ฐฉ์ค ๋์ ์์ ๊ณผ์ ์ ์ฝ๊ฐ ๋ณํ ์ํค๊ธฐ๋ก ํ์๋ค. ์์ ๋ฐฉ์์ ๊ทธ๋๋ก ์งํํ๋ฉด, feature๋ฅผ ๋ง๋๋ ์์ ์ ํ ๋์, ๋ด๊ฐ ๊ณผ๊ฑฐ์ ๋ง๋ค์๋ ์ปดํฌ๋ํธ๊ฐ merge ๋์ง ์์ผ๋ฉด, ๋ค์ ์์ ์์ ์ฌ์ฉํ ์๊ฐ ์๋ ๋ฌธ์ ๊ฐ ์๋ค. ๋ฐ๋ผ์ ์์ ์๋์ ์ ์๋ฏธํ ๋ถ์ ์ ์ํฅ์ ๋ฏธ์น๋ค๋ ๊ฒฐ๋ก ์ ์ด๋ฅด๋ฌ ๋ฐฉ์์ ๋ณ๊ฒฝํ์๋ค.
- ๋ธ๋์น ์ต์ ํ๋ฅผ ์ํ์ฌ develop ๋ธ๋์น๋ฅผ ์ต์ ์ ์ํ๋ก ๋ง๋ ๋ค.
[develop] git pull --rebase upstream develop
# upstream repo์ ์๋ develop ๋ธ๋์น๋ฅผ pull ํ๋ค.
# develop์ ์ง์ ์ปค๋ฐ์ ํ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ --rebase ๋ช
๋ น์ด๋ฅผ ๋นผ๋ ๋ฌด๋ฐฉํ๋ค.
- ์์ ๋ธ๋์น๋ฅผ ์์ฑํ๋ค.
[์๋ฌด ๋ธ๋์น] git checkout -b feat-make_new_feature develop
# develop ๋ธ๋์น์์ feat-make_new_feature ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ ์ฒดํฌ ์์ํ๋ ๋ช
๋ น์ด.
- ์์ ์ ํ๋ค.
- ์์ ๋ธ๋์น๋ฅผ ์ต์ ํ ์ํจ๋ค.
[feat-make_new_feature] git pull --rebase upstream develop
# ๋ด๊ฐ PR ์ ๋ ๋ฆฌ๊ธฐ ์ ์, upstream์ develop์ด ์
๋ฐ์ดํธ ๋์์ ๊ฐ๋ฅ์ฑ์ด ๋๊ธฐ ๋๋ฌธ์, rebase๋ฅผ ๋จผ์ ํด์ค๋ค.
- ์์ ๋ธ๋์น๋ฅผ develop ๋ธ๋์น์ merge ํ๋ค.
[feat-make_new_feature] git checkout develop
[develop] git merge feat-make_new_feature
[develop] git branch -d feat-make_new_feature
- develop ๋ธ๋์น๋ฅผ origin ์ push ํ๋ค.
[develop] git push origin develop
- github ์์์ PR์ ๋ณด๋ธ๋ค.
[base repository:***][base:develop] <= [head repository:****][base:develop]