Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

[조사 미션 수행] Git Flow & Github Flow #3

Open
SeonHwan-Kim opened this issue Sep 2, 2022 · 0 comments
Open

[조사 미션 수행] Git Flow & Github Flow #3

SeonHwan-Kim opened this issue Sep 2, 2022 · 0 comments

Comments

@SeonHwan-Kim
Copy link
Collaborator

Git Flow

  • feature > develop > release > hotfix > master
  • 왼쪽으로 갈수록 포괄적인 가지, master branch를 병합할 경우 그 왼쪽에 있는 가지들에 있는 커밋들도 병합되도록 한다.

구조 및 흐름

  • 가장 많이 사용되는 가지는 develop, master이다.
  • 나머지는 사용하지 않을 경우 브랜치를 삭제해 깔끔하게 유지하고 필요할 때 다시 만들어준다.
  • 대부분의 작업은 develop에서 취합하고, 확실하게 변동사항이 없을 때 master로 병합한다.
  • master가 아닌 가지들은 항상 master의 변동사항을 주시해야한다.

Feature branch

  • 가지가 뻗어나오는 곳 : develop
  • 뻗어나간 가지가 다시 합쳐지는 곳 : develop
  • 이름 설정 : master, develop, release-*, hotfix-*를 제외하면 자유로움
  • 새로운 기능을 추가할 때 사용
  • origin에는 반영하지 않고 주로 개발자의 repo에만 존재

Release branch

  • 가지가 뻗어나오는 곳 : develop
  • 뻗어나간 가지가 다시 합쳐지는 곳 : develop, master
  • 이름 설정 : release-*
  • 새로운 제품을 배포하고자 할 때 사용하는 가지
  • 여태까지 개발한 기능들을 develop 가지에서 종합해 release 가지를 생성하고 develop에서는 다음번 배포를 위한 새로운 기능 개발에 주력하도록 만들 수 있다.
  • release는 디버그에 대한 부분만 커밋하도록 하며, 완전히 배포에 대한 준비가 완료되었다고 판단되었을 때 master로의 병합을 진행한다.
  • 병합을 끝내고 난 뒤에는 tag명령을 통해 배포 버전에 대한 기록을 남긴다. (추가적으로 병합한 사람에 대한 정보를 남기고자 할 때는 tag명령에 더해 -s, -u 옵션을 추가한다.)
  • master로의 병합이 완료되었다면 develop로의 병합도 수행하며 이 때는 release에서 수정된 내용들이 develop에 반영된다.

Hotfix branch

  • 가지가 뻗어나오는 곳 : master
  • 뻗어나간 가지가 다시 합쳐지는 곳 : develop, master
  • 이름 설정 : hotfix-*
  • 제품에서 버그가 발생했을 경우에는 처리를 위해 이 가지로 해당 정보들을 모아준다. 버그에 대한 수정이 완료된 후에는 develop, master에 곧장 반영해주며 tag를 통해 관련 정보를 기록해둔다.
  • release 가지가 생성되어 관리되고 있는 상태라면 해당 가지에 hotfix정보를 병합시켜 다음번 배포 시 반영이 정상적으로 이루어질 수 있도록 해준다.
  • Hotfix는 보통 다급하게 버그를 고치기 위해 생성되는 가지이기 때문에 버그를 해결하면 보통 제거하는 일회성 가지다.

장점

  • 명령어가 명료하게 나와있음
  • 거의 모든 에디터들과 IDE들에 플러그인으로서 이미 존재하고 있다.

단점

  • branch가 뻗어나가는 구조가 복잡하여 관리의 어려움이 있다.
  • 몇몇 branch는 쓰이지 않을 경우가 있으며 또한 애매한 위치의 branch가 존재

Github Flow

  • Git Flow 도 좋은 방식이지만 Github에 적용하기에는 복잡하여 새로 만들어진 깃 관리 방식
  • 자동화 개념이 들어가 있다는 특징
  • Git flow에 비해 흐름이 단순해짐에 따라 그 규칙도 단순해짐
  • 기본적으로 master branch에 대한 규칙만 정확하게 정립되어 있으면 다른 가지들에 대해 특별히 관여하지 않고 pull request 사용을 권장

특징

  • release branch가 명확하게 구분되지 않은 시스템에서의 사용이 유용하다.
  • Github 자체의 서비스 특성상 배포의 개념이 없는 시스템으로 되어있기 때문에 이 flow가 유용
  • 웹 서비스들에 배포의 개념이 없어지고 있는 추세이기 때문에 앞으로도 Git flow에 비해 사용하기에 더 수월할 것이다.
  • hotfix와 가장 작은 기능을 구분하지 않는다. 대신 구분하는 것은 우선 순위가 어떤 것이 더 높은지에 대한 것이다.

사용법

  1. master branch는 언제든지 배포 가능
    • master branch는 항상 최신의 상태를 유지하며 stable 상태로 product에 배포
    • 엄격하게 규칙 지정하여 사용
  2. 새로운 일을 시작하고자 가지를 master에서 분화하면 무슨 일을 수행하는지 명확히 작성
    • featuredevelop 가지가 존재하지 않는다.
    • 브랜치 이름은 자세히 어떤 일을 맡고있는지에 대해 작성하는 것 권장
  3. 원격 서버에 수시로 push 해준다.
    • Git Flow와 가장 차별화된 방식, 원격서버에 자신이 하고 있는 일들을 지속적으로 업로드 해 팀원들이 수월하게 확인 가능하도록 만든다.
    • 작업하던 내용이 다 날아가도 다시 작업내용 백업해 프로젝트 진행 가능
  4. 피드백이나 도움이 필요할 때 PR을 생성한다.
    • PR은 코드 리뷰를 도와주는 시스템
    • PR을 통해 자신의 코드를 공유하고 피드백을 받을 수 있고, 병합 준비가 완료되면 master branch로 작업 내용을 반영하도록 할 수 있다.
  5. 기능에 대한 리뷰와 결재가 끝난 후 master로 병합한다.
    • 모든 작업이 끝나고 product에 바로 반영이 되므로 프로젝트를 하는 사람들과 충분한 논의를 한 후 master branch에 반영한다.
  6. master로 병합 후 push되었을 때는 즉시 배포 작업을 수행한다.
    • master branch로 병합이 일어나면 hubot을 이용해 자동으로 배포가 이루어지도록 설정해야한다.

장점

  • branch 구성 전략이 단순하다.
  • 처음 git에 대해 접근하는 사람에게 좋은 시스템이 되어준다.
  • Github 사이트에서 제공해주는 기능을 모두 사용해 작업을 진행하게 도와준다.
  • 코드리뷰를 자연스럽게 할 수 있다.
  • CI가 필수적이며 또한 배포를 자동으로 진행할 수 있다.

단점

  • CI와 배포 자동화가 되어있지 않은 시스템에서는 사람이 해당 업무를 진행해야한다.
  • 프로젝트 규모가 커지면 관리하기 어려워진다.

출처
Git Flow와 GitHub Flow의 이해

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant