git flow 이해하기

gitflow는 git을 이용해 개발하는 방법론이다.

gitflow?

git flow는 5개의 branch를 사용한다.

  • main : 제품을 배포하는 branch이다. 실제 사용자가 사용하는 프로덕트의 코드가 이를 통해 배포된다.
  • release : main으로 보내기 전 검사하고 메시지를 작성하는 branch이다.
  • develop : 개발하는 branch고 개발자들이 이 branch를 기준으로 새로운 branch를 만들어 여기에 merge한다.
  • feature : 단위 기능을 개발하는 branch로 기능 개발이 끝날 경우 develop branch에 합친다.
  • hotfix : 배포후에 긴급히 수정해야할 버그가 발생했을 때 수정하는 branch이다

maindevelop가 메인으로 나머지 브랜치들은 상황에 따라 만들었다 지웠다 한다.

초기 설정

  • repo가 있어야 한다.
    github에서 repo를 만들고 초기 설정을 해준다.
레포를 생성하였다
  • git flow 초기화를 해준다.
    맨 위 두 개의 branch명만 확인하면 된다.
    기본값이 지정되어 있을 경우 엔터를 누르면 된다.
1
git flow init
git flow init
  • develop이 생성되었는지 확인한다.
    현재 gitflow 작업이 끝남에 따라 자동으로 develop 브랜치로 이동하였다.
1
git branch
branch 확인
  • 만들어진 develop을 원격 저장소에 알린다.
    로컬엔 develop가 있지만 원격저장소에선 push하기 전 까지 알 수 없다.
1
git push -u origin develop
branch push

이걸로 maindevelop은 같은 상태가 되었다.

git flow 이용하기.

git flow를 이용한 개발은 다음과 같이 이루어진다.

  1. 기능 개발을 위해선 develop에서 feature/기능명 을 만들고 작업한 후 develop에 merge한다.
  2. 여러 기능들이 각각의 feature/기능명 브랜치에서 작업이 완료되었을 경우 release에 merge하고
    부족한 점을 보완하고 버그를 픽스하고 기술문서를 작성한다.
  3. releasedevelopmain에 merge한다.
  4. main에서 버전 태그를 붙여서 배포한다.

git으로 작업한다면 상당히 복잡하지만 git flow를 통해 작업을 편하게 할 수 있다.
window기준으로 git설치시 git flow도 자동으로 설치된다. macOS의 경우 별도의 설치가 필요하다.

차례대로 진행해보자.

  1. feature/기능명 만들기
    git flow에선 다음의 커맨드를 이용하여 기능개발을 시작할 수 있다.
    나는 README라는 기능명으로 만들었다.
1
git flow feature start '기능명'
기능 개발을 시작하자

생성된 브랜치를 확인하면

1
git branch
새 브랜치가 생성되었다.

feature/'기능명'이 잘 생성된 것을 확인할 수 있다.

  1. 작업하기
    git flow에서 feature 명령어를 사용할 경우 자동으로 기능개발을 위한 branch로 이동한다.

이 상태에서 README를 임의로 수정하였다.

README를 수정했다.
  1. 기능개발 종료하기
    작업이 끝났으면 기능 개발 단위별로 변경사항을 add하고 commit 해준다. push는 하지 않아도 된다.
1
2
3
git status
git add [변경된 파일들]
git commit -m "커밋 메시지"
변경사항을 적용하기

그 후 기능개발을 끝내는 커맨드를 입력한다.
이 커맨드는 developfeature/기능명의 내용을 비교하고 변경점을 적용한 후 merge한다.

merge가 완료되면 현재 branch를 develop으로 옮긴다.
작업이 완료된 후 git branch로 확인하면 feature 기능명이 없어진 걸 확인할 수 있다.
변경사항을 develop 으로 push 해준다.
push전에 pull을 통해 최신상태로 유지해준다.

1
2
3
4
5
git flow feature finish "기능명"
git branch
git status
git pull origin develop
git push origin develop
feature branch가 사라졌다.

릴리즈하기

위 작업을 끝냈다면 develop엔 변경사항이 적용되어 있다.
릴리즈하는 명령어는 다음과 같다.
명령어 입력후 커밋 메시지를 작성할 수 있다.

1
2
git flow release start [version]
git flow release finish [version]
message 작성하기

변경사항을 main branch에도 적용하기

다음 명령어를 통해 main에 tags와 변경 사항등을 적용할 수 있다.
여기까지 했다면 main과 develop은 같은 상태로 기능 추가가 무사히 완료되었다.

1
2
3
git checkout main
git push --tags
git push origin main

느낀점

git flow는 굉장히 좋은 툴 같다.
브랜치를 만들어 작업하고 변경사항을 적용하는 것이 기존의 사용자에게 영향을 주지 않고 기능들을 추가할 수 있어 안정적이라고 생각한다.
gitflow를 이용한 협업과 프로젝트 관리도 간단히 경험해보았는데 상당히 유익한 경험이였다.
이것 또한 조만간 문서로 작성해보아야 겠다.

댓글