올 6월 Go 언어가 인종차별적 요소나 주종 관계의 의미를 담고 있는 whitelist/blacklist와 master/slave라는 용어를 프로젝트에서 제거하기로 결정하면서 업계 전반에 이런 부분을 제거하는 움직임이 일어났다.(이 부분에 대해서 그런 의미로 받아들여지지 않는다는 반대 의견도 있지만 불편한 사람이 있다면 바꾸는 게 맞는다고 생각한다.)
이후 master를 기본 브랜치로 사용하던 Git에서도 이 논의가 이루어졌고 브랜치를 사용자가 지정할 수 있도록 변경하였다.(Regarding Git and Branch Naming 참고) 사실 master는 관례상 최초 생성하는 기본 브랜치로 사용하는 이름일 뿐 다른 의미는 없고 실제 많은 저장소가 기본 브랜치를 다른 브랜치로 바꾸어서 사용하고 있었다.
이어서 GitHub도 기본 브랜치를 master에서 main으로 변경하기로 했고 이는 10월 1일부터 적용되었다. 그래서 이제 저장소를 생성할 때 초기화 옵션을 선택하면 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로 남아있고 프로젝트마다 기본 브랜치 설정을 바꾸는 타이밍이 다를 것이라서 당분간은 좀 헷갈릴 것 같지만 시간이 지나면 괜찮아질 것으로 생각한다.

Comments