Git

Git Flow

5_ssssseung 2021. 9. 9. 02:45

Git 개요

많은 채용공고에서 Git 등의 분산 버전 관리 이용에 능숙한 사람을 찾는다.

Git을 사용할 때, 개인이냐 팀이냐에 따라 목적이 달라진다.

  • 싱글 플레이
    • 코드 관리 / 백업
  • 팀 플레이
    • 협업 Workflow
    • 서비스/제품 이력관리
    • 커밋 규칙과 정확한 메세지
    • 코드 리뷰

 

Git 구조 및 명령어

위의 그림대로 로컬과 원격 레포지토리를 git 명령어를 통해 관리한다.

cheat-sheet라는 키워드로 검색하면 명령어와 관련된 이미지 파일들을 찾을 수 있다.

Docker, Linux 등의 명령어도 위와 같이 존재하니 잘 모른다면 검색해서 하나 책상에 붙여놓자!

 

Git Branch

버전 관리에서 가장 중요한 것은 '커밋'이다.

각 업무에 대한 이름으로 Branch를 만들고 작업하고 정리하여 커밋을 보낸다.

 

이 때, Branch란 무엇일까?

코드관리를 위해서 가지처럼 분기되는 흐름을 만들어내는 용도이다.

업무에 따라서 Branch의 이름으로 작업하고 정리하는 방식이다.

 

Branch는 가지보다는 '강'으로 이해하면 더 쉽다.

큰 강에는 작은 지류들이 뻗어 나올 것이고, 해당 지류는 다시 큰 강으로 합쳐질 것이다.

큰 강이란 'master' 브랜치와 같은 중심이 되는 공간이고, 각 업무를 진행하기 위해서 지류로 나왔다가 다시 merge 과정을 통해 'master'(develop) 브랜치로 들어간다.

 

Git source tree

위와 같이 어떤 브랜치가 있고, 어느 시점에 병합되는지 보기 좋게 시각화해주는 툴, 플러그인이 존재한다.

좌: vscode git graph plugin / 우: source tree

Git을 잘 다루기 위해서 Commit tree를 잘 읽을 줄 알아야한다.

앞서 말한 바와 같이 이슈가 발생했다면, 어느 시점인지 금방 찾아낼 수 있다면, 효율은 극대화 될 것이다.

또한 HEAD를 바꿔가며 과거 시점으로 돌아가서 해당시점의 코드를 살펴보면서, 일련의 작업을 할 수 있다.

(항상 협업할 때의 Git 관리는 충돌에 유의해야 한다!)

 

Git Flow

Git Flow

  • 왼쪽의 Master, Release 등은 브랜치의 종류, 이름이다. 상단 브랜치일수록 소스코드의 안정화 정도라고도 볼 수 있다.
    • (상단 브랜치에서 이슈가 발생한다면 그만큼의 수고, 비용이 많이 들 것이다 ㅠㅠ)
  • 가로축은 시간의 흐름에 따라 커밋이 쌓여나간다고 볼 수 있다.

 

  • Master 브랜치 위에는 고객들이 존재할 것이다.
    • 즉 Master 브랜치로 작동되는 코드가 상품화되어 고객에게 보여진다.
  • Feature 브랜치 아래에는 개발자들이 존재할 것이다.
    • 개발단계의 각 기능들이며, 에러 이슈가 많이 발생하기도 할 것이다.
  • 기능 단위별로 개발된 브랜치(Feature)는 Develop브랜치에 모인다.
    • 기능들을 모아놓고 일정 기능 구현이 완료가 되면 Release 브랜치로 보낸다.
  • Release 브랜치는 QA 등의 업무가 이뤄지는 곳이다.
    • 스테이징 서버, 테스트용 서버에 올라가서 지금 이 기능들이 모두 정상 작동하는지 확인하는 브랜치라고 생각하면된다.
  • 그림에는 나와있지 않지만, 중간마다 버그, 이슈가 발생할 수 있다.
    • 이를 해결하기 위한 브랜치도 존재한다. 예) Bugfix, Hotfix
    • 해당 브랜치와 플로우는 현업마다 사용하는 방식이 다른것같다..
  • 테스트가 완료되었고 문제가 없다면 Master 서버로 넘어간다.
    • 이제 고객들에게 해당 서비스가 보여지는 것이다.

Git Flow 시작하기

$ git flow init
Initialized empty Git repository in ~/project/.git/
No branches exist yet. Base branches must be created now.
Branch name for production releases: [main]
Branch name for "next release" development: [develop]


How to name your supporting branch prefixes?
Feature branches? [feature/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? []

위와 같은 명령어로 git flow branch를 적용할 수 있다.

아래에는 어떤 브랜치를 사용할지에 대한 옵션인데, 사용목적에 맞게 구성하면 된다.

 

자세한 사용법에 대해서는 아래 링크를 참고하면 된다.

https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow

 

Gitflow Workflow | Atlassian Git Tutorial

A deep dive into the Gitflow Workflow. Learn if this Git workflow is right for you and your team with this comprehensive tutorial.

www.atlassian.com

 

TBD vs GitFlow

Trunk based

브랜치를 관리하는 다른 모델이 있다.

트렁크 기반 Trunk based라고 하며 모든 개발자들이 Master브랜치를 기반으로 개발을 진행한다.

모든 Feature 브랜치는 가능한 짧은 주기로 가져가며 항상 Master브랜치를 fresh하게 유지한다.

해당 관리 모델은 능숙한 개발자들이 하루에도 수십번 배포하는 과정의 비즈니스에서 자주 사용한다고 한다.

'Git' 카테고리의 다른 글

대학교 메일 계정 GitHub pro 인증하기  (0) 2021.03.16
Git 기초 명령어  (0) 2021.01.21
Git-LFS github에 대용량 파일 push하기  (0) 2020.09.17