Git Flow란?
Vincent Driessen의 브랜칭 모델을 위한 고수준 저장소 작업을 제공하는 Git의 확장 프로그램이다. Git Flow의 설치는 여기에서 확인할 수 있고, GUI 도구인 SourceTree도 지원한다.
출처 : https://nvie.com/posts/a-successful-git-branching-model/
왜 사용하는가?
DVCS(destributed version control system)와 CVCS(centralized version control system)를 비교할 때, 가장 도드라지는 특징은 버전 관리 이력을 누가 가지고 있느냐일 것이다. DVCS는 그 이름답게 모든 유저가 버전 관리 이력을 가진다. 문제는 그렇다보니 브랜치가 체계적으로 관리가 되지 않아, 버전 관리가 꼬일 수 있다는 것이다. Vincent Driessen은 이런 문제를 해결하기 위해 둘의 장점을 섞어, 하나의 메인 저장소를 두고 병렬적으로 개발이 이뤄지게 모델을 만들었다.
브랜치 소개
브랜치는 메인 브랜치와 서브 브랜치로 나뉜다. 메인 브랜치는 메인 저장소에서 가지고 있으며 무한한 수명을 가진다. 반면, 서브 브랜치는 각 개발자들의 레포에만 존재하는 존재하며, 한정적인 수명을 갖고 있어 나중에는 삭제된다. 메인 브랜치는 master
와 develop
, 서브 브랜치는 feature
, release
, hotfix
가 있다.
master
: 출시 준비 상태를 가진 버전 이력이며, 어떠한 버그도 있지 않아야 한다.develop
:master
브랜치에서 분기돼, 개발자가 개발한 기능들이 추가되는 역동적인 브랜치이다. 일정 시점이 되면master
로 병합된다.feature
:develop
브랜치에서 분기돼 다시feature
로 병합되는 브랜치로, 개발자가 새 기능을 개발할 때 이용한다.release
:develop
브랜치에서 분기돼 다시develop
과master
로 병합되는 브랜치로, 새 버전을 출시 전 자잘한 버그 수정과 배포를 위한 메타 데이터 준비를 위해 쓰인다.hotfix
:master
브랜치에서 분기돼, 다시develop
과master
로 병합되는 브랜치로, 라이브 서비스 중 치명적인 버그 수정 등에 쓰인다.release
브랜치와 비슷하다.
사용 방법
로컬에서 git flow
를 사용하는 법을 소개한다. 전체적으로는 [기능 개발] => [배포] => [핫픽스] 순으로 진행이 된다.
1. git flow init
을 입력해 저장소를 초기화한다.
명령어 후 나오는 질문들은 각각의 브랜치를 만들 때의 접두어를 정하는 것이다.
2. git flow feature start
을 입력해 새 기능 개발을 시작한다.
feature/NewFeature
로 체크아웃된 것을 볼 수 있다.
3. git flow feature finish
를 입력해 새 기능 개발을 끝낸다.
feature/NewFeature
브랜치가 develop
에 병합되고, 사라진 걸 볼 수 있다.
4. git flow release start
를 입력해 배포를 시작한다.
5. git flow release finish
를 입력해 배포를 완료한다.
태그와 커밋 메시지를 입력하면, release
브랜치가 사라지고 develop
과 master
에 병합이 된 걸 볼 수 있다.
6. git flow hotfix start
를 입력해 핫픽스를 시작한다.
7. git flow hotfix finish
를 입력해 핫픽스를 완료한다.
배포 때와 마찬가지로 태그와 커밋 메시지를 입력하면, hotfix
브랜치가 사리지고 develop
과 master
에 병합이 된 걸 볼 수 있다.
여기서는 원격 저장소까지 같이 활용하는 방법은 소개하지 않았다. 그러나 보통 Github의 Pull Request를 이용해 코드 리뷰를 받으므로, 로컬에서 모든 작업을 끝내기 보단 게시하는 일이 많을 것이다. 몇가지 명령어를 더 쓰자면, git flow feature publicsh/pull
을 이용해 원격 저장소로 브랜치를 보내거나 로컬로 가져올 수 있으며, git flow release publish/track
을 이용하면 원격 저장소에 브랜치를 게시하거나 변경 추적을 할 수 있다. Git Flow 도입으로 성공적인 프로젝트 개발을 하시길 바란다.
'Outdated > Column' 카테고리의 다른 글
[Computer Column] 위상정렬(topological sort) (0) | 2019.06.21 |
---|---|
[Computer Column] 다익스트라 알고리즘(dijkstra algorithm) (0) | 2019.05.16 |
[Computer Column] Git - 2 (0) | 2019.03.17 |
[Computer Column] Git - 1 (0) | 2019.03.17 |
[Computer Column] 버전 관리 시스템(VCS, Version Control System) (0) | 2019.03.16 |