fork 받은 repository 싱크 맞추기

starkensin·2021년 10월 10일
1
post-thumbnail

용어에서 혼동이 없도록 우선 간략하게 정리한다.

upstream: 프로젝트의 원본 remote repository를 지칭
origin: fork 받아온 remote repository를 지칭
local: 코드 작업을 수행하는 컴퓨터에 저장된 repository를 지칭


오픈소스에 기여를 하다보면 repository가 upstream, origin, local 세 곳에 분산되게 된다.
local에서 작업한 내용을 바로 원본 repository에 push하곤 하는 여타 환경과 다르게, 오픈소스에서는 fork를 하기 때문에 한 단계가 더 추가되곤 한다.

그러면 자연스럽게 세 repo간 sync가 맞지 않는 경우가 흔하게 발생하고, 이를 해결해줘야한다.

  1. 기여하고 싶은 opensource 프로젝트를 fork한다.
  2. 나의 github page에 fork 받은 repository를 local에 clone 한다.(이 순간 local repository에서 git remote -v 커맨드로 확인해보면 origin이라는 allias에 나의 github page에 fork 받은 repository가 등록되어 있을 것이다.)
  3. 원본 오픈소스 repository는 등록되어있지 않기 때문에 git remote add upstream <원본 Repo 주소> 명령어를 통해 upstream이라는 이름의 allias로 원본 repo를 등록해준다.

시간이 지나 upstream과 싱크가 맞지 않는 상황이 발생하면
local에서 git fetch upstream 명령어를 실행해서 최신 정보들을 가져온다.
그 후 원하는 브랜치에 merge를 통해 sync를 맞춰줄 수 있는데, merge를 하면 merge에 대한 커밋 로그가 남는다.

하지만 나는 별로 그걸 원하지 않았다.... 원본하고 결국 뭔가 달라지잖아...

git rebase upstream/<합쳐지기를 원하는 브랜치>를 통해 수정사항들을 반영해서 rebase를 마쳐준다.
그러면 일단 local과 upstream은 싱크가 맞게 된다.
하지만 upstream에 기여를 하려면 fork받은 origin repo를 통해야하기 때문에, origin과도 싱크를 맞춰줘야한다.

그러기 위해 git push origin <원하는 브랜치>를 하면 rebase의 영향으로 push가 되지 않는다.

하지만 local과 upstream은 싱크가 맞는 것이기 때문에, --force옵션으로 강제로 origin에 local의 결과물을 반영하자.
origin은 일반적으로 본인 혼자 작업하는 repo라고 생각해도 무관하므로, --force옵션을 사용해도 괜찮다.

드디어 불필요한 merge에 대한 commit로그 없이 upstream, origin, local 모두 동일한 상태를 갖게 된다.

0개의 댓글