PostIT

[Git/GitFlow] Git Flow 시작하기 본문

Git & Git Hub

[Git/GitFlow] Git Flow 시작하기

shun10114 2017. 7. 20. 20:38

# [Git/GitFlow] Git Flow 시작하기

### What is Git Flow?

Vincent Driessen의 Branching Model은 개발자가 더 큰 소프트웨어 프로젝트에서 feature, hotfixes 및 releases를 추적하는 데 도움이되는 git branch 및 release management 전략입니다. 이 Work Flow에는 입력하고 기억할 명령이 많으므로 git 하위 명령의 git-flow 라이브러리가있어 흐름의 일부분을 자동화하여 작업을 훨씬 쉽게 할 수 있습니다.




- master : 최종 릴리즈한 안정된 버전
- develop : 다음 릴리즈를 위한 개발 중인 최신 빌드

위 두 브랜치는 계속 존재한다.
아래 브랜치는 필요할 때 생성했다 master 나 develop 브랜치로 머지하고 삭제하는,
이벤트 성격의 브랜치이다.

- feature : 특정한 기능을 위한 브랜치
    - develop 브랜치에서부터 가져오며, 다시 develop 브랜치로 머지한다.
    - develop 브랜치 이외의 브랜치와는 머지하지 않는다.
    - 일반적으로 개발자의 로컬에서만 유지하고 origin 에 푸시하지 않는다.
    - develop 브랜치에 머지하면 feature 브랜치는 삭제한다.

- release : 릴리즈 점검을 위한 브랜치
    - develop 브랜치에서 가져오며, develop 과 master 브랜치로 머지한다.
    - release-* 형태로 이름을 짓는다. 예를 들어, 다음 릴리즈 버전이 1.2라면, release-1.2 라고 한다.
    - 브랜치를 생성한 후, 소스 코드 내에 버전과 관련된 값을 수정하고 커밋한다.
    - 다음 릴리즈까지 개발이 최종 완료되었다고 판단하는 시점에서 브랜치를 생성한다.
    - 릴리즈 대상이 되는 feature 는 미리 develop에 머지되어 있어야 하고,
      다음에 릴리즈할 feature 라면 develop에 머지되어 있으면 안된다.
    - release 브랜치를 생성한 이후의 버그 픽스는, develop 이 아닌 release 브랜치에서 진행한다.
    - 릴리즈가 모두 준비되었다고 생각하면, release 브랜치를 master 에 머지한다.
    - master 브랜치에서 해당 버전으로 태그를 생성한다.
    - release 브랜치에서 버그 픽스한 것들을 develop 브랜치로 머지한다.
    - release 가 종료되면, release 브랜치를 삭제한다.

- hotfix : 긴급 버그 픽스를 위한 브랜치
    - master 에서 가져오며, master 와 develop 브랜치로 머지한다.
    - hotfix-* 형태로 이름을 짓는다.
    - release 브랜치와 사용 방법은 동일하지만, 예상치 못한 긴급 버그 수정을 위해 사용한다.
    - release 와 마찬가지로, 소스 코드 내 버전 정보를 업데이트 한다.
    - 작업이 완료되면, master 에 머지하고 버전을 태그로 남긴다.
    - 수정 사항을 develop 브랜치로 머지한다.
      만약, release 브랜치가 이미 존재하면, develop이 아닌 release 브랜치로 머지한다.
    - 핫픽스가 종료되면 브랜치를 삭제한다.


몇 가지 주의할 점은 다음과 같다.
  - 브랜치를 머지할 때 --no-ff 옵션을 쓴다.
      fast forward 머징을 하지 않고, 머지 커밋을 생성하겠다는 의미다.
      머징 히스토리를 유지하기 위함이다.
  - 가능하다면 버전 정보는 소스 코드 내에서 직접 작성하지 않는다.
      버전과 관련된 정보를 찾아 현재 버전으로 업데이트하는 스크립트를 작성하자.

### 1. How to Install

Homebrew
```
$ brew install git-flow-avh
```
Linux
```
$ apt-get install git-flow
```

### 2. Getting started

#### 1) Git flow init
```
$ git flow init
```
몇몇 질문에 대답해서 브랜치의 명명규칙을 정합니다. 기본 값을 사용하기를 권장합니다.


#### 2) Git flow feature start 
```
$ git flow feature start [MYFEATURE]
ex) $ git flow feature start shooney
```
Summary of actions:
- A new branch 'feature/shooney' was created, based on 'develop'
- You are now on branch 'feature/shooney'

Now, start committing on your feature. When done, use:
- git flow feature finish shooney

1, 새 기능의 개발은 'develop' Branch에서 시작합니다.
2. 'develop'에 기반한 MYFEATURE Branch를 생성하고 그 브랜치로 전환합니다.


#### 3) Git flow feature finish
```
$ git flow feature finish [MYFEATURE]
ex) $ git flow feature finish shooney
```
Switched to branch 'develop'
Already up-to-date.
Deleted branch feature/shooney (was 9af0634).

Summary of actions:
- The feature branch 'feature/shooney' was merged into 'develop'
- Feature branch 'feature/shooney' has been locally deleted
- You are now on branch 'develop'
1. MYFEATURE Branch를 'develop' Branch에 Merge합니다. 
2. MYFEATURE Branch는 삭제되고 'develop' Branch로 전환됩니다.


#### 4) Git flow feature publish
기능을 공동으로 개발하고 있다면, 기능을 원격 서버에 게시하여 다른 사용자들도 사용할 수 있게 합니다.
```
git flow feature publish [MYFEATURE]
ex) $ git flow feature publish shooney
```


#### 5) Git flow feature track
다른 사용자가 게시한 기능을 가져옵니다.
```
git flow feature track MYFEATURE
$ git flow feature track shooney
```

### 더 보기

### 출처 

https://danielkummer.github.io/git-flow-cheatsheet/index.ko_KR.html

'Git & Git Hub' 카테고리의 다른 글

[Git/Config/Eclipse] 깃 설정 변경하기  (0) 2017.02.20
Comments