맞으면서 배우는 깃허브 (22.07.13TIL)
깃은 고양이같다. 가까워 졌나 싶으면 또 거리를 둔다. 매일 학습할 것이 생긴다. 오늘도 마찬가지로 과제를 진행하다보니 깃과의 거리감을 느꼈다. 어제 upstream의 main브랜치를 pull하고 나서 난장판이 된 내 과제 리포지토리를 보면서 한 가지 아이디어가 떠올랐다.
혹시 이번주 week01폴더만 기본적으로 가지고 있는 템플릿 브랜치를 만들고, 필요할때 템플릿 브랜치에서 새 과제 브랜치를 만들면 편하지 않을까?
생각난김에 한번 만들어 보기로 했다. Just do it!
템플릿 브랜치 만들기
깃 지식을 인출해 볼 수 있는 굉장히 좋은 기회라고 생각이 들어서 최초의 branch helloname으로 돌아갔다.
그리고 git switch -c templateBranchWeek1 으로 새 브랜치를 만들고 커밋을 진행했다.
템플릿 브랜치가 깔끔한 구조로 만들어 진 것을 보고 나 깃좀 칠지도...? 라는 생각을 잠깐 했다.
템플릿 브랜치를 기반으로 과제브랜치를 만들기 위해
git switch -c 20220713-1000JulCode-오진욱 upstream/main
브랜치를 새로 만들어보니 또다시 커밋지옥이 펼쳐졌다. 리포지토리 구조도 다시 중구난방이 되었다. 아니 분명 템플릿 브랜치가 있는 커밋에서 새로 브랜치를 팠는데 왜 upstream의 main브랜치 커밋을 그대로 가져오는걸까??
그래... 깃이 이렇게 쉬울리가 없지... 문제가 이해될 때까지더 깊이 공부해보기로 했다.
upstream/main?
평소에 로지님이 브랜치 만들때 꼭 upstream/main꼭 붙여주세요!!! 라는 말을 자주 하셨다. 음... 그게 뭘까? 라는 생각은 했지만 귀찮아서 알아볼 생각을 하지 않았다. 하지만 지금 여기에 시간을 두시간동안 쏟아보니 이것만은 꼭 알고가야 겠다고 생각했다.
Local과 Remote의 브랜치 그리고 Remote/branch
Pro git docs 3.5 remote branch에서 답을 찾을 수 있었다. git clone을 진행하면 깃은 자동으로 remote에 origin이라는 이름을 붙이고 저장소 데이터를 모두 내려 받은뒤 remote의 main브랜치를 가리키는 포인터를 만든다. 이 포인터를 origin/main이라고 부르고 로컬에서 멋대로 조종할 수 없다.(오로지 remote의 main브랜치 커밋을 추적한다.) 그리고 Git은 로컬의 main브랜치가 origin/main를 가리키게 한다.
우리가 과제에서 자주 사용하는 git switch -c <branchname> upstream/main을 다시 살펴보면 이렇게 해석할 수 있을 것 같다.
upstream remote의 main브랜치를 가리키는 포인터 upstream/main을 가리키는 <branchname>이라는 local브랜치를 만들고 브랜치를 전환해주세요!
간단히 도식화하면
local의 <branchname> 브랜치 -> origin/main 포인터 -> upstream의 main 브랜치
이 정도로 요약할 수 있을 것 같다. 결국 local의 브랜치가 upstream의 main브랜치를 가리키게 되니 그 커밋도 불러오게 되는것이다!
앞으로 어떻게 깃을 대할것인가?
깃때문에 막히면 매일 화도나고 답답하지만 솔직히 제대로 깃에대해 공부한지 3일만에 자유자재로 쓰는것도 말이안되긴 한다. 오히려 돌이켜보니 깃을 조금 이해하니 그것을 활용해서 편하게 과제하려고 깃으로 깔짝대본 내가 좀 기특하기도 하다. 그리고 궁금한 내용을 블로그가 아닌 Docs를 뒤져 제대로 파악해본게 이번이 거의 처음이라 시간을 많이 써도 아깝지가 않았다. 배운 지식을 떠올려서 실제로 써보고 싶은 것(템플릿 브랜치)을 만드는 시도(인출)를 했다는 데서 의의가 있다고 생각한다. 앞으로도 기회가 있을때마다 실생활에 인출해볼 수 있는게 있다면 시도해보자!