[Git] Git-Flow

zziro🦊·2023년 4월 13일
0

안녕하세요 ☀️
여러 문서들을 참고하고 이해한 내용을 정리하는 글입니다.
모든 내용에 대한 피드백 환영입니다.

오늘은 브랜치 전략인 Git-Flow에 대해 알아보겠습니다.


Git-Flow란

Git Branch를 활용하여 수행하는 작업 절차를 의미합니다.

팀 단위로 혼자가 아닌 여러 사람들과 협업을 하는 경우 Branch 운영 규칙을 정하지 않고 Git을 사용하면 Conflict를 만날 확률이 늘어나고, 잘못된 Merge를 하는 경우도 발생할 수 있습니다.

이러한 예외 상황들을 미리 예방하고, 효율적인 협업을 하기 위해 Git flow라는 절차가 생겨난 것으로 보입니다. (예방, 약속은 매우 중요하죠!)


Branches

Git-Flow에는 master, develop, feature, release, hotfix 5가지의 브랜치가 있습니다.
브랜치들은 특정 목적이 있고, 어떤 브랜치에서 분기되어야 하는지, 병합되어야 하는지에 대한 규칙이 적용됩니다.

항상 유지되는 main branches

  • master
    - 정식 배포되는 버전 소스코드를 관리하는 브랜치
  • develop
    - 다음 출시 버전을 개발하는 브랜치

일정 기간만 유지되는 Supporting branches

  • feature
    - 새로운 기능 개발하는 브랜치
    - develop 브랜치에서 분기할 수 있고, develop 브랜치로 병합되어야 한다.
  • release
    - 이번 출시 버전을 준비하는 브랜치
    - develop 브랜치에서 분기할 수 있고, master와 develop 브랜치 모두로 병합되어야 한다.
  • hotfix
    - 출시 버전에서 발생한 버그를 수정하는 브랜치
    - feature, develop과 별개로 현재 버전에서 긴급하게 수정해야 하는 작업을 빠르게 처리하고 반영하기 위한 브랜치
    - develop 브랜치에서 분기할 수 있고, master와 develop 브랜치 모두로 병합되어야 한다.

지금까지 브랜치의 종류와 역할에 대해 살펴보았고, 저는 기본 명령어들을 살펴보기 전에 아래 이미지를 본 것이 많은 도움이 됐습니다.


Git-Flow 기본 명령어

git flow init

  • git-flow를 사용하기 위해서 git 저장소를 git-flow에 맞게 초기화 하는 명령어
  • 어떤 브랜치를 어떤 용도로 사용할 것인지 등을 명시 할 수 있다.
  • 명령어를 실행하면 브랜치들의 이름을 지정할 수 있고, 아래 명령어를 입력하면 기본값으로 이름이 설정된다.
  • 관련 이슈가 있었는데 글의 마지막 부분에 정리해보겠습니다.

git flow init -d

  • 브랜치들 이름을 기본값으로 입력하고 싶다면 -d 옵션 이용
  • 명령어 실행시 기본으로 생성되는 브랜치 master, develop, feature, release, hotfix, support

feature branch

git flow feature start <feature name>

  • 새로운 feature branch 생성
  • 생성과 동시에 checkout

git flow feature finish <feature name>

  • feature branch를 develop branch로 merge & checkout
  • 그리고 merge 한 해당 feature branch 삭제

git flow feature publish <feature name>

  • 원격 저장소에 해당 feature branch를 push

git flow feature track <feature name>

  • 원격 저장소에서 해당 feature branch를 pull
  • git flow feature pull <feature name> 명령어를 쳐보니 아래와 같은 문구가 나오며 에러가 뜹니다.

The command 'git flow feature pull' will be deprecated per version 2.0.0. Use 'git flow feature track' instead.
2.0.0 버전부터는 pull 키워드가 deprecated 되고 track 키워드를 사용하면 된다고 뜨네요

💡 publish, track은 원격 저장소의 기능을 이용하기 위해 주로 사용되는 명령어입니다.

release branch
git flow release start <version>

  • 새로운 release branch 생성

⭐ 이 쪽 아래부터 확실히 정리, 시뮬레이션해봤고 이론과 실제가 달랐음
git flow release finish <version>

  • 이해하는데 조금 혼란이 있었던 부분이다 정리해 보자면!
  • release branch를 master branch에 merge
  • relase 브랜치를 develop branch에 merge & checkout
  • master, develop branch에 merge 한 해당 release 브랜치 삭제

(아래 방법으로 보인다.)

  • release branch를 master branch에 merge 한 후 release 브랜치 삭제
  • master branch를 develop branch에 merge & develop으로 checkout

git flow release publish <version>

  • 원격 저장소에 해당 release branch를 push

git flow release track <version>

  • 원격 저장소에 해당 release branch를 가져오기

⭐ 위의 내용 어느정도 정리하고 아래 내용 살펴보기!!!!!!

⭐요것도 시뮬레이션 해보기 (졸려서 대충 정리함 자세하게 정리하기)
hotfix
git flow hotfix start <version>

  • 새로운 hotfix branch 생성 & checkout

git flow hotfix finish <version>

  • hotfix branch를 master branch로 병함
  • hotfix 버전을 tag로 생성 (git flow init에서 명시한 Version tag prefix 문자열이 release 버전 앞에 추가되어 태그로 생성 된다.))
  • hotfix branch를 develop branch에 merge
  • master, develop branch에 merge 한 해당 hotfix branch 삭제

git push \--tags

  • 새로운 핫픽스가 포함된 master 브랜치를 원격 저장소에 태그와 함께 push

요기 관련 이슈 feature pull 키워드가 track으로 바뀐듯
시뮬레이팅 해보면서 글 정리해야 되는데 주말까지 할 수 있을까? 할 수 있어


마주했던 이슈

(branch rename)해서 분기가 예상대로 움직이지 않았


참고

0개의 댓글