본문 바로가기
EXTERNAL ACTIVITY/Code Presso -웹개발 트랙 체험단-

<코드 프레소 웹 개발 트랙> 실무자가 알려주는 Git 활용한 프로젝트 관리[2]

by jaeaemin 2022. 1. 15.

 

브랜치 활용

 

Branch

브랜치는 왜 필요할까?
 소프트웨어가 지속적으로 변경되기 때문이다.
 개발 진행/완료 시점에서 발생하는 이슈를 해결하거나 개선하기 위해 생성된다.
 branch의 활용 전략은 개인/조직마다 다를 수 있다.

 

 

Branch 활용 전략

  • 브랜치 활용 전략은 소스코드의 효율적 관리를 위해서 이루어져야한다.
  • 프로젝트의 모든 리스크를 최소화하는 방향으로 이루어져야한다.
  • 일관되고 생산적인 방식으로 조직에 맞게 프로세스화 시켜야한다.

 

Branch 활용 전략 모델 

  1. feature별 branch
  2. 개발자별 branch
  3. 스프린트 주기별 branch ( 스크럼 )
  4. 사내 검증 단계별 branch
  5. 브랜치  활용 전략 모델(방법론) : GitFlow

GitFlow : 변경점을 반영하여 효율적으로 branch를 통해 관리하도록한 process

기업에서는 GitFlow를 기반으로 제작/개선하여서 사용한다.

https://nvie.com/posts/a-successful-git-branching-model

 

A successful Git branching model

In this post I present a Git branching strategy for developing and releasing software as I’ve used it in many of my projects, and which has turned out to be very successful.

nvie.com

 

 

 

 

 

 

Git Flow

GitFlow 모델은 총 5개의 브랜치를 활용하여 변경점을 관리하는 모델이다.

이 5가지의 브랜치 장점을 살려서 커스텀마이징하여 개인/기업별에 맞춰서 모델을 구성 가능하다.

  • master branch
  • develop branch
  • feature branch
  • release branch
  • hotfix branch

 

(1) master branch

실제 고객에게 릴리즈되는 브랜치이다. (production)

모든 변경사항은 결국 master로 최종 반영된다.

 

(2) develop branch

실제 개발의 중심이 되는 브랜치로 다음 배포할 기능을 개발하는 브랜치이다.

기능 추가, 버그 수정 등으로 고객에게 배포 가능한 수준이되면 master branch에 반영시킨다.

 

(3) feature branch

기능을 개발하는 브랜치이다.

develop 브랜치로부터 분기되어서 사용된다. 

기능 개발이 완료되거나 스프린트 주기가 종료되면 develop으로 merge후 삭제한다.

 

(4) release branch

배포를 준비하는 브랜치이다. (검증, 이슈 수정 등)

release branch에서 배포 가능한 상태로 master branch로 병합한다.

배포 준비가 완료되면, 최종 master로 병합하고 tag를 명시한다.

devlop branch -> release branch -> master branch

 

(5) hotfixs branch

배포한 버전에서 긴급하게 수정이 필요한 장애/버그에 대응하는 브랜치이다.

hotfixs는 master에서 분기되고 이슈가 수정되면 master, develop에 반영되어야 한다.

 

 

 

 

 

Git flow 모델 활용 

 

Git-flow 모델 설치

$ git flow init
$ git branch 
   * develop
     master
  • git init은 git의 로컬 저장소를 생성하는 것이지만 git flow init은 gitflow의 모델을 생성하는 것으로, 위에서 언급한 각 branch들을 생성해준다.
  • git branch 명령어를 통해 확인하면 master브랜치와 develop브랸치가 생성되고 develop에 체크아웃 된 걸 확인 할 수 있다.

 

 

git-flow 기능 개발 

 

- 새로운 feature 브랜치 생성 -

 

$ git flow feature start 개발할 기능명]
(base)   gitflow_test git:(develop) git flow feature start login 
새로 만든 'feature/login' 브랜치로 전환합니다


Summary of actions:
- A new branch 'feature/login' was created, based on 'develop'
- You are now on branch 'feature/login'


Now, start committing on your feature. When done, use:


     git flow feature finish login


(base)   gitflow_test git:(feature/login) vi LoginService.java
(base)   gitflow_test git:(feature/login) git add LoginService.java 
(base)   gitflow_test git:(feature/login) git commit -m "Commit#1 on feature/login branch"
[feature/login 9b13826] Commit#1 on feature/login branch
 1 file changed, 1 insertion(+)
 create mode 100644 LoginService.java

 

현재 상황은 git-flow 상에서 새로운 feature를 개발하기 위해 새로운 feature/login 브랜치를 만들고 커밋을 할당했다.

도식화하면  다음과 같을 것이다.

다른 브랜치에는 초기 init 커밋 , login 브랜치에만 새로운 커밋이 생성되었다.

 

 

 

 

- feature 브랜치 반영 -

 

$ git flow feature finish [개발 완료한 기능명]
(base)   gitflow_test git:(feature/login) git flow feature finish login
'develop' 브랜치로 전환합니다
업데이트 중 4d48581..9b13826
Fast-forward
 LoginService.java | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 LoginService.java
feature/login 브랜치 삭제 (과거 9b13826).


Summary of actions:
- The feature branch 'feature/login' was merged into 'develop'
- Feature branch 'feature/login' has been locally deleted
- You are now on branch 'develop'

 

마찬가지로 도식화하여 흐름을 나타내면 아래와 같다.

이후 feature/login은 삭제된다.'

 

 

 

 

Git-flow 릴리즈

 

- release branch 생성 -

$ git flow release start [버전명]

 

(base)   gitflow_test git:(develop)  git flow release start 1.0
새로 만든 'release/1.0' 브랜치로 전환합니다


Summary of actions:
- A new branch 'release/1.0' was created, based on 'develop'
- You are now on branch 'release/1.0'


Follow-up actions:
- Bump the version number now!
- Start committing last-minute fixes in preparing your release
- When done, run:


     git flow release finish '1.0'


(base)   gitflow_test git:(release/1.0)  

 release branch가 생성되고 자동으로 check out 되는 것을 확인 할 수 있다.

 release branch 에서도 위와 마찬가지로 새로운 커밋을 생성한 뒤 

 release branch는 고객의 요구사항을 반영한 뒤 master 브랜치에 태그와 함께 반영시켜야 한다.

 

 

 

- release 반영/종료 -

$ git flow release finish [버전명]

이후 커밋메시지와 태그 메시지를 입력하라는 창이 생성되고 ,  커밋메시지와 태그 메시지를 입력 할 수 있다.

그 뒤 master가 아닌 develop에도 병합되기 때문에 새로운 커밋 메시지를 입력하도록 창이 생성된다.

 

 

 

 

 

 

 

Git-flow 핫픽스

 - hot-fix 브랜치 생성 -

$git flow hotfix start issue#1
(base)   gitflow_test git:(develop) git flow hotfix start 1.2.1
새로 만든 'hotfix/1.2.1' 브랜치로 전환합니다


Summary of actions:
- A new branch 'hotfix/1.2.1' was created, based on 'master'
- You are now on branch 'hotfix/1.2.1'


Follow-up actions:
- Start committing your hot fixes
- Bump the version number now!
- When done, run:


     git flow hotfix finish '1.2.1'


(base)   gitflow_test git:(hotfix/1.2.1)  

 

 

 

 - hot-fix 브랜치 반영 -

$ git flow hotfix finish 1.2.1

 - 이후 hotfix 브랜치는 release 브랜치와 마찬가지로 master, develop 두 브랜치에 병합되게 된다.

 - 각 커밋 메시지와 태그를 생성 할 수 있다.

 

 



- 코드프레소  Java  웹  개발  체험단  활동  중    
- 코드프레소  웹개발 트랙의 "실무자가 알려주는 Git을 활용한 프로젝트 관리" 내용입니다.
- 코드프레소  URL: https://www.codepresso.kr/ 

 

프리미엄 IT 교육 서비스 - 코드프레소

 

www.codepresso.kr

 

반응형