프로젝트 협업 시 각각의 개발자는 원격저장소에 저장된 프로젝트 파일을 개인이 사용하는 로컬저장소에 받아 작업한다.
새로운 작업내용이 있을 때 원격저장소의 소스코드에 작업내용을 추가하고 다시 로컬저장소에서 작업한다.
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 |