처음부터 만들 땐 init, 있던 것을 가져올 땐 clone
디스크에 Git repo를 마련하는 방법은 둘이야. 기존 이력을 함께 가져오는 git clone과 새 이력을 시작하는 git init이지. 둘 다 .git/ 폴더를 만들지만 출발 상태는 전혀 달라. 어느 쪽이 필요한지 구분하는 게 daily loop의 첫걸음이야.
git init은 현재 directory에 빈 repo를 만들어. commit도 없고 첫 commit 전에는 branch도 없으며 remote도 없어. 기본 branch 이름은 init.defaultBranch를 따라가. global 값은 main으로 정해두는 편이 좋아. 옛 기본값인 master는 관리되지 않은 Linux 환경에서 불쑥 튀어나오는 짐이거든. 보통 git init 뒤에 .gitignore를 만들고 git add .한 다음, 첫 commit으로 프로젝트 이력을 시작해.
git clone은 기존 repo를 받아와. 기본적으로 각 branch를 remote-tracking ref(origin/main, origin/feature 등)로 가져오고, 기본 branch를 checkout하며, clone URL을 가리키는 origin remote까지 설정해. SSH URL(git@github.com:user/repo.git)은 날마다 password를 묻지 않게 해줘. HTTPS URL(https://github.com/user/repo.git)은 제한된 회사 network에서도 널리 통하지만 token이나 credential helper가 필요해.
큰 repo를 받을 때는 두 선택지를 알아두면 좋아. --depth 1은 최신 commit만 받는 shallow clone이라 빠르지만 이력이 없어 blame과 bisect가 제 구실을 못 해. --filter=blob:none은 commit graph와 tree 구조를 먼저 받고 blob은 checkout할 때 늦게 가져오는 partial clone이야. Git 2.20+에서 쓸 수 있고, 대부분의 작업에서는 shallow clone보다 현대적이고 빠른 선택이야.