[Git, Android] Main 브랜치로 시작하기(리젝 방지)
맨 처음 깃을 시작했을 때 부터 main 브랜치로 바꿔서 해야 할 필요성은 알고 있었지만
나중에 하자 하면서 master 브랜치로만 사용했었다.
개인적인 공부나 회사에서의 업무들이 안정을 찾으면서 하나씩 거쳐온 단계를 정리해나가고 있는데
깃은 main 으로 바꿔서 시작하는 법을 알고자 했다.
그런데, 생각보다 쉽지 않았다.
우선 정답을 차례로 나열한 뒤 발생한 문제에 대한 분석을 해보려 한다.
무조건 성공하는 명령어 플로우
1. 안드로이드 프로젝트를 새로 만든다.
새로 만들어진 프로젝트는 git 이 적용되지 않아서 아무 작용도 하지 않는다.
2. git remote repository 도 새로 만든다.
이 때, ignore 파일, ReadMe.md 파일, 저작권 파일 모두 추가하지 않는다.
만들기 전에 잘 봐야한다. 맨 마지막 줄에 "이제는 main 브랜치가 기본으로 생성됩니다" 와 같은 말이 써있다.
그러면 remote 의 브랜치 코드를 보여주는 화면이 아니라 시작하는 가이드가 나올 것이다.
3. https://www.toptal.com/developers/gitignore 에서 gitignore 코드 검색
관련 키워드를 아래와 같이 검색해주면
이렇게 "이런 키워드의 경우에는 아래처럼 코드를 써야 필요없는 파일이 git 으로 관리되지 않아!"
라는 뜻의 코드를 보여준다. 복사한 뒤 프로젝트 경로에 있는 gitignore 파일에 붙여넣는다. 내용이 다를 것이다.
====Android studio terminal 작업=====
1) $git init
-> 이렇게 하면 로컬 git 파일이 초기화 되면서 프로젝트 경로에 git 파일이 추가된다.
2) $git add .
-> 죄다 add 한다. 다른 옵션으로 할 수도 있겠으나
필자는 웬만하면 수정할 파일만 건드린 뒤 다 추가하고 주제별로 커밋하는 단계를 좋아한다.(편해서...)
이렇게 하면 추가/수정된 모든 파일이 추적되고 있는 상태로 바뀐다.
3) $git commit -m "First commit"
-> 당연히 커밋메시지는 자유다. 첫 커밋을 해서 브랜치를 만들어주는 것이 핵심이다.
4) $git branch
-> 현재 브랜치를 확인한다. master 가 나올 것이다.
5) $git branch -m main
-> main 으로 브랜치 이름을 바꿔준다.
그리고 다시 $git branch 명령어로 바뀌었는지 확인한다.
6) $git remote add origin 레포지토리링크
-> 레포지토리 주소를 복사해서 위 명령어에 넣어준다.
7) $git remote -v
올바른 원격저장소와 별명이 설정되었는지 확인한다.
8) $git push origin main
로컬의 main 브랜치를 origin 원격 저장소로 밀어넣어준다.
여기까지 하면 main 이라고 하는 원격 브랜치에 로컬에 있는 main 브랜치 내용이 들어갔고,
앞으로 관리할 때도 main 이라는 단어만 사용할 수 있다.
겪었던 망할 문제들
처음엔 혼자서 작업하다보니 맨날 git add / git commit / git push / 간혹 git pull 정도밖에 쓸 일이 없어서
git 에 대한 개념이 선명하지 않았던 것 같다.
덕분에 발생한 문제는
1. 로컬의 master 브랜치인 채로 push 해서 원격 저장소에 main 쪽에 들어가는게 아니라 master 원격 브랜치가 새로 생김
-> 항상 겪었던 문제였다.
-> 그래서 '아 로컬의 브랜치를 main 으로 바꿔야 하나보다' 라고 생각했다.
2. push / pull 리젝
원격저장소도 main 이고 로컬 브랜치도 main 이었는데 push 하려고 하니 pull 을 먼저 하라고 경고가 뜨면서 리젝됐다.
그래서 pull 을 하면 관련없는 브랜치라 병합이 안 된단다(pull 은 fetch 후 merge 하는 명령어)
여기서 멘탈 좀 나갔어서 한 2시간? 헤맸다
3. 강제 병합
2번의 문제를 살펴보니 원격에서 initial commit 이 하나 있고 로컬에서 first commit 을 하나 했는데 서로 연관이 아예 없어서 병합도 안 되고 push 도 안 되고 하는 상황이었다.
결국 강제병합하는 명령어를 썼는데 굉장히 찝찝했다.
실제로 이 명령어를 해결책으로 제시하는 블로그도 있었지만
이렇게 해결하는 것은 내 성깔에 부합하질 않는다.
4. 해결
initial commit 이 원격에 있던 것은 .gitignore 파일을 android 옵션으로 추가했었기 때문이다.
같은 맥락으로 리드미 파일과 저작권 파일도 마찬가지다.
원격 저장소를 만들 때 무슨 파일을 추가하는 옵션을 선택하면
Initial commit 이라는 이름으로 묶여서 commit 된다.
그런데 로컬에서는 원격에 push 하려면 로컬 브랜치에 커밋 후 push 해야한다.
여기서 빠져나갈 수 없는 굴레에 갇힌다 망할ㅋㅋㅋㅋ
그래서 옵션파일을 아예 추가하지 않기로 했다.
생각해보면 그저 편의를 위한 것이지, 라이센스도 리드미도 ignore 파일도 나중에 추가할 수 있는 것들이다.
특히나 라이센스와 리드미는 거의 완성 때 필요한 것이기에
아무 옵션도 선택하지 않고 별도의 사이트에서 ignore 코드를 받아 직접 경로에 반영해준 뒤
first commit 을 했다.
그러면 원격저장소에는 initial commit 은 물론 아무 정보도 존재하지 않고
로컬 저장소에는 ignore 옵션도 제대로 적용된 채 first commit 이 생긴다.
이대로 git push origin main 해주면
매우 깔끔하게 아무 경고도 리젝도 없이 성공하게 된다.
그래도 이리저리 헤맨 덕분에 git document 의 reference 읽는 것도 익숙해지고
열받긴 했지만 좋은 경험이었다.
제발 나같은 사람 더 이상 없게 해주세요.