git을 이용한 프로젝트의 흐름(gitflow)

JINSOO PARK·2021년 10월 8일

지옥에서 온 git

목록 보기
7/7

프로젝트의 흐름(gitflow)

  • master 브렌치: 실질적으로 개발을 하지 않고 이용자에게 제공 되어진 커밋만 존재한다.

  • develop 브렌치: maseter로 부터 파생되어 실질적인 개발이 이루어진다.

  • feature 브렌치: develop 브렌치에서 개발을 진행 하다가 무언가 특징적인 것을 만들어야 할때 develop 브렌치에서 파생 된 별도의 feature 브렌치를 만들어 개발을 한다.
    작업이 끝난 후엔 develop 브렌치로 가져온다.

  • release 브렌치: develop 브렌치에서 작업한 결과를 사용자들에게 배포 할 때 release 브렌치를 만들어 사용한다.
    이 후에 발생한 버그의 수정이나 문서의 업데이트는 release 브렌치 안에서 작업하고 그 작업이 끝날때 마다 develop 브렌치에 틈틈이 병합을 해준다.
    충분한 test 작업을 마치고 master 브렌치로 변경사항을 병합하고 tag로 버전을 표시한다.
    그와 동시에 develop 브렌치에도 병합을 해준다.

  • hotfix 브렌치: 마스터 브렌치에서 긴급하게 문제를 해결해야 될 경우 hotfix 브렌치를 만들어 해당 버그를 수정하고 마스터 브렌치로 병합을 한 후 tag로 버전을 표시한다.
    그와 동시에 develop 브렌치에도 병합을 해준다.

실습하기

1. 실습 할 디렉토리에 파일을 생성 후 커밋한다.

git init
vim f1.txt ("this is master branch 1")
git add f1.txt
git commit -m "master"

2. 원격 저장소와 연결

git remote add origin https://github.com/jinzza456/gitflow.git


3. develop 브렌치를 생성 후 이동.

jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (master)
$ git checkout -b develop
Switched to a new branch 'develop'

4. f1.txt 를 수정 후 커밋

jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (develop)
$ vim f1.txt ("내용 추가")
$ git commit -am "develop1"

5. 기능을 추가해야 될 경우를 가정하여 develop 브렌치에서 feature 브렌치를 생성한다.

jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (develop)
$ git checkout -b feature-some(무슨기능인지 알아보기 쉽게)
Switched to a new branch 'feature-some'

6. feature 브렌치에서 파일을 생성 후 커밋

jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (feature-some)
$ vim f1.txt ("내용 추가")
$ git commit -am "feature-some1"

*git log

* f02b490 (HEAD -> feature-some) feature-some1
* 2c3f2d5 (develop) develop1
* edbdfd3 (master) master

7. feature 브렌치에서 끝난 작업을 develop 브렌치로 병합

jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (develop)
$ git merge feature-some
Updating 2c3f2d5..f02b490
Fast-forward
 f1.txt | 1 +
 1 file changed, 1 insertion(+)

*git log

* f02b490 (HEAD -> develop, feature-some) feature-some1
* 2c3f2d5 develop1
* edbdfd3 (master) master

8. 작업이 끝난 feature 브렌치는 삭제해 준다.

jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (develop)
$ git branch -d feature-some
Deleted branch feature-some (was f02b490).

9. 이용자에게 배포하거나 업로드 해야 할 경우 relese 브렌치를 생성하고 파일을 수정한다.

jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (develop)
$ git checkout -b release-1.0
Switched to a new branch 'release-1.0'

jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (release-1.0)
$ vim f1.txt
$ git commit -am "release 1"

*git log

* 0c1a2ff (HEAD -> release-1.0) release 1
* f02b490 (develop) feature-some1
* 2c3f2d5 develop1
* edbdfd3 (master) master

10. 수정과 테스트가 끝난 작업을 master 브렌치로 병합한다.

jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (release-1.0)
$ git checkout master
Switched to branch 'master'

jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (master)
$ git merge release-1.0

11. 병합된 최신 커밋에 tag를 생성한다.

jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (master)
$ git tag -a 1.0 -m "first release" master

*git log

* 0c1a2ff (HEAD -> master, tag: 1.0, release-1.0) release 1
* f02b490 (develop) feature-some1
* 2c3f2d5 develop1
* edbdfd3 master

12. 마찬가지로 develop 브렌치에도 병합 해준다.

jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (master)
$ git checkout develop
Switched to branch 'develop'

jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (develop)
$ git merge release-1.0

*git log

* 0c1a2ff (HEAD -> develop, tag: 1.0, release-1.0, master) release 1
* f02b490 feature-some1
* 2c3f2d5 develop1
* edbdfd3 master

모든 브렌치가 최신 커밋인 상태가 되었다.

13. 긴급하게 수정해야 될 상황을 가정하여 master 브렌치에서 hotfix 브렌치를 생성하고 수정한다.

jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (master)
$ git checkout -b hotfix-some
Switched to a new branch 'hotfix-some'

$ vim f1.txt
$ git commit -am "hotfix1"

14. hotfix에서 긴급 수정이 완료된 파일을 master 브렌치로 병합하고 tag를 생성한다.

jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (master)
$ git merge hotfix-some

$ git tag -a 1.1 -m "hotfix some" master

*gitlog

* 988c1cb (HEAD -> master, tag: 1.1, hotfix-some) hotfix1
* 0c1a2ff (tag: 1.0, release-1.0, develop) release 1
* f02b490 feature-some1
* 2c3f2d5 develop1
* edbdfd3 master

15. 마찬가지로 hotfix 브렌치에서의 수정내용을 devolp 브렌치로 병합한다.

jinzz@DESKTOP-I8KEDHO MINGW64 /c/gitflow (develop)
$ git merge hotfix-some

*gitlog

* 988c1cb (HEAD -> develop, tag: 1.1, master, hotfix-some) hotfix1
* 0c1a2ff (tag: 1.0, release-1.0) release 1
* f02b490 feature-some1
* 2c3f2d5 develop1
* edbdfd3 master

push와 pull의 타이밍

  • 새로운 브렌치를 만들기 직전에 pull을 하여 최신 커밋을 확인한다.
  • feature 브렌치는 develop 브렌치의 내용을 자주 불러와서(fetch, pull, rebase) 작업 하는 것이 좋다.
  • realese 브렌치에서의 변경사항은 자주자주 push를 해준다.
  • hotfix 브렌치를 만들면 delvelop 브런치에서도 merge를 해주어야 한다.
profile
개린이

0개의 댓글