git-model@2x.png

 

 

그동안 단순히 코드 날림 방지를 위해서 git을 사용해온 초보로서 제대로 된 협업 상황에서 git을 사용해 본적이 없는지라, 막상 branch를 구분해서 프로젝트를 진행하려고 하니 어떻게 해야할 지 막막했다. 그래서 고민하던 중, 페이스북 친구 중 한 분이 git flow에 대한 이야기를 해주셨다. 구글링을 해서 간단히 훑어봤는데 상당히 흥미로운 녀석인 것 같아서 리뷰를 하기로 했다. git 초보라서 단기간에 깊은 내용을 리뷰하기는 어려울 것 같고(사실 이런 녀석들은 실제 업무에 써봐야 똥인지 된장인지 알 수 있다고 생각함), 어떤 녀석인지 간략하게 소개만 할 생각이다.

git flow가 뭐하는 녀석인지 알아보자.

 

 

gitflow…?

 

gitflow’s github page에 들어가보면 gitflow를 다음과 같이 소개하고 있다.

Vincent Driessen’s의 branching model을 적용하여 고수준으로 저장소를 관리하기 위한 Git 확장 콜렉션

 

Vincent Driessen의 branch model을 여기에서 전부 설명하기는 어려울 것 같으므로 관심 있는 사람은 위의 링크에 있는 내용을 참조하길 바란다.

짧게 이야기해보면, Vincent의 branching model은 “feature – develop – release – hotfixes – master” 단계로 branch를 나눠서 코드를 관리하는 전략이다. git의 branch 관리가 아무리 빠르고 편하다 한들, 이렇게 프로세스를 나눠서 작업을 하려면 귀찮기 마련이다. 그래서 사용자가 쉽게 접근할 수 있도록 확장 명령어 셋을 제공하는 것이 바로 gitflow다.

이야기만 들으면 그게 뭔가 싶은데, 사용법이 어렵지 않아서 실제 예제를 가지고 몇 번 쳐보면 어떻게 사용하는지 감이 금방 온다.  

그럼 설치부터 시작한다.

 

 

gitfow 설치

 

현재 업무용으로 사용중인 PC의 OS가 windows인 이유로 windows 환경에서 설치를 진행했다. 다른 OS의 설치 방법은 아래의 링크를 참고하면 된다.  물론 windows 환경 설치 방법도 잘 설명되어 있다.

https://github.com/nvie/gitflow/wiki/Installation

 

우선 Github에서 gitflow를 내려 받는다. 

git clone –recursive git://github.com/nvie/gitflow.git

 

 

1.-코드-다운.png

 

windows 환경의 경우 아래 파일이 추가적으로 필요하다.

 

이 파일을 모두 다운 받아서 [git 설치 디렉토리]/bin에 복사한다. 보통 window7 64bit 환경의 경우 아래의 경로에 git이 설치되어 있다.

C:\Program Files (x86)\Git

 

설치 완료 후 커맨드 창에서 git flow를 입력해보면 아래와 같은 화면을 볼 수 있다.

 

2.-git-flow를-쳐보면.png

 

 

사용 프로세스

 

예제로 사용할 코드가 필요하므로 Github에서 개인 프로젝트를 하나 받아오겠다.

 

3.-소스-받아오기.png

 

지금은 master 브랜치만 하나 있는 상태다.

 

4.-현재-브랜치.png

 

git flow를 사용하려면 다음과 같이 입력해줘야 한다.

git flow init

 

프로세스 별로 사용할 branch 명을 입력하라는 메시지가 뜬다.  gitflow는 이중에 master와 develop는 기본적으로 제공합니다. 기본값으로 사용하고 싶으면 그냥 엔터만 입력하면 된다.

 

5git-flow-init.png

 

참고로 gitflow를 이용해서 만들 수 있는 branch는 모두 6종류가 있다.

  • master : 최종 릴리즈한 안정화 버전
  • develop : 다음 릴리즈를 위해 개발중인 최신 버전
  • feature : 특정 기능 개발을 위한 branch
  • release : 릴리즈 점검을 위한 branch
  • hotfix : 긴급 버그 픽스를 위한 branch
  • support : 버전 호환성 문제 처리를 위한 branch

 

엔터치는 것조차도 귀찮은 나 같은 게으른 사람은 -d 옵션을 주면 이 과정을 생략할 수 있다.

git flow init -d

 

git flow init을 하면 자동으로 master 외에 develop branch가생긴다.  기본적으로 develop branch에서 개발하고, master로 realease하는 방식이다.

 

6.-git-flow-init-d.png

 

특정한 기능을 개발하기 위한 branch가 필요한 경우에는 feature를 이용한다.

git flow feature start <branch name>

 

이렇게 하면 새로운 기능 개발을 위한 branch가 “feature/기능명”이라는 이름으로 만들어지고, 해당 branch로 자동으로 checkout 된다.

여기에서는 refactoring이라는 feature branch를 만들었다.

 

7.-git-feature-start.png

 

여기에 코드를 추가했다고 가정해보자.  리뷰 진행을 위해서 간단하게 텍스트만 추가했다.

 

8.-코드-수정.png

 

코드 수정 후 변경 사항을 stage에 올리고, commit 한다.

 

9.-수정-후-커밋.png

 

기능 개발을 완료했으면 이 사실을 git flow에 알려준다.

git flow feature finish  <branch name>

 

feature finish 명령을 입력하면

  1. git flow는 develop branch로 checkout 한 후,
  2. feature branch의 변경 내용을 자동으로 develop branch에 merge하고,
  3. 작업이 끝난 feature branch를 삭제한다.

 

10.-git-flow-feature-finish.png

 

변경한 내용이 코드에 반영되어 있음을 확인할 수 있다.

 

11.-develop으로-merge.png

 

이번에는 release를 위해 release branch를 만들자.

git flow release start [branch name]

 

release start를 하면 develop branch의 내용을 base로 release/[branch name]의 이름을 갖는 새로운 branch를 하나 만들어서 checkout 한다.

 

12.-git-flow-release.png

 

release 작업을 위한 branch가 생겼다.  release branch는 보통 릴리즈 점검을 위해 간단한 버그를 수정하는 등의 작업을 목적으로 사용한다.

release를 위한 점검이 끝났으면 간단하게 realease를 finish 해주면 된다.

git flow release finish [branch_name]

 

release finish를 요청하면 세부적으로는 다음과 같은 작업을 처리한다.

  1. release 브랜치의 코드를 master branch에 merge
  2. release의 이름으로 태그 등록
  3. 릴리즈를 develop branch로 재병합(back-merge)
  4. release branch를 삭제

13.-git-flow-release-finish1.png

 

이제 모든 release 준비가 끝났으므로 pull 요청으로 원격 저장소에 코드를 밀어넣어주면 된다.

이외에도 gitflow를 이용해서 hotfix 작업을 할 수 있으며, feature/release 별로 pull/push를 할 수도 있다.

 

 git flow hotfix

git flow hotfix start <release> [<base>]

git flow hotfix finish <release>

git flow feature publish <name>

git flow feature pull <remote> <name>

 

 

끝으로…

 

이 글에서는 간단한 사용방법만 살펴보았다. 보았듯이 git flow는 단순히 branch 관리를 위한 확장 명령어 셋을 제공하는 역할만 하기 때문에 기존의 git 명령도 그대로 사용할 수 있다. 귀찮은 일련의 작업을 한 번에 처리해주는 게 장점인 것 같다. 

코드 저장소를 단순하게 사용하는 복잡하지 않은 프로젝트라면 굳이 이렇게 까지 branch를 관리할 필요가 있을까 의문이다. 하지만 코드 충돌이 잦은 복잡한 수준의 협업이 요구되는 상황인데, 딱히 어떤 branch 관리 전략을 가지고 있지 않다면 한 번쯤 사용해보는 것도 나쁘지 않을 것 같다.

 

 

참고

번호 제목 글쓴이 날짜 조회 수
» [Review] gitflow, 쉬운 git branch 관리 By 개발왕 김코딩 on 2월 11, 2014 in 개발 이야기 file 황제낙엽 2016.05.18 57
34 [TortoiseGit] 윈도우에서 깃(Git)을 좀더 편리하게 사용하기 file 황제낙엽 2016.05.17 103
33 윈도우에서 깃(git) 서버 설치하기 file 황제낙엽 2016.05.17 404
32 [TortoiseGit] 깃(Git) 브랜치 머지(Merge)하기 file 황제낙엽 2016.05.17 157
31 [TortoiseGit] 깃(Git)으로 브랜치/태그 만들기 file 황제낙엽 2016.05.17 142
30 Pro Git Book 다운로드 file 황제낙엽 2016.05.17 123
29 Git, 정말 필요한가 file 황제낙엽 2016.05.12 68
28 GIT/ 프로젝트, 폴더, 파일 관리 프로그램 장점 및 추천 (TortoiseGit) file 황제낙엽 2016.05.12 131
27 Git 의 기능 및 장점 황제낙엽 2016.05.12 56
26 Git 의 개념과 기초 사용법 file 황제낙엽 2016.05.12 72
25 Git 과 svn 비교 - svn 대비 git의 차별점 file 황제낙엽 2016.05.12 107
24 Git에 대한 단상 황제낙엽 2016.05.12 24
23 Git 의 장점과 단점 황제낙엽 2016.05.12 191
22 Git 의 기능 및 장점 황제낙엽 2016.05.12 23
21 TortoiseSVN 잠그기 (Get lock) file 황제낙엽 2016.02.04 65
20 VisualSVN Server 와 TortoiseSVN 관련 링크 모음 file 황제낙엽 2016.02.03 115
19 Win7 64bit에서 subclipse 1.6.x 사용 시 javahl 버전 에러 황제낙엽 2013.03.02 44
18 Versioning 에 대한 참고 사항 황제낙엽 2012.08.28 62
17 SVN 사용시 revision 번호로 버전관리하는 방법 황제낙엽 2012.08.28 586
16 How do I get JavaHL? 황제낙엽 2010.09.28 51