Skip to content

Git flow

A collection of Git extensions to provide high-level repository operations for Vincent Driessen's branching model.

How to install

$ brew install git-flow
## OR:
$ brew install git-flow-avh

Git Branch 종류 (5가지)

Gitflow Workflow에서는 항상 유지되는 메인 브랜치들(master, develop)과 일정 기간 동안만 유지되는 보조 브랜치들(feature, release, hotfix)을 포함하여 총 5가지의 브랜치를 사용한다.

Master Branch

제품으로 출시될 수 있는 브랜치

배포(Release) 이력을 관리하기 위해 사용. 즉, 배포 가능한 상태만을 관리한다.

Develop Branch

다음 출시 버전을 개발하는 브랜치

기능 개발을 위한 브랜치들을 병합하기 위해 사용. 즉, 모든 기능이 추가되고 버그가 수정되어 배포 가능한 안정적인 상태라면 develop 브랜치를 ‘master’ 브랜치에 병합(merge)한다.

평소에는 이 브랜치를 기반으로 개발을 진행한다.

Feature Branch

기능을 개발하는 브랜치

feature 브랜치는 새로운 기능 개발 및 버그 수정이 필요할 때마다 ‘develop’ 브랜치로부터 분기한다. feature 브랜치에서의 작업은 기본적으로 공유할 필요가 없기 때문에, 자신의 로컬 저장소에서 관리한다.

개발이 완료되면 ‘develop’ 브랜치로 병합(merge)하여 다른 사람들과 공유한다.

기능 브랜치에 대한 고찰

기능 분기는 개발자가 새 기능 작업을 시작할 때 분기를 여는 소스 코드 분기 패턴 입니다. 이 분기의 기능에 대한 모든 작업을 수행하고 기능이 완료되면 변경 사항을 나머지 팀과 통합합니다.

작업하는 동안 그녀는 기능이 완료되면 통합을 줄이기 위해 나머지 팀이 확인한 변경 사항을 자신의 브랜치에 병합할 수 있지만 그 시점까지 변경 사항을 공통 코드베이스에 넣지 않습니다. 이것은 다른 기능 분기에서 작업하는 두 사람이 두 번째 사람이 작업을 공통 코드베이스에 병합할 때까지 작업을 통합하지 않는 결과를 낳습니다.

기능 분기는 인기 있는 기술이며 특히 오픈 소스 개발에 적합합니다. 기능에 대해 수행된 모든 작업이 완료될 때까지 팀 공통 코드베이스에서 멀리 떨어져 있도록 하여 병합과 관련된 모든 위험을 해당 시점까지 연기할 수 있습니다. 그러나 이러한 격리는 문제의 조기 발견을 방지합니다. 더 심각하게는 리팩토링을 방해하기도 합니다. 리팩토링이 없으면 코드베이스의 상태가 심각하게 악화되는 경우가 많습니다.

기능 분기 사용의 결과는 기능을 완료하는 데 걸리는 시간에 따라 크게 달라집니다. 일반적으로 하루나 이틀 만에 기능을 완료하는 팀은 통합 지연 문제를 피할 수 있을 만큼 자주 통합할 수 있습니다. 기능을 완성하는 데 몇 주 또는 몇 달이 걸리는 팀은 이러한 어려움을 더 많이 겪게 됩니다.

Release Branch

이번 출시 버전을 준비하는 브랜치

배포를 위한 전용 브랜치를 사용함으로써 한 팀이 해당 배포를 준비하는 동안 다른 팀은 다음 배포를 위한 기능 개발을 계속할 수 있다. 즉, 딱딱 끊어지는 개발 단계를 정의하기에 아주 좋다.

Hotfix Branch

출시 버전에서 발생한 버그를 수정 하는 브랜치

배포한 버전에 긴급하게 수정을 해야 할 필요가 있을 경우, ‘master’ 브랜치에서 분기하는 브랜치이다. ‘develop’ 브랜치에서 문제가 되는 부분을 수정하여 배포 가능한 버전을 만들기에는 시간도 많이 소요되고 안정성을 보장하기도 어려우므로 바로 배포가 가능한 ‘master’ 브랜치에서 직접 브랜치를 만들어 필요한 부분만을 수정한 후 다시 ‘master’브랜치에 병합하여 이를 배포해야 하는 것이다.

사용방법

초기화
gitflow를 사용하려면 다음과 같이 저장소를 초기화 해야 한다. (잘 모르면 그냥 엔터 연발)

:

$ git flow init

Which branch should be used for bringing forth production releases?
   - develop
   - master
   - release/1.0.0
Branch name for production releases: [master]

Which branch should be used for integration of the "next release"?
   - develop
   - release/1.0.0
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? [] v
Hooks and filters directory? [/Users/user/Project/c2api/.git/hooks]
새로운 기능(Feature) 시작.

:

$ git flow feature start {FEATURE_NAME}
기능(Feature) 완료.

:

$ git flow feature finish {FEATURE_NAME}
Publish a feature (It uses to collaborate with other people).

:

$ git flow feature publish {FEATURE_NAME}
Getting a published feature.

:

$ git flow feature pull origin {FEATURE_NAME}
Getting a help message

:

$ git flow
$ git flow feature help
$ git flow feature delete -h

Creating feature/release/hotfix/support branches

To list/start/finish feature branches

git flow feature
git flow feature start <name> [<base>]
git flow feature finish <name>

For feature branches, the <base> arg must be a commit on develop.

To push/pull a feature branch to the remote repository

git flow feature publish <name>
git flow feature pull <remote> <name>

To list/start/finish release branches

git flow release
git flow release start <release> [<base>]
git flow release finish <release>

For release branches, the <base> arg must be a commit on develop.

To list/start/finish hotfix branches

git flow hotfix
git flow hotfix start <release> [<base>]
git flow hotfix finish <release>

For hotfix branches, the <base> arg must be a commit on master.

To list/start support branches

git flow support
git flow support start <release> <base>

For support branches, the <base> arg must be a commit on master.

Troubleshooting

No such ref was fetched

현재 사용중인 feature/branch 가 원격 저장소에서 제거되었을 경우 git pull을 사용할 경우 다음과 같은 에러가 발생한다.

$ git pull --all
Fetching origin
Your configuration specifies to merge with the ref 'refs/heads/feature/rmtask'
from the remote, but no such ref was fetched.

이 때, 저장소와 동일한 branch를 유지하고 싶다면 git flow feature delete 명령을 사용하면 된다.

$ git flow feature delete -f rmtask
Deleted branch feature/rmtask (was c2e8c9c).

Summary of actions:
- Feature branch 'feature/rmtask' has been deleted.
- You are now on branch 'develop'

이후, 남아있는 원격 브랜치는 아래 명령으로 정리한다.

$ git remote prune origin

Flows

See also

Favorite site