Today I Learned

브랜치 전략, git flow

리꾸엘메 2022. 7. 6. 22:27

프로젝트 협업 시 각각의 개발자는 원격저장소에 저장된 프로젝트 파일을 개인이 사용하는 로컬저장소에 받아 작업한다.

새로운 작업내용이 있을 때 원격저장소의 소스코드에 작업내용을 추가하고 다시 로컬저장소에서 작업한다. 

git은 위의 과정에서 프로젝트의 버전을 관리하기 위한 프로그램으로 명령어로 쉽게 사용할 수 있다.

git과 함께 사용되는 github은 프로젝트의 전체 소스코드를 저장할 수 있는 원격저장소를 제공하고

기존의 소스코드나 새로 추가할 내용을 좀 더 가시적으로 제공하는 웹서비스이다.

 

처음 git과 github를 접했을 때는 레포지토리를 생성하고, 로컬저장소와 연결해 변경사항이 있을 때 add, commit, push만을 사용해 프로젝트를 관리했다. 

하지만 협업을 하고 프로젝트가 복잡해질수록 버전관리 또한 중요한 부분이 되었고, 이런 문제를 해결할 수 있는 방법을 찾게 되었다. 그 과정에서 몇가지 명령어를 새로 익히게 되었고, git-flow에 대해서도 공부할 수 있었다.

  

 

 


git-flow는 버전관리 중 발생할 수 있는 문제를 최소화하기 위한 전략으로 브랜치를 기반으로 한 버전관리 방식이다.

이외에도 github-flow, gitlab-flow 등의 브랜치 전략이 있지만, git-flow가 가장 체계적이고 또 많이 사용하는 방식인 것 같다.

 

git-flow 방식에서는 브랜치를 개발 단계에 따라 5종류로 나누어, 각 단계에 맞는 브랜치를 사용한다.

우선 메인 브랜치로 master, develop 두 종류가 있다.

메인 브랜치는 항상 유지하는 브랜치로 보조 브랜치의 결과를 반영하는 브랜치이다. 

- master: 실제 서비스를 배포하기 위한 브랜치

- develop: 개발 과정에서 메인이 되는 브랜치

 

보조 브랜치에는 feature, release, hotfix 세 종류가 있다. 

실제 기능의 개발, 수정은 보조 브랜치에서 이루어지며, 필요에 따라 생성하거나 폐기하는 브랜치이다.

 - feature: 새로운 기능을 개발할 때 사용하는 브랜치로 develop 브랜치에서부터 생성해 작업한다.

- release: 배포하기 위해 develop에서 master로 넘어가기 전 확인되는 오류 또는 수정 사항을 반영하는 브랜치이다. 변경 사항은 master, develop 양 쪽에 반영한다. 

- hotfix: master에서 확인되는 오류 또는 수정 사항을 반영하는 브랜치로 release와 마찬가지로 변경 사항은 master, develop 양 쪽에 반영한다.

 

처음 개념을 정리할 땐 복잡해 보였지만, 결국 개발용 메인 브랜치와 배포용 메인 브랜치가 있고

실제 작업은 따로 브랜치를 만들어 결과만 메인 브랜치에 반영한다는 이야기였다. 그림에서 그 내용을 잘 설명하고 있다.

git-flow를 공부하다 보니 개발 자체도 중요하지만 리액트 폴더구조나 네이밍 컨벤션, ESLint, Prettier 등 여러 사람이 함께 작업할 때 발생할 수 있는 차이를 방지하기 위한 개념이 많은 것 같다. 

나 또한 항해에서 팀 프로젝트를 경험하면서 이런 부분의 필요성을 많이 공감할 수 있었다.

 


1. 브랜치 생성

- 기능을 개발하거나 수정 사항이 있을 때 메인브랜치에서 새로 브랜치를 만들어 작업한다.

- git checkout -b 브랜치이름: 브랜치를 생성하고 바로 해당 브랜치로 이동하는 명령어이다.

2. pull request 진행

- 브랜치에서 작업을 완료한 후 메인브랜치로 반영하기 위한 과정이다. 

- add, commit, push를 차례대로 거치면 github에서 새로운 pull request가 생긴다. 

- 관리자가 요청을 확인하고 merge까지 완료한 후 해당 브랜치는 삭제한다.

3. 로컬 저장소에 수정사항 반영

- git pull: 내 로컬 저장소의 메인 브랜치에도 최신 내용을 반영한다. 

- git branch -d 브랜치이름: 로컬 저장소에는 기능 개발에 사용한 브랜치가 남아 있기 때문에 삭제한다.

4. 실수로 메인브랜치에 변경된 코드를 commit 했을 때

- git reset: commit한 내용을 취소한다. 취소할 때는 이 방법을 사용한다.

- git revert: commit 내용은 남기고, 이전 사항으로 돌아가며 새로운 commit이 생성된다. 아직 왜 필요한지 모르겠다.

 


 

https://techblog.woowahan.com/2553/

 

우린 Git-flow를 사용하고 있어요 | 우아한형제들 기술블로그

{{item.name}} 안녕하세요. 우아한형제들 배민프론트개발팀에서 안드로이드 앱 개발을 하고 있는 나동호입니다. 오늘은 저희 안드로이드 파트에서 사용하고 있는 Git 브랜치 전략을 소개하려고 합

techblog.woowahan.com

 

https://devlog-h.tistory.com/6

 

Git으로 협업하기! - forking workflow에서 git flow로 변경한 이유

안녕하세요. 휴몬랩에서 개발과 기타 등등을 하고 있는 오지(OG)입니다 :) 지금까지 개발을 해오면서 git을 사용한 협업 방법에 대해 많은 고민을 해왔는데요, forking workflow를 사용하다가 git flow로

devlog-h.tistory.com

 

'Today I Learned' 카테고리의 다른 글

변수, 선언, 초기화, 할당 / 호이스팅  (0) 2022.07.12
타입스크립트 기본  (0) 2022.07.07
프로젝트에 ESLint 적용하기  (0) 2022.07.01
자바스크립트: 객체2  (0) 2022.06.29
타입스크립트  (0) 2022.06.28