2018.12.16 - Git Flow를 통한 버전관리
git flow
git을 사용하면서 프로젝트를 진행하면서 branch관리의 어려움을 많이 느꼈다. 개념적인 부분들은 알고있다고 생각했는데 실제로 사용해보니 branch를 생성해서 프로젝트를 진행하니 git log가 엉망진창이 되는 일이 잦았다. 그러던 중 사촌형을 통해 알게된 것이 git flow이다. 이제 막 시작하는 단계이기 때문에 깊게 포스팅을 하기에는 무리가 있지만, 간단하게 배운 내용들을 작성하기 위해 이 포스팅을 시작하였다.
이 git flow의 개념은 Vincent Driessen’s의 branching model을 적용하여 고수준으로 저장소를 관리하기 위한 Git 확장 콜렉션 이라고 git-flow github에 정의 되어있다.
macOS에 설치
다른 개발 환경에서 설치하는 법은 잘 모른다. 내가 macOS를 사용하고 있기 때문에 macOS 설치 방법에 대해서만 다룰 것이다.(다른 개발환경에서 설치하는 방법은 git-flow github에 나와있다.) macOS에 설치하는 방법은 아주 간단하다. brew를 통해서 설치해 준다. (brew가 안깔려있다면 macOS 개발환경 구축하기를 참고하도록 한다.)
$ brew install git-flow
brew를 통해 git-flow를 설치했다면 이제 자신의 프로젝트로 가서 git flow설정을 해준다. 명령어는 다음과 같다.
$ git flow init
이 git flow init
을 실행하면 자동적으로 master, develop branch가 생긴다. 이 git flow의 개념은 기본적으로 develop branch에서 개발을하고 이상이 없는 경우 master로 release하는 것이다.
git flow branch 종류
git flow의 branch 종류는 6가지이다.
- master : 최종 릴리즈한 안정화 버전
- develop : 다음 릴리즈를 위해 개발중인 최신 버전
- feature : 특정 기능 개발을 위한 branch
- release : 릴리즈 점검을 위한 branch
- hotfix : 긴급 버그 픽스를 위한 branch
- support : 버전 호환성 문제 처리를 위한 branch
종류는 6가지지만 실제로 많이 사용하는 branch는 master, develop, feature, release
4가지 라고 한다.
feature branch
feature branch는 특정 기능을 개발하거나 수정할 때 사용한다. 쉽게 말해 기능을 개발하는 branch이다. feature branch는 그 기능을 다 완성할 때까지 유지하고 있다가 다 완성되면 develop branch로 병합(merge)한다.
아래의 명령어를 사용하면 새로운 branch가 feature/
$ git flow feature start <branch name>
feature branch를 새로 만들고 작업을 한뒤에 git stage(git add)에 올린 후 commit를 한다. 그리고 다음 명령어를 통해 작업을 종료한다.
$ git flow feature finish <branch name>
git flow finish명령어를 사용하면 git flow는 develop branch로 이동한 후 feature branch의 변경 내용을 develop branch에 merge한 후 작업이 끝난 feature branch를 자동으로 삭제한다.
release branch
release branch는 실제 배포할 상태가 된 경우에 생성하는 branch이다. master branch를 통해 배포하기로 했으므로 먼저 release branch를 master branch로 병합(merge)한다. 나중에 이 배포버전을 찾기 쉽도록 태그를 만들어 현재 병합되는 컵밋을 가리키도록 한다. 이 때 배포된 기능에 반영될 수 있도록 develop branch에도 함께 병합(merge)한다.
아래의 명령어를 실행하면 develop branch의 내용을 base로 release/
$ git flow release start <branch name>
그리고 release branch를 생성한 후에 다른 개발자들이 release commit을 하는것을 허용하기 위해 publish하는 것이 좋다. 방법은 다음과 같다
$ git flow release publish <branch name>
git flow release명령어를 통해 간단한 버그를 수정하거나 점검을 하는 작업을 하고 난 뒤 finish 명령어를 통해 작업을 마무리한다.
$ git flow release finish <branch name>
이 finish명령어를 하고 나면 세부적으로 다음의 작업들을 처리한다. release branch의 코드를 master branch에 merge하고 release의 이름으로 Tag를 등록한다. 그리고 release를 develop branch로 재병합을(back-merge) 하고 나서 release branch를 삭제한다. 그리고 아래의 명령어를 통해 Tag들을 Push하는 것을 잊으면 안된다.
$ git push --tags
정리
git-flow는 필수는 아니지만 사용했을 경우 git의 버전관리를 더 효율적이고 편리하게 사용하게 해준다. 하지만 역시나 git-flow를 더 효과적으로 사용하기 위해서는 프로젝트를 진행하는 팀원과 git을 사용하기 위한 규칙들을 정확하게 정해놓고 사용하는 것이 필요하다. 또한 서로 규칙을 정확하게 숙지하고 여러 커뮤니케이션들을 공유해야 한다. git-flow도 결국은 git에서 제공하는 기본적인 branch를 어떻게 사용하는가에 대한 방법론이다. 기본적인 git 사용법을 정확하게 숙지하고 팀원들과 효율적으로 사용할 수 있도록 해야한다.