git에서 제공하는 branch 기능을 활용한 변경 이력 관리 전략이다.
프로그램으로 생각할 수도 있겠지만 프로그램보다는 협업 중 변경 이력 관리를 더 수월하게 하기 위한 약속, 규칙과 같은 개념이라고 보는 것이 더 맞을 듯하다.
git flow를 사용하기 위해서는 git flow 도구를 설치하면 된다.
설치하지 않고 개념을 이용 혹은 응용해서 사용해도 문제는 없을 듯 하다.
$> brew install git-flow
버전이 여러개 존재하므로 확인하고 원하는 버전을 다운 받으면 된다.
사용하고자 하는 디렉토리에서
$> git flow init
을 통해서 git flow 적용을 한다.
init을 실행하면 각 branch 명을 바꿀 수 있는데, 딱히 변경하지 않고 그냥 사용해도 된다.
git flow에서 사용하는 branch는 총 6개이다.
1. master : release한 것들
2. develop : 잘 동작하는 코드 + 아직 release하지 않은 코드
3. feature : 새 기능을 만들 때 사용 → develop에서 출발
4. release : develop에서 출발 → finish할 경우 master과 develop에 모두 merge
5. hotfix : main에서 출발
6. support : 옛날 프로그램 지원
이 중 주요로 사용하는 branch들은 develop, feature, release, hotfix 정도가 될 듯하다.
새 기능을 만들 때 사용하는 branch로 develop branch에서 출발한다.
일반적으로 개발자의 저장소(local)에만 존재한다.
$> git flow feature start feature명
$> git flow feature finish feature명
develop branch에 merge하고 branch 삭제 후 develop branch로 전환한다.
$> git flow feature publish feature명
publish 명령은 git push와 동일하게 remote에 게시를 하는 역할을 수행하므로, 다른 사용자와 협업을 통해 기능을 개발하여 공유가 필요할 경우 사용한다.
새 버전을 배포할 때 사용하는 branch이다.
master branch에 merge 될 때에는 release branch 명으로 태그가 달리게 되며, 한 번에 하나의 이름만 사용 가능하고 같은 이름을 재사용할 수 없다.
$> git flow release start release명 [BASE]
[BASE] option을 이용하여 시작할 commit을 선택할 수 있으며, BASE에 해당하는 commit은 develop에 존재해야 한다.
$> git flow release publish release명
다른 사용자의 release commit을 위해 publish하는 것이 좋다.
$> git flow release finish release명
명령어를 수행하면,
1. master branch에 병합
2. release를 release 이름으로 tag 달기
3. develop branch에 재병합 + release branch 삭제
순으로 진행된다.
release branch는 develop과 master branch 모두로 merge가 된다.
tag는 같이 push되지 않기 때문에 따로 push해줘야 한다.
$> git push --tag
이미 release한 버전에서 문제가 발생할 경우 해결을 위해 사용하는 branch이다.
master branch에서 출발하며, 한 번에 하나의 이름만 사용 가능하고 같은 이름을 재사용할 수 없다.
git flow hotfix start hotfix버전 [BASE]
master branch에서 표기된 tag로부터 branch 생성하며 [BASE] option을 이용하여 시작점을 선택할 수 있다.
git flow hotfix finish
develop과 master branch로 병합되며, master에는 hotfix 버전으로 태그된다.