์ด๋ ์ฐ์ํ ํ์ ๋ค ๊ธฐ์ ๋ธ๋ก๊ทธ์ ์ฐ์ฌ์ง ๊ธ์ ์ค์ ์ผ๋ก git-flow๋ฅผ ์ค๋ช ํด๋ณด๊ฒ ๋ค.
๋จผ์ ์ฐ์ํ ํ์ ๋ค์์๋ ์์ ํ ๋ ์๋ก ๊ฐ์ ์ฝ์์ด ์๋ค.
- ์์ ์ ์์ํ๊ธฐ ์ ์ JIRA ํฐ์ผ์ ์์ฑํฉ๋๋ค.
- ํ๋์ ํฐ์ผ์ ๋๋๋ก ํ๋์ ์ปค๋ฐ์ผ๋ก ํฉ๋๋ค.
- ์ปค๋ฐ ๊ทธ๋ํ๋ ์ต๋ํ ๋จ์ํ๊ฒ ๊ฐ์ ธ๊ฐ๋๋ค.
- ์๋ก ๊ณต์ ํ๋ ๋ธ๋์น์ ์ปค๋ฐ ๊ทธ๋ํ๋ ํจ๋ถ๋ก ๋ณ๊ฒฝํ์ง ์์ต๋๋ค.
- ๋ฆฌ๋ทฐ์ด์๊ฒ ๊ผญ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ์ต๋๋ค.
- ์์ ์ Pull Request๋ ์ค์ค๋ก merge ํฉ๋๋ค
์ง๊ธ๋ถํฐ git-flow์ ๋ํด ์์๋ณด๊ฒ ๋ค.
Git-flow์๋ 5๊ฐ์ง ์ข ๋ฅ์ ๋ธ๋์น๊ฐ ์กด์ฌํ๋ค. ํญ์ ์ ์ง๋๋ ๋ฉ์ธ ๋ธ๋์น๋ค(master, develop)๊ณผ ์ผ์ ๊ธฐ๊ฐ ๋์๋ง ์ ์ง๋๋ ๋ณด์กฐ ๋ธ๋์น๋ค(feature, release, hotfix)์ด ์๋ค.
- master : ์ ํ์ผ๋ก ์ถ์๋ ์ ์๋ ๋ธ๋์น
- develop : ๋ค์ ์ถ์ ๋ฒ์ ์ ๊ฐ๋ฐํ๋ ๋ธ๋์น
- feature : ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ ๋ธ๋์น
- release : ์ด๋ฒ ์ถ์ ๋ฒ์ ์ ์ค๋นํ๋ ๋ธ๋์น
- hotfix : ์ถ์ ๋ฒ์ ์์ ๋ฐ์ํ ๋ฒ๊ทธ๋ฅผ ์์ ํ๋ ๋ธ๋์น
์ฒ์์๋ master์ develop ๋ธ๋์น๊ฐ ์กด์ฌํ๋ค. ๋ฌผ๋ก develop ๋ธ๋์น๋ master์์๋ถํฐ ์์๋ ๋ธ๋์น์ด๋ค. develop ๋ธ๋์น์์๋ ์์๋ก ๋ฒ๊ทธ๋ฅผ ์์ ํ ์ปค๋ฐ๋ค์ด ์ถ๊ฐ๋๋ค. ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ ์์ ์ด ์๋ ๊ฒฝ์ฐ develop ๋ธ๋์น์์ feature ๋ธ๋์น๋ฅผ ์์ฑํ๋ค. feature ๋ธ๋์น๋ ์ธ์ ๋ develop ๋ธ๋์น์์๋ถํฐ ์์ํ๊ฒ ๋๋ค. ๊ธฐ๋ฅ ์ถ๊ฐ ์์ ์ด ์๋ฃ๋์๋ค๋ฉด feature ๋ธ๋์น๋ develop ๋ธ๋์น๋ก merge ๋๋ค. develop์ ์ด๋ฒ ๋ฒ์ ์ ํฌํจ๋๋ ๋ชจ๋ ๊ธฐ๋ฅ์ด merge ๋์๋ค๋ฉด QA๋ฅผ ํ๊ธฐ ์ํด develop ๋ธ๋์น์์๋ถํฐ release ๋ธ๋์น๋ฅผ ์์ฑํ๋ค. QA๋ฅผ ์งํํ๋ฉด์ ๋ฐ์ํ ๋ฒ๊ทธ๋ค์ release ๋ธ๋์น์ ์์ ๋๋ค. QA๋ฅผ ๋ฌด์ฌํ ํต๊ณผํ๋ค๋ฉด release ๋ธ๋์น๋ฅผ master์ develop ๋ธ๋์น๋ก merge ํ๋ค. ๋ง์ง๋ง์ผ๋ก ์ถ์๋ master ๋ธ๋์น์์ ๋ฒ์ ํ๊ทธ๋ฅผ ์ถ๊ฐํ๋ค.
์ค์ ๋ก ์ฐ์ํ ํ์ ๋ค์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์
์๋์ Repository์ Branch๋ ์์ผ๋ก ์ค๋ช ์ ํ ๋ ๋์ค๊ธฐ ๋๋ฌธ์ ์์ ๋์๊ณ ๊ฐ๋ฉด ํ๊ฒฐ ์์ํ๊ฒ ๋ณด์ค ์ ์์ ๊ฑฐ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
- Repositories
- upstream (Upstream Repository)
- origin (Origin Repository)
- Branches
- feature-user (์ฌ์ฉ์ ๊ด๋ จ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ feature branch)
- bfm-100_login_layout (์ฌ์ฉ์ ๊ด๋ จ ๊ธฐ๋ฅ ์ค ๋ ์ด์์ ์์ branch)
Github-flow์์ Git-flow๋ก ๋ณ๊ฒฝ๋์ง๋ง ํ๋์ ํฐ์ผ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ด์ ๊ณผ ๋น์ทํฉ๋๋ค. ๋ค๋ง ํฐ์ผ์ ์ฒ๋ฆฌํ๋ ๊ฐ๋ฐ์๋ Github-flow๋ฅผ ํ๊ณ ์์ ๋์๋ ๋ค๋ฅด๊ฒ ๊ด๋ฆฌ๋๋ ๋ธ๋์น๋ค์ด ๋์ด๋จ์ ๋ฐ๋ผ ์ด๋ ๋ธ๋์น์์ ์์ ์ ํด์ผ ํ๋์ง ํญ์ ์ฃผ์ํด์ผ ํฉ๋๋ค.
์์ โ์์ ์ ํ ๋ ์ง์ผ์ผ ํ ์๋ก ๊ฐ์ ์ฝ์โ์์ โํ๋์ ํฐ์ผ์ ๋๋๋ก ํ๋์ ์ปค๋ฐ์ผ๋ก ํ๋คโ๋ผ๊ณ ํ์ต๋๋ค. ๊ทธ๋์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ ์ ์ฌ๋ฌ ๊ฐ์ ํฐ์ผ์ผ๋ก ์์ ์ ๋จผ์ ๋๋๊ฒ ๋ฉ๋๋ค. ๋๋ ์ง ์์ ํฐ์ผ ์ค โ๋ก๊ทธ์ธ ๋ ์ด์์ ์์ฑโ์ด๋ผ๋ ํฐ์ผ์ด ์๊ณ ์ด ํฐ์ผ์ ์ฒ๋ฆฌํ๋ค๊ณ ๊ฐ์ ํ๊ณ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
-
upstream/feature-user ๋ธ๋์น์์ ์์ ๋ธ๋์น(bfm-100_login_layout)๋ฅผ ์์ฑํฉ๋๋ค.
(feature-user)]$ git fetch upstream (feature-user)]$ git checkout -b bfm-100_login_layout โtrack upstream/feature-user -
์์ ๋ธ๋์น์์ ์์ค์ฝ๋๋ฅผ ์์ ํฉ๋๋ค. (๋๋ฑ๋๋ฑ ๐จ)
-
์์ ๋ธ๋์น์์ ๋ณ๊ฒฝ์ฌํญ์ ์ปค๋ฐํฉ๋๋ค. (๋ณดํต์ vi editor์์ ์ปค๋ฐ ๋ฉ์ธ์ง๋ฅผ ์์ฑ ํจ) (bfm-100_login_layout)]$ git commit -m "BFM-100 ๋ก๊ทธ์ธ ํ๋ฉด ๋ ์ด์์ ์์ฑ"
-
๋ง์ฝ ์ปค๋ฐ์ด ๋ถํ์ํ๊ฒ ์ด๋ ค ๊ฐ๋ก ๋๋์ด์ ธ ์๋ค๋ฉด squash๋ฅผ ํฉ๋๋ค. (์ปค๋ฐ 2๊ฐ๋ฅผ ํฉ์ณ์ผ ํ๋ค๋ฉด) (bfm-100_login_layout)]$ git rebase -i HEAD~2
-
์์ ๋ธ๋์น๋ฅผ upstream/feature-user์ rebaseํฉ๋๋ค. (bfm-100_login_layout)]$ git pull โrebase upstream feature-user
-
์์ ๋ธ๋์น๋ฅผ origin์ pushํฉ๋๋ค. (bfm-100_login_layout)]$ git push origin bfm-100_login_layout
-
Github์์ bfm-100_login_layout ๋ธ๋์น๋ฅผ feature-user์ mergeํ๋ Pull Request๋ฅผ ์์ฑํฉ๋๋ค.
-
๊ฐ์ feature๋ฅผ ๊ฐ๋ฐํ๋ ๋๋ฃ์๊ฒ ๋ฆฌ๋ทฐ ์น์ธ์ ๋ฐ์ ํ ์์ ์ Pull Request๋ฅผ mergeํฉ๋๋ค. ๋ง์ฝ ํผ์ feature๋ฅผ ๊ฐ๋ฐํ๋ค๋ฉด 1~2๋ช ์ ๋๋ฃ์๊ฒ ๋ฆฌ๋ทฐ ์น์ธ์ ๋ฐ์ ํ Pull Request๋ฅผ mergeํฉ๋๋ค. ์์ ์ ์ฐจ์์ 4, 5๋ฒ์ ์์ ์ ์ํํ๋ ์ด์ ๋ ์ปค๋ฐ ๊ทธ๋ํ๋ฅผ ๋จ์ํ๊ฒ ๊ฐ์ ธ๊ฐ๊ณ ์๋ฏธ ์๋ ์ปค๋ฐ๋ค๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด์์ ๋๋ค.
4๋ฒ ์์ ์ ์๋ก ๋ค๋ฉด, โBFM-100 ๋ก๊ทธ์ธ ํ๋ฉด ๋ ์ด์์ ์์ฑโ ์์ ์ ํ ๋ ๋ก๊ทธ์ธ ํ๋ฉด์ ๋ ์ด์์์ ์์ฑํ ์ปค๋ฐ ํ๋์, view์ ์ฝ๊ฐ์ ๊ฐ๊ฒฉ์ ์กฐ์ ํ ์ปค๋ฐ ํ๋, ๊ทธ๋ฆฌ๊ณ view์ id๋ฅผ ๋ณ๊ฒฝํ ์ปค๋ฐ ํ๋, ์ด๋ ๊ฒ 3๊ฐ์ ์ปค๋ฐ์ผ๋ก ๋ถ๋ฆฌ๋ ์ํ์ ๋๋ค. ์ด 3๊ฐ์ ์ปค๋ฐ์ด ๊ทธ ์๋ฏธ๋ฅผ ๋๋ ํ์๊ฐ ์๊ฑฐ๋ ์ฝ๋๋ฆฌ๋ทฐ๋ฅผ ๋์์ฃผ์ง๋ ๋ชปํ๋ค๋ฉด ์ปค๋ฐ์ ๋ถ๋ฆฌํ๋ ๊ฒ์ ๋ถํ์ํ๋ค๊ณ ํ๋จํ๊ณ ํ๋์ ์ปค๋ฐ์ผ๋ก ํฉ์น๊ฒ ๋ฉ๋๋ค. ๋ฌผ๋ก ํญ์ ํ๋์ ์ปค๋ฐ์ผ๋ก ํฉ์ณ์ผ๋งํ๋ ๊ฒ์ ์๋๋๋ค. ํ๋์ ํฐ์ผ์ ๋ํ ์์ ์ด๋ผ๋ ์ปค๋ฐ์ด ๋ถ๋ฆฌ๋์ด ์๋ ๊ฒ ๋ซ๋ค๊ณ ์๊ฐ์ด ๋ ๋ค๋ฉด 2๊ฐ ์ด์์ ์ปค๋ฐ์ผ๋ก ๋๋ ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ถ๋ถ์ ํฐ์ผ์ ๋ ์๊ฒ ๋๋์ง ๋ชปํ ๊ฒฝ์ฐ์ผ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
5๋ฒ ์์ ๋ ์๋ฅผ ๋ค์ด๋ณด๋ฉด, ๋๋ฃ์ ๊ฐ์ด ๊ฐ์ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ฉด ํ๋์ feature ๋ธ๋์น์ ์ปค๋ฐ์ ํ๊ฒ ๋ฉ๋๋ค. ์๋ก ๊ฐ์ ์ปค๋ฐ์์ ์์ํ๋ค๊ฐ feature ๋ธ๋์น์ ํ๋์ฉ merge ๋๊ธฐ๋ ํ๊ณ ์ฝํ๊ณ ์ค์ผ์ merge ๋๊ธฐ๋ ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ปค๋ฐ ๊ทธ๋ํ๊ฐ ๋ณต์กํด์ง๊ณ ์ด๋ ฅ ํ์ธ์ ํ ๋๋ ์ด๋ ต๊ฒ ๋ฉ๋๋ค. ๊ทธ๋์ ์ปค๋ฐ์ ์์ฐจ์ ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด์ ์์ ํ ์ปค๋ฐ์ด feature์ ์ต์ ์ํ์์ ์์ํ๋๋ก rebase๋ฅผ ์ํํฉ๋๋ค.
์๋ ๊ทธ๋ํ๋ฅผ ๋ณด์๋ฉด rebase๋ฅผ ํ์ ๋ ๊ทธ๋ํ๊ฐ ์ผ๋ง๋ ๋จ์ํด์ง๋์ง ๋ณผ ์ ์์ต๋๋ค.
์์ ์ ํ ๋ ๋ธ๋์น์ ์๋ช ์ ๋๋๋ก ์งง๊ฒ ๊ฐ์ ธ๊ฐ๋ ๊ฒ ์ข์ง๋ง, feature ๋ธ๋์น์์ ๊ธฐ๋ฅ์ ์๋ฃํ๋๋ฐ ํด์ผ ํ ์์ ๋ค์ด ๋ง์์ ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ ๋ค์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ค ๋ณด๋ฉด develop์ ์ถ๊ฐ๋ ๊ธฐ๋ฅ๋ค์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์๊ธฐ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ด ๋๋ feature ๋ธ๋์น์ develop์ ๋ณ๊ฒฝ์ฌํญ๋ค์ ๊ฐ์ ธ์์ผ ํฉ๋๋ค.
-
feature-user ๋ธ๋์น์ upstream/develop ๋ธ๋์น๋ฅผ merge ํฉ๋๋ค. (feature-user)]$ git fetch upstream (feature-user)]$ git merge โno-ff upstream/develop
-
upstream/develop์ ๋ณ๊ฒฝ์ฌํญ์ด merge๋ feature-user๋ฅผ upstream์ push ํฉ๋๋ค. (feature-user)]$ git push upstream feature-user
๋๋์ด feature-user ๋ธ๋์น์์ ์์ ํ๋ ๊ธฐ๋ฅ์ด ์๋ฃ๋์์ต๋๋ค. ์ด์ feature ๋ธ๋์น๋ฅผ ์ด๋ฒ ์ถ์ ๋ฒ์ ์ ํฌํจ์ํค๊ธฐ ์ํด์ develop์ merge ํด์ผ ํฉ๋๋ค.
-
develop ๋ธ๋์น์ upstream/feature-user ๋ธ๋์น๋ฅผ merge ํฉ๋๋ค. (develop)]$ git fetch upstream (develop)]$ git merge โno-ff upstream/feature-user
-
upstream/feature-user ๊ธฐ๋ฅ์ด merge๋ develop๋ฅผ upstream์ push ํฉ๋๋ค. (develop)]$ git push upstream develop
์ด๋ฒ ๋ฒ์ ์ ํฌํจ๋์ด์ผ ํ ๊ธฐ๋ฅ๋ค์ด ๋ชจ๋ ์๋ฃ๋์์ต๋๋ค. ์ด์ ๋ถํฐ ์ถ์ ๋ด๋น์๊ฐ ํด์ผ ํ ์ผ์ด ๋ง์ต๋๋ค. ์ถ์ ๋ด๋น์๋ QA๋ฅผ ์์ํ๊ธฐ ์ํด ๋จผ์ release ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ upstream์ pushํ์ฌ release ๋ธ๋์น๋ฅผ ๊ณต์ ํฉ๋๋ค.
-
release-1.0.0 ๋ธ๋์น๋ฅผ ์์ฑํฉ๋๋ค. (develop)]$ git fetch upstream (develop)]$ git checkout -b release-1.0.0 โtrack upstream/develop
-
release-1.0.0 ๋ธ๋์น๋ฅผ upstream์ pushํฉ๋๋ค. (release-1.0.0)]$ git push upstream release-1.0.0
๊ฐ๋ฐ์ ์๋ฃํ ํ QA ์ค ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฉด ์ข๊ฒ ์ง๋ง ํญ์ ์๊ฐ์ง ๋ชปํ ์์ธ ์ํฉ๋ค์ด ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค. ์์ธ ์ํฉ์ด ๋ฐ์ํ ๋๋ง๋ค ๋ฒ๊ทธ ํฐ์ผ์ด ํ๋์ฉ ์์ฑ๋๋๋ฐ ์ด ํฐ์ผ๋ค์ ๋ชจ๋ ํด๊ฒฐํด์ผ๋ง ์ฑ์ ์ถ์ํ ์ ์์ต๋๋ค. ๋ฒ๊ทธ ํฐ์ผ๋ค๋ ํฐ์ผ์ด๊ธฐ ๋๋ฌธ์ โ1. ํฐ์ผ ์ฒ๋ฆฌํ๊ธฐโ์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
-
release ๋ธ๋์น์์ ๋ฒ๊ทธ ํฐ์ผ์ ๋ํ ๋ธ๋์น๋ฅผ ์์ฑํฉ๋๋ค. (release-1.0.0)]$ git checkout -b bfm-101_bug_login_id_max_length
-
๋ฒ๊ทธ๋ฅผ ์์ ํฉ๋๋ค. (๋๋ฑ๋๋ฑ ๐จ)
-
์์ ๋ธ๋์น์ ๋ฒ๊ทธ ์์ ์ฌํญ์ ์ปค๋ฐํฉ๋๋ค. (bfm-101_bug_login_id_max_length)]$ git commit -m "BFM-101 ๋ก๊ทธ์ธ ์์ด๋ ๊ธธ์ด ์ ํ ๋ฒ๊ทธ ์์ "
-
์์ ๋ธ๋์น๋ฅผ origin์ push ํฉ๋๋ค. (bfm-101_bug_login_id_max_length)]$ git push origin bfm-101_bug_login_id_max_length
-
Github์์ bfm-101_bug_login_id_max_length ๋ธ๋์น๋ฅผ release-1.0.0์ merge ํ๋ Pull Request๋ฅผ ์์ฑํฉ๋๋ค.
-
๋๋ฃ์๊ฒ ๋ฆฌ๋ทฐ ์น์ธ์ ๋ฐ์ ํ ์์ ์ Pull Request๋ฅผ merge ํฉ๋๋ค.
๋ฐ์ํ๋ ๋ฒ๊ทธ๋ค์ ๋ชจ๋ ์์ ํ๋ค๋ฉด ์ด์ ์ถ์๋ฅผ ์ค๋นํ ๋์ ๋๋ค. release ๋ธ๋์น๋ฅผ master ๋ธ๋์น์ develop ๋ธ๋์น์ mergeํ๊ณ ๋ง์ง๋ง์ผ๋ก master ๋ธ๋์น์์ ๋ฒ์ ํ๊ทธ๋ฅผ ๋ฌ์์ค๋๋ค.
-
release ๋ธ๋์น๋ฅผ ์ต์ ์ํ๋ก ๊ฐฑ์ ํฉ๋๋ค. (release-1.0.0)]$ git pull upstream release-1.0.0
-
release ๋ธ๋์น๋ฅผ develop ๋ธ๋์น์ merge ํฉ๋๋ค. (release-1.0.0)]$ git checkout develop (develop)]$ git pull upstream develop (develop)]$ git merge โno-ff release-1.0.0
-
develop ๋ธ๋์น๋ฅผ upstream์ push ํฉ๋๋ค. (develop)]$ git push upstream develop
-
release ๋ธ๋์น๋ฅผ master ๋ธ๋์น์ merge ํฉ๋๋ค. (develop)]$ git checkout master (master)]$ git pull upstream master (master)]$ git merge โno-ff release-1.0.0
-
1.0.0 ํ๊ทธ๋ฅผ ์ถ๊ฐํฉ๋๋ค. (master)]$ git tag 1.0.0
-
master ๋ธ๋์น์ 1.0.0 ํ๊ทธ๋ฅผ upstream์ push ํฉ๋๋ค. (master)]$ git push upstream master 1.0.0

