Git Flow

GreenBean·2021년 10월 21일
0
post-thumbnail

Git Flow

git-flow란?

  • Git flow는 Vincent Driessen이 만들었으며 규모가 큰 프로젝트 배포를 중점으로 브랜치 관리를 엄격하게 하는 모델
  • 기존의 Git Workflow에서 새로운 개념이나 명령어는 없으며 각각의 브랜치에 특정한 역할을 부여하여 체계적으로 만든 것

설치

  • Git flow를 사용하기 위해서는 사전에 git이 설치되어야 하며 Git flow는 MacOS, Linus, Windows에서 작동
    • 운영체제에 따라 설치하는 방법이 다름
    • OSX 시스템에서는 brew install git-flow을 실행
    • 윈도우는 Git 다운 후 git flow init을 실행할 수 있음

Tip!

  • Git flow를 설치하기 위해서는 우선 git이 설치되어 있어야 함
  • 맥의 경우 HomeBrew를 이용해 쉽게 설치할 수 있지만 몇 가지 추가 작업이 필요
    • brew install git
    • echo "export PATH=/usr/local/bin:$PATH" >> -/.bash_profile
  • 맥을 사용하는 경우 옛날 버전의 git을 기본으로 포함하는 경우가 있기 때문에 새로 설치한 git을 사용할 수 있도록 PATH 환경 변수를 변경해줘야 함

git-flow 사용법

init

  • git-flow를 사용하기 위해서는 초기화가 필요
  • git init을 실행해서 로컬 저장소(Repository)를 초기화하는 것처럼 git flow init을 통해서 브랜치들을 생성해줘야 함
  • 브랜치 관리를 할 로컬 저장소 디렉토리에서 다음 명령을 실행
    • $ git flow init
    • Vincent Driessen이 제안했던 여러 브랜치들의 이름을 지정할 수 있음
      • 그냥 엔터키만 누르면 기본값으로 이름이 정해짐
      • 혹은 자신만의 브랜치 이름을 입력하면 됨
$ git flow init

/Users/user/workspace/test/.git/ 안의 빈 깃 저장소를 다시 초기화했습니다
No branches exist yet. Base branches must be created now.
Branch name for production releases: [master]
Branch name for "next release" development: [develop]

How to name your supporting branch prefixes?
Feature branches? [feature/]
Bugfix branches? [bugfix/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? []
Hooks and filters directory? [/Users/user/workspace/test/.git/hooks]
  • 기본값으로만 입력하고 싶다면 -d 옵션을 이용하면 됨
    • git flow init -d
  • git flow init으로 생성되는 브랜치는 6종류
    • master : 사용자에게 배포되는 Stable 브랜치
    • develop : 다음 릴리즈를 위해 기능들을 모으는 최신 브랜치
    • feature : 특정 기능 개발을 위한 브랜치
    • release : 릴리즈를 위해 버그 픽스(Bug fix)를 모으는 브랜치
    • hotfix : 긴급 버그 픽스를 위한 브랜치
    • support : 버전 호환성 문제를 위한 브랜치
  • Version tag prefix는 master 브랜치로 릴리즈 버전이 병합될 때 생성되는 태그(Tag)프리픽스(Prefix)를 설정할 수 있는 선택 항목
    • 그냥 버전을 태그로 할 수도 있고 'rel/' 같은 문자열을 앞에 넣을 수도 있음
  • Hooks and filters directorygit hook을 위한 디렉토리
    • git 역시 다른 버전 관리 시스템처럼 어떤 이벤트가 생겼을 때 자동으로 특정 스크립트를 실행하도록 할 수 있음
    • 예를 들어 git commit을 수행했을 때 자동으로 git push를 하도록 post-commit 파일에 훅을 저장해 놓을 수 있음

feature

  • 특정 기능을 개발하기 위한 개발 브랜치를 다루기 위한 명령으로 새로운 개발 브랜치를 생성하기 위해서는 다음 명령을 실행하면 됨
    • $ git flow feature start <feature name>
    • 이 명령을 수행하면 develop 브랜치를 기반으로 새로운 기능 개발 브랜치가 생성되며 자동으로 해당 브랜치로 checkout
    • 생성된 브랜치는 feature/<feature name>의 이름을 가짐
    • 혹은 git flow init에서 feature 브랜치 이름으로 입력한 문자열이 feature 대신 들어감
  • 기능 개발 작업이 끝나서 마무리를 할 때에는 다음 명령을 실행
    • $ git flow feature finish <feature name>
    • 이 명령을 수행하면 develop 브랜치로 checkout 한 다음 feature branch의 변경사항을 merge하고 feature branch를 삭제
  • 만약 github 같은 플랫폼을 통해서 여러 개발자들과 함께 작업 하는 경우 원격 저장소에 기능 개발 브랜치를 push 해야할 때는 다음 명령을 수행하면 됨
    • $ git flow feature publish <feature name>
    • 이 명령을 수행하면 origin으로 설정된 원격 저장소로 브랜치를 push
  • 반대로 원격 저장소에서 feature branch를 가져오려면 다음 명령을 수행하면 됨
    • $ git flow feature pull origin <feature name>

release

  • 릴리즈를 위한 브랜치를 생성하기 위해서 다음 명령을 실행하면 됨
    • $ git flow release start <version>
    • 이 명령을 실행하면 develop 브랜치를 기반으로 release/<version> 이라는 브랜치가 생성
    • 마찬가지로 git flow init 수행시 release 브랜치 이름으로 다른 문자열을 입력했으면 그 문자열이 release 대신 설정됨
  • feature와 마찬가지로 다른 사용자와 협업을 위해 원격 저장소로 push 할 수 있음
    • $ git flow release publish <version>
    • 이 명령을 수행하면 origin으로 설정된 원격 저장소로 변경사항을 push
  • 반대로 원격 저장소에서 변경사항을 가져오려면 다음 명령을 수행하면 됨
    • $ git flow release track <version>
    • pull 키워드 대신 track을 사용해야함에 유의
  • 릴리즈 준비 작업이 마무리되었으면 다음 명령을 이용해서 릴리즈를 마무리
    • $ git flow release finish <version>
    • 이 명령을 실행하면 수행되는 단계
      • release 브랜치를 master 브랜치에 병합(merge)
      • release 버전을 태그로 생성
        • 이 때, git flow init 에서 명시한 Version tag prefix 문자열이 release 버전 앞에 추가되어 태그로 생성됨
      • release 브랜치를 develop 브랜치에 병합
      • release 브랜치를 삭제
    • 이후 새로운 릴리즈가 포함된 master 브랜치를 원격 저장소에 태그들과 함께 push하면 됨
      • $ git push --tags

hotfix

  • 긴급 패치를 위한 hotfix 브랜치 생성도 릴리즈 브랜치와 비슷하게 사용할 수 있는데 새로운 핫픽스 브랜치를 생성하려면 다음 명령을 실행하면 됨
    • $ git flow hotfix start <version>
  • 긴급하게 패치할 버그 수정사항들을 이 브랜치에 반영한 다음 finish 명령으로 핫픽스를 마무리
    • $ git flow hotfix finish <version>
    • 이 명령을 실행하면 수행되는 단계
      • hotfix 브랜치를 master 브랜치로 병합
      • hotfix 버전을 태그로 생성
        • 마찬가지로 git flow init 에서 명시한 Version tag prefix 문자열이 hotfix 버전 앞에 추가되어 태그로 생성됨
      • hotfix 브랜치를 develop 브랜치에 병합
      • hotfix 브랜치를 삭제
profile
🌱 Backend-Dev | hwaya2828@gmail.com

0개의 댓글