Published on

Git-Flow를 알아보자

대학 연구실에 들어갈때부터 Git이 좋다는 이야기를 많이 듣고 개발을 하려면 Git을 사용해야한다 ! 라는 이야기를 들었습니다.

그래서 무작정 인터넷을 찾아보며 따라 해보았고, "오.... 무료로 업로드 할 수 있는 저장소...."라고 하며 Git이 가진 진정한 힘을 모르고 그렇게 흉내내어 사용했습니다.(현제도 완전 잘다루는건 아니지만)

무작정 Repo를 만들고 "오늘 Upload하고 싶은데?"할때 업로드하며 사용했습니다.

그렇게 스마트하지 않게 Git을 사용해가며 프로젝트를 하나 둘 업로드 하다보니 이런저런 기능을 알게되고, "이렇게 관리하니 이점이 불편하고 다음엔 이렇게 하지말아야겠다."하며 Git을 조금씩 알아가며,

다른 사람의 Repo를 보니 이렇게 구성되어있네? 하며 master, stage, dev 3가지의 브랜치로 나누어 개발하였습니다.

그러곤 최근 무중단 배포, 쿠버네티스, CI/CD에 관심을 가지게 되어, 테크 블로그를 보는 중 하루에 1000번 배포하는 조직 되기라는 글을 읽게되었습니다.

배포에 대한 무서움+번거로움 에 공감을 하며, 배포에 관한 두려움이 없어지는 것은 서비스를 자주 개선하며 새로운 시스템을 많이 적용해볼 수 있는 것, 결국 서비스의 품질과 직관된다는 것을 느꼈습니다.

그러며 읽던 중 Git-Flow란 것을 설명해 주는 것을 보았는데 현제 사용하는 브랜치 관리와 유사한 모델을 알게되었습니다.

Git 브랜칭 모델 중 하나인 Git-Flow를 간단하게 소개드리면

Git-Flow

git-flow-model

Git-Flow를 사용하여 배포하는 시나리오는 다음과 같습니다.

  1. 먼저 develop branch를 base로 feature branch를 생성하고, 해당 branch에서 관련 작업을 진행합니다.
  2. 작업 완료 후 이를 develop branch에 merge 합니다.
  3. 그다음 또다시 develop branch를 base로 하여 release branch를 생성하고 이 branch에서 배포에 필요한 문서 작업 혹은 버그 수정 등을 합니다.
  4. release 준비가 완료된 뒤에 해당 branch를 각각 master와 develop branch에 merge 합니다.

이렇게 하여 브랜치를 효율적으로 히스토리를 남기며 관리 할 수 있고

브랜치 별 명령 가이드는

Feature 분기

  1. 기능 브랜치 생성
# 새 브랜치 "myfeature"로 전환
$ git checkout -b myfeature development
  1. 개발 시 완성된 기능 통합
#development 'develop' 브랜치로 전환
$ git checkout develop
# ea1b82a..05e9557 업데이트
$ git merge --no-ff myfeature
# 브랜치 삭제(기존 05e9557).
$ git branch -d myfeature myfeature
$ git push origin develop

git-flow-model2

릴리스 분기

  1. 릴리스 브랜치 생성
# 새 분기 "release-1.2"로 전환
$ git checkout -b release-1.2 development
# 스크립트 실행
$ ./bump-version.sh 1.2
$ git commit -a -m "Bumped version number to 1.2"
  1. 릴리스 분기 완료하기
# 'master' 브랜치로 전환
$ git checkout master
# Merge
$ git merge --no-ff release-1.2
$ git tag -a 1.2
# 'develop' 브랜치로 전환
$ git checkout development
# Merge
$ git merge --no-ff release-1.2
$ git branch -d release-1.2

핫픽스 분기

  1. 핫픽스 브랜치 생성
# 새 브랜치 "hotfix-1.2.1"로 전환
$ git checkout -b hotfix-1.2.1 master
# 스크립트 실행
$ ./bump-version.sh 1.2.1
$ git commit -a -m "Bumped version number to 1.2.1"
$ git commit -m "심각한 프로덕션 문제 수정"
  1. 핫픽스 분기 완료
# 'master' 브랜치로 전환
$ git checkout master
# Merge
$ git merge --no-ff hotfix-1.2.1
$ git tag -a 1.2.1
# 'develop' 브랜치로 전환
$ git checkout development
# merge
$ git merge --no-ff hotfix-1.2.1
$ git branch -d hotfix-1.2.1

git-flow-model3

이렇게 Git-Flow의 시나리오와 브랜치 생성 및 병합하는 방법을 알았습니다.

개인 프로젝트는 혼자 관리하다 보니 Git 히스토리 관리를 느슨하게 관리 했는데 Git-Flow기반으로 수정하고 확실히 관리 할 계획입니다.

조금 더 자세한 정보는 여기에서 보실 수 있습니다.