git-3
git flow
git flow
는 git을 위한 브랜치 모델이다.
- 여러 브랜치로 나누어 개발을 진행한다.
- master, hot fix, released, develop, feature
How It Works
-
feature branches
- 개발자가 각 기능을 실제로 개발하는 브랜치이다.
- develop branch에서 따와서 시작한다.
develop branch는 master branch 혹은 released branch에서 따온다.
- 각 feature branch에서 개발을 완료하고 release 할 준비를 완료하면 develop branch에 다시 merge한다.
git flow를 이용하면 release 준비가 끝나 merge된 feature branch는 자동으로 삭제된다. 편하다!
-
develop branch
- master 혹은 released branch를 따와 만든 branch이다.
- feature branches에서 개발이 완료된 소스들이 병합된다.
-
release branch
- 프로젝트를 release하는 브랜치이다.
- develop branch를 따와서 만든다.
- release branch는 테스트 환경에 deploy되어 테스트 된다.
- 문제가 있을 경우 release branch에서 즉시 수정한다.
- 사용자에게 출시할 수 있을 때까지 해당 작업은 반복한다.
- 출시할 준비가 완료되면 release branch는 master와 develop branch 모두로 병합된다.
released branch에서 수정한 사항을 merge
-
master branch
- master branch는 오직 release가 완료된 코드만 추적한다.
- master branch로 오는 commit들은 release branches 와 hotix branches다.
-
hotfix branches
- 긴급한 버그를 수정할 때 사용하는 branch다.
- master branch에서 바로 따와서 사용한다.
- 버그를 수정한 후에는 master branch와 develop branch에 merge한다.
git flow 사용법
설치 링크 우선 설치해야 한다.
- 초기화
git flow init
- git-flow를 초기화 한다.
- 해당 명령어를 입력하면 branch naming convention을 정할 수 있는데 기본값을 사용할 것을 권장한다.
- 새로운 기능 개발
git flow feature start MYFEATURE
- 새로운 기능을 개발할 브랜치를 만들어준다.
- 해당 명령어를 입력하면
feature/MYFEATURE
브랜치가 생성되고 자동으로 현재 브랜치가 된다. 편하다!
- 기능 개발 완료
git flow feature finish MYFEATURE
- 기능 개발을 마치면 다시 develop 브랜치에 머지한다.
- 해당 명령어를 입력하면 3가지 작업이 일어난다.
- develop 브랜치로 머지
- 현재 브랜치를 devleop 브랜치로 변경
feature/MYFEATRUE
브랜치 삭제
- release
git flow release start RELEASE
- 해당 명령어를 실행하면 두 가지 작업이 일어난다.
- relese branch 생성
- 현재 branch를 release branch로 변경
- 테스트와 수정 작업을 반복한다.
git flow release finish RELEASE
- 해당 명령어를 실행하면 release note와 tag를 작성할 수 있는 에디터가 실행된다.
- 작성을 마치면 3가지 작업이 일어난다.
- release branch를 master(main) branch와 develop branch에 병합
- 현재 branch를 develop branch로 변경
- release branch 제거
git push origin --tags
- 태그는 따로 푸시하지 않으면 적용되지 않는다.
명령어 정리
$ git flow init
$ git flow feature start MYFEATURE
$ git flow feature finish MYFEATURE
$ git flow release start RELEASE
$ git flow release finish RELEASE
$ git push origin --tags