브랜치(Branch)란?
- 브랜치는 사용자가 독립적으로 작업을 진행할 수 있도록 돕는 작업 흐름이다.
- 하나의 개발 프로젝트에 참여하는 개발자 A, B가 동시에 작업해야 하는 경우,
- 위 예시처럼 개발자 A가 먼저 작업을 완료한 뒤, 개발자 B가 이어서 순차적으로 작업할 만큼 현실에서는 넉넉한 시간을 주지 않는다.
- 개발 기간 동안 개발자 A와 B가 담당할 기능을 미리 정하고 동시에 작업하는 경우가 대부분이다.
- 깃에서 브랜치는 여러 작업을 각각 독립된 공간에서 진행할 수 있도록 하는 기능이다.
- 하나의 브랜치는 독립된 워크스페이스, 인덱스, 로컬 레포지토리, 리모트 레포지토리 공간을 가진다.
- 보통
main
이라는 기본 브랜치 위에서 작업했으며, 브랜치 위에 새로운 브랜치를 생성해 독립된 작업 공간을 만들 수 있다. - 이처럼 브랜치를 이용하면 하나의 프로젝트에서 여러 사람이 동시에 본인의 작업을 진행할 수 있다.
브랜치를 이용한 작업 흐름
- 각 개발자는 메인 브랜치에서 각자 자신이 작업할 새로운 브랜치를 만든다.
- 각 개발자는 본인이 만든 브랜치 위에서 작업한다.
- 깃 호스팅 서버를 쓰지 않는 경우,
- 작업 완료 후 작업한 브랜치를 메인 브랜치에 머지한다.
- 로컬 레포지토리의 메인 브랜치가 업데이트 되었으므로, 리모트 레포지토리에도 푸시하여 최신 내역을 공유한다.
- 깃 호스팅 서버를 쓰는 경우,
- 작업 완료 후 리모트 레포지토리의 자신이 작업한 브랜치를 푸시한다.
- 리모트 레포지토리에서 메인 브랜치로 풀 리퀘스트(PR, Pull Request)를 진행한다.
- 협업하는 다른 개발자에게 리뷰를 받는다.
- 리뷰 및 합의 후 메인 브랜치에 머지한다.
코드 사례
- 쇼핑몰 웹 서버 개발 프로젝트에 개발자 A와 B가 참여했다.
- 회의를 통해 개발자 A는 유저 관련 기능을, 개발자 B는 결제 관련 기능을 개발하기로 했다.
-
깃으로 코드와 버전을 관리하고, 리모트 레포지토리로 깃허브를 사용하여 각자 작업 완료 후 PR을 날려 리뷰하기로 정했다.
- 필자를 개발자 A라고 가정한다.
1 |
|
- 위 명령어를 통해 기존의 메인 브랜치인
main
에서users
로 바꿨다. - 이제
users
브랜치는main
브랜치와는 독립적인 4개의 공간을 갖게 된다. - 다음
users
브랜치 위에서 일련의 작업을 완료했고, 이 과정 중git add
와git commit
을 반복했을 것이다. - 다음 과정은 PR을 통해 동료들에게 코드 리뷰를 받을 지 말 지에 따라 달라진다.
바로 변경사항을 업로드하는 경우
users
브랜치에서 작업한 내역을 메인 브랜치에 합친다.
1 |
|
PR 받은 후 업로드하는 경우
- 작업 내역을 리모트 레포지토리인 깃허브에 보낸다.
- 이 때 자신이 만든 브랜치 이름과 동일한 브랜치에
push
해야 한다.
1 |
|
- 위 이미지처럼 깃허브에 미리 만들어둔 리모트 레포지토리의
users
브랜치가 생기고, 여기에 작업한 내용이 올라가게 된다.
- 깃허브에서
main
브랜치로의 PR을 생성함으로써 개발자 B에게 나의 작업 내역을 공유하고 머지 요청을 할 수 있게 된다.
- 리뷰를 거쳐 PR이 승인되고, 작업 내역이 메인 브랜치에 머지되면 맡은 작업이 끝이 나는 것이다.
- 작업이 완료된 브랜치는 깔끔한 정리를 위해 보통 삭제한다.
정리
- 브랜치를 통해 하나의 프로젝트에서 독립된 작업 공간을 가질 수 있다.
- 각 브랜치 별로 위 4가지 공간을 갖게 된다.
- 협업할 때는 보통 각자 작업할 브랜치를 만들고 그 위에서 작업한다.
- 리모트 레포지토리에서 각자 브랜치 작업을 리뷰받은 뒤, 메인 브랜치로 머지한다.