upstream? origin?
깃을 사용하다 보면 upstream과 origin이라는 용어를 접할 때가 있다. 혼자 코딩하다 보면 접하지 못할 수도 있지만 내 깃허브 저장소가 아닌 다른 계정의 저장소를 fork해서 쓸 때 다른 저장소는 upstream으로, 내 저장소는 origin으로 별칭을 정하고 쓰는 것을 흔히 볼 수 있다. 본인은 우테코에서 미션을 진행하면서 woowacourse/{미션_저장소_이름}에서 저장소를 fork 해서 사용하면서 upstream이라는 단어를 접했다. upstream의 이해를 위해 우테코에서 어떻게 미션을 진행하는지 간략히 설명하면서 각 용어의 개념도 같이 적립해보겠다.
미션 진행 흐름
woowacourse/java-subway-path-precourse가 진행해야할 미션이라고 가정하겠다.
1. fork하기
2. clone하기
$ git clone https://github.com/ldk980130/java-subway-path-precourse.git
원래는 미션을 진행하면 woowacourse 저장소에 본인 아이디 이름으로 되어있는 브랜치가 있어서 그걸 가져와야 하지만 지금은 main 브랜치를 바로 가져오겠다.
bash로 해당 폴더에 들어가면 정상적으로 클론 된 것을 확인할 수 있다.
(원래 미션 할 때는 main이 아니라 본인 아이디 브랜치가 생성됨)
3. 작업할 브랜치 만들기
NOTE@DESKTOP-N9VOSQK MINGW64 /c/study/java-subway-path-precourse (main)
$ git checkout -b step1
Switched to a new branch 'step1'
NOTE@DESKTOP-N9VOSQK MINGW64 /c/study/java-subway-path-precourse (step1)
$ git branch
main
* step1
step1 브랜치를 만들고 미션을 진행한다.
4. commit 및 push를 하며 미션을 완료했으면 pr를 날린다.
그래서 upstream, origin이 대체 뭘까
미션을 진행이 아직 끝난 건 아니지만 여기서 짚고 넘어가자. 여기서 연결된 원격 저장소를 살펴보면 내 저장소만 origin으로 되어있는 것을 확인할 수 있을 것이다. (clone을 하면 자동으로 내 저장소가 origin으로 설정됨)
$ git remote -v
origin https://github.com/ldk980130/java-subway-path-precourse.git (fetch)
origin https://github.com/ldk980130/java-subway-path-precourse.git (push)
내 작업 공간 (step2 브랜치)에서 열심히 작업한 뒤에 커밋, 푸시를 하면 깃허브의 이 orㅑgin(내 저장소)에 커밋 내역이 업데이트될 것이다.
origin - 다른 사람의 깃허브 저장소를 fork 한 후의 내 원격 저장소
upstream - fork를 시도한 원격 저장소
이제 좀 감이 오는 듯한 느낌이다. 내 원격 저장소는 말 그대로 origin인 것이고 origin과 구분된, 더 상위의 저장소를 upstream이라는 명칭으로 주로 사용한다는 것이다. upstream 저장소는 여러 사람이 함께 공유할 수 있으며 물줄기가 여러 갈래로 나눠지듯 여러 사람이 fork 하여 사용하는 것이다.
즉 upstream, origin은 관계를 나타내기 위한 상대적인 개념이다.
다시 미션으로 돌아와 upstream 가져오기
미션을 진행하다 보면 pr이 merge 되는데 이때 step1 브랜치는 삭제하고 upstream 저장소를 연결해서 다시 merge 된 내 코드를 가져와야 한다.
$ git remote add upstream https://github.com/woowacourse/java-subway-path-precourse.git
$ git remote -v
origin https://github.com/ldk980130/java-subway-path-precourse.git (fetch)
origin https://github.com/ldk980130/java-subway-path-precourse.git (push)
upstream https://github.com/woowacourse/java-subway-path-precourse.git (fetch)
upstream https://github.com/woowacourse/java-subway-path-precourse.git (push)
이렇게 원래 원격 저장소를 연결해줄 때 upstream이라는 별칭을 써서 가져온다. 이러면 비유적으로 upstream 저장소는 최초의 상류 저장소, origin은 상류보다는 밑의 물줄기 저장소라는 것을 알 수 있다.
(내 저장소 상위에 woowacourse 저장소가 있음을 표현)
'Git' 카테고리의 다른 글
Git 정리 세 번째 Branch, Merge, Rebase (0) | 2022.03.06 |
---|---|
Git 정리 두 번째 Reset과 Revert (0) | 2022.02.19 |
Git 정리 첫 번째 (로컬 저장소, init, add, commit, .gitignore, 개행문자 통일) (0) | 2022.02.12 |