티스토리 뷰

tmp

Git flow 사용해보기

박스여우 2017. 2. 8. 16:39

안녕하세요 박스여우입니다. 최근 들어 github를 본격적으로 사용하기 시작하면서 github에 대한 관심이 커지게 되었습니다. 현재 진행 중인 프로젝트도 github를 사용하여 개발하다 보니 정말 편리하더군요. 하지만, 프로젝트를 진행하면서 자꾸 branch를 사용하는 용도가 이게 맞는지, 더 깔끔하게 git을 사용하는 방법이 없는지 고민하게 되었습니다. 그러던 중 git flow라는 녀석을 알게 되었습니다.



Git flow

깃 흐름? git flow가 뭐냐고 물으신다면 브랜칭 기법이라고 말씀드릴 수 있습니다. 프로젝트를 진행하면서 수많은 브랜치를 생성하고 병합합니다. 이러한 수많은 브랜칭 작업을 규격화하여 브랜치를 쉽게 다룰 수 있도록 해 주는 규칙, 전략입니다. 브랜칭 모델은 여러 가지가 있지만 git flow는 gui 툴들에서도 기본적으로 기능으로 제공될 정도로 가장 보편화하여있는 모델입니다.


git flow에는 기본적으로 feature, develop, release, hotfix, master 5가지 종류의 브랜치가 있습니다. 각각 브랜치는 특정한 목적을 위해 만들어지며, 이는 필요에 따라 생성과 삭제가 될 수 있습니다.


develop과 master 브랜치는 중심이 되는 브랜치이며 git flow에서는 무조건 존재해야 하는 브랜치 입니다. develop에서 개발된 프로젝트는 release브랜치를 통해 릴리즈를 준비하며, 릴리즈 준비가 완료되었다면 master 브랜치에 병합하게 됩니다. 이에 대해서는 아래의 release 브랜치에서 자세하게 다루도록 하겠습니다.



Feature 브랜치

Feature 브랜치는 새로운 기능을 추가하기 위해 사용되는 브랜치이며 origin에는 업로드하지 않고, 개발자의 local에서만 존재합니다. 위의 그림을 보면 알 수 있듯이 feature 브랜치는 특정 기능 개발이 필요할 때 develop 브랜치로부터 파생되며 기능 개발이 완료되면 다시 develop 브랜치로 병합됩니다.


feature 브랜치의 이름은 master, develop, release, hotfix 등을 제외한 어떤 이름이든 가능하며, develop 브랜치에 병합시킬 때 --no-ff 옵션을 주어 병합된 히스토리를 기록하는 것이 좋습니다.



Release 브랜치

Release 브랜치는 릴리즈를 준비하기 위한 브랜치 입니다. 지금까지 개발한 기능들을 develop 브랜치로부터 따내어 release 브랜치를 만들고 release 브랜치에서는 발견되는 버그들을 수정하며 릴리즈를 준비합니다. 그동안 develop 브랜치에서는 다음 릴리즈를 위한 개발을 진행합니다.


만약 릴리즈 준비가 완료되었다면 master 브랜치에 병합하며 수정된 버그를 적용하기 위해 develop 브랜치에도 병합하면 됩니다. release 브랜치의 이름은 보통 release-* 또는 release/* 과같이 지정합니다.



Hotfix 브랜치

Hotfix브랜치는 릴리즈된 Product에서 발생한 버그들을 수정하기 위한 브랜치 입니다. 따라서 hotfix 브랜치는 master로부터 파생되며 수정한 버그들을 적용하기 위해 master와 develop 브랜치 모두에 병합됩니다. 만약 release 브랜치가 존재한다면 release 브랜치에도 hotfix 브랜치를 병합하여 다음 릴리즈때 내용이 적용되도록 해야 합니다. hotfix 브랜치의 이름 역시 hotfix-*, hotfix/*과같이 지정합니다.




Git flow 사용해보기

git flow의 개념에 대해 알아보았으니 이번에는 git flow를 실제 프로젝트에서 사용하는 방법에 대해서 알아보도록 하겠습니다. 만약 gui 툴을 사용하신다면 대부분 git flow라는 기능을 제공할 것입니다. 이번 포스팅에서는 gui 툴중 SourceTree에 대해서만 알아보도록 하겠습니다.



SourceTree에서의 사용법


SourceTree에서 저장소를 열면 우측 상단에 깃 플로우라는 버튼이 있습니다. 해당 버튼을 통해 git flow를 시작하고 사용할 수 있습니다.


git flow를 처음 사용하면 위의 사진과 같이 각각 브랜치마다 접두어를 설정해 주는 초기화 작업을 해 주어야 합니다. 저는 그냥 기본값을 그대로 사용하도록 하겠습니다.

확인을 누른 뒤에 다시 깃 플로우 버튼을 눌러보면 다음과 같이 동작을 선택할 수 있습니다. 새 기능, 새 릴리즈, 새 핫픽스를 생성할 수 있으며 이 외의 동작은 다른 동작에서 확인할 수 있습니다.


새 기능을 시작하면 기능명을 입력하고 시작지점이 되는 브랜치를 선택할 수 있습니다. 새 기능 시작을 완료하면 feature 브랜치가 생성되며 해당 브랜치에서 작업을 할 수 있게 됩니다.


그리고 다시 기능 마무리를 선택하면 feature 브랜치를 develop 브랜치에 병합시키고 브랜치를 삭제시킬 수 있습니다. 기능 개발이 완료되면 해당 브랜치를 더이상 사용하지 않기 때문에 삭제해 주시는 것이 좋습니다.


SoruceTree를 이용한 Git flow 사용은 크게 어렵지 않습니다. 친절한 Gui가 모두 제공해 주며 SoruceTree가 귀찮은 명령어들을 대신해 주기 때문에 편리합니다. 



Git Bash에서의 사용법

다음으로는 git bash에서의 git flow 사용법에 대해 알아보도록 하겠습니다.


git bash에서 git flow init을 입력하면 git flow가 적용됩니다. bash도 SourceTree와 마찬가지로 각각 브랜치마다 이름을 설정해 주어야 합니다. 그냥 엔터를 누르시거나 명령어 뒤에 -d 옵션을 붙여주시면 기본값으로 설정이 됩니다.


그다음 새로운 기능을 개발하기 위해 feature 브랜치를 생성해 보도록 하겠습니다. git flow feature start <branch name> 이 명령어를 입력하면 feature 브랜치가 생성됩니다. 브랜치의 이름은 기능 명으로 설정해 주셔야 합니다. 저는 apply_function을 브랜치 이름으로 설정했습니다.


기능개발이 완료면 feature 브랜치를 develop 브랜치에 병합시켜 보도록 합시다. git flow feature finish <branch name> 이 명령어를 입력하면 feature 브랜치가 develop 브랜치에 병합되고 feature 브랜치는 삭제됩니다. 기존에는 이와 같은 작업을 수행하기 위해서 2~3줄의 명령어를 작성해야 하지만 git flow를 사용하면 단 한 줄 만에 귀찮은 작업들을 모두 수행해 줍니다.



git bash가 아닌 그냥 윈도우 환경에서 사용하고 싶으시다면 다음 사이트의 문서를 따라 git flow 설치를 진행하시면 됩니다. https://github.com/nvie/gitflow/wiki/Installation



마치며..

git의 브랜칭 모델에는 git flow 외에도 여러 가지가 있습니다. 각각 여러 가지 장단점이 존재하며 어떤 모델이 가장 좋다고 단정 지을 수는 없습니다. 무엇보다 현재 진행하는 프로젝트에 맞는 모델을 사용하시는 것을 추천해 드립니다.


참고자료 : http://nvie.com/posts/a-successful-git-branching-model/

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함