Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

Git의 기본 브랜치를 master에서 main으로 변경하기

올 6월 Go 언어가 인종차별적 요소나 주종 관계의 의미를 담고 있는 whitelist/blacklist와 master/slave라는 용어를 프로젝트에서 제거하기로 결정하면서 업계 전반에 이런 부분을 제거하는 움직임이 일어났다.(이 부분에 대해서 그런 의미로 받아들여지지 않는다는 반대 의견도 있지만 불편한 사람이 있다면 바꾸는 게 맞는다고 생각한다.)

이후 master를 기본 브랜치로 사용하던 Git에서도 이 논의가 이루어졌고 브랜치를 사용자가 지정할 수 있도록 변경하였다.(Regarding Git and Branch Naming 참고) 사실 master는 관례상 최초 생성하는 기본 브랜치로 사용하는 이름일 뿐 다른 의미는 없고 실제 많은 저장소가 기본 브랜치를 다른 브랜치로 바꾸어서 사용하고 있었다.

이어서 GitHub도 기본 브랜치를 master에서 main으로 변경하기로 했고 이는 10월 1일부터 적용되었다. 그래서 이제 저장소를 생성할 때 초기화 옵션을 선택하면 main 브랜치가 기본브랜치로 생성됨을 알려준다.

GitHub 저장소 생성 시 초기화하면 main으로 생성된다는 안내

초기화하지 않고 저장소를 생성할 때의 커맨드라인 안내 메시지도 main으로 초기화하도록 변경되었다. 이전에는 git이 알아서 기본으로 master를 기본으로 사용하였지만 main은 그렇지 않기 때문에 명시적으로 git branch -M main으로 브랜치를 생성하는 명령어가 추가되었다.

echo "# example-repo" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin git@github.com:outsideris/example-repo.git
git push -u origin main

master의 대안으로 어떤 이름을 사용할지도 많은 논의가 있었지만, GitHub이 main을 선택했으니 main이 주류가 될 것 같다.

init.defaultBranch

Git 2.28부터 사용자가 기존의 master로 지정되어 있던 기본 브랜치를 설정을 통해서 변경할 수 있는 기능이 추가되었다. 기본은 master로 동작하지만, 사용자가 원하는 대로 바꿔서 사용할 수 있다.

일단 Git을 2.28.0 버전 이상으로 올려야 한다. 나는 macOS에서 Homebrew로 Git을 관리하고 있어서 brew upgrade git으로 버전을 올렸다.

$ git version
git version 2.28.0

git config --global init.defaultBranch main으로 init.defaultBranch를 설정한다. 전역 설정으로 지정했으므로 이는 ~/.gitconfig에 아랫부분이 추가된다.(직접 ~/.gitconfig를 수정해도 된다.)

[init]
  defaultBranch = main

Git 저장소를 초기화하면 main이 기본 브랜치로 생성되는 것을 볼 수 있다.

$ git init
/Users/outsider/git-test/.git/ 안의 빈 깃 저장소를 다시 초기화했습니다

$ touch README.md && git add README.md && git commit -m "init"
[main 50d3fe6] init
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README2.md

$ git branch -a
* main

GitHub와 로컬 git의 설정은 맞췄지만, 기존에 작업하던 브랜치는 아직도 많이 master로 남아있고 프로젝트마다 기본 브랜치 설정을 바꾸는 타이밍이 다를 것이라서 당분간은 좀 헷갈릴 것 같지만 시간이 지나면 괜찮아질 것으로 생각한다.

2020/10/10 16:21 2020/10/10 16:21