SW 개발 시 개발자들은 소스코드를 공유하게 된다. 이때, 여러 개발자들이 동시에 다양한 작업을 할 수 있게 만들어 주는 기능이 바로 브랜치(Branch) 다. 각자 독립적인 작업 영역(저장소) 안에서 마음대로 소스코드를 변경할 수 있다. 이렇게 분리된 작업 영역에서 변경된 내용은 나중에 원래의 버전과 비교해서 하나의 새로운 버전으로 만들어 낼 수 있다.
즉, 병렬적으로 작업할 수 있고 작업 후에 main으로 병합을 할 수 있는 서브 작업공간 같은 개념
2. Branch 국룰
변수명, 클래스명에서 암묵적인 규칙이 있듯 브랜치도 어느정도 정형화된 용도와 규칙이 있다. 처음 알았다.
Main (Main Branch)
Develop(Main Branch)
Feature/<Issue_number> or <Feature_name> / <Short Description>
Release/<version_number>
Hotfix/<Issue_number> orIssue/<Issue_number>
Main Branch
메인 브랜치는 배포할 수 있는 브랜치다.
즉 최종적인 상태를 의미하는 공간으로 최상위 브랜치다.
명명규칙: 보통 main 그대로 쓴다고 한다.
Develop Branch
다음 출시 버전을 개발하는 브랜치
main에서 분기되어 기능 개발을 위한 브랜치들의 병합을 위해 사용됨.
이 브랜치에서 기능을 병합하고 버그를 수정하여 배포 가능한 상태가 되면 main으로 병합한다.
명명규칙: 보통 develop 그대로 쓴다고 한다.
Feature Branch
기능을 개발하는 브랜치
새로운 기능이나 버그 수정이 필요할 때마다 develop 브랜치에서 분기된다.
여기서의 작업은 공유할 필요가 없기 때문에 주로 자신의 로컬 저장소에서 관리한다.
명명규칙: feature/기능요약 (ex. feature/login)
Release Branch
이번 출시 버전을 준비하는 브랜치
feature 브랜치에서 기능 개발 후 develop 브랜치에서 병합을 하는 과정을 반복하여,
최종적인 버그 수정이나 문서 추가 등 실질적으로 Release하기 직전에 하는 단계를 위한 브랜치
명명규칙: release/X.X.X 혹은 release-X.X.X
Hotfix Branch
출시 버전에서 발생한 버그를 수정하는 브랜치
갑작스럽게 수정해야하는 경우에 main에서 수정하지 않고 Hotfix 브랜치로 분기하고 수정 후 main으로 병합한다.
main에서 다시 배포 후에는 develop 브랜치에도 병합해준다.
명명규칙: hotfix-X.X.X
3. 모범 예시
4. 실습
1. main 브랜치에 최초 커밋을 한다.
어차피 브랜치가 중점이기에 그냥 txt파일로 연습한다.
2. Develop 브랜치 추가하기
현재는 main 브랜치 뿐이다.
develop 브랜치를 만들어주자.
git branch "브랜치이름"
develop 브랜치에서 로그인 기능을 만든다고 가정한 feature 브랜치도 만들어 준다.
git branch feature/login
feature/login 브랜치에 로그인 모듈을 만들어서 푸시 후 develop 브랜치로 merge 해보자
feature/login 브랜치로 일단 push 하고
develop 브랜치로 이동하여 feature/login을 merge했다.
두번의 과정에서 모두 첫 커밋이라 upstream을 설정하라고 에러가 발생했다.
push 뒤에 -set--upstream 옵션을 붙혀주면 된다.
새로 생성한 브랜치에서 작업이 끝나면
git branch -d feature/login
명령어로 브랜치를 제거해준다. 이때 merge되지 않은 정보들이 있다면 경고문이 뜨며 -D로 옵션을 바꿔서 진행하라고 알려준다.
5. 결과
브랜치 3개가 잘 만들어졌다.
develop 브랜치로 merge한 feature/login 브랜치의 내용도 잘 들어갔다.
어제 AWS 관련 인증 키들을 깃허브 리포지토리에 올려놓고 있었다는 사실을 알게 됐다. 깃허브에서 지우고 다시 커밋되지 않도록 .gitignore에 등록하였지만 리포지토리 히스토리상에는 이미 수 없이 남아있었다. 이를 해결하기위해 BFG Repo-Cleaner를 사용했다.