2018.12.16 - Git Flow를 통한 버전관리

2 분 소요

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/으로 만들어지고 해당하는 branch로 자동 checkout된다.

$ 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/의 이름을 갖는 새로운 branch를 하나 만들어서 checkout한다.

$ 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 사용법을 정확하게 숙지하고 팀원들과 효율적으로 사용할 수 있도록 해야한다.

참고

태그: ,

카테고리:

업데이트: