[Git] upstream, origin에 대하여

박기영·2022년 12월 5일
4

Git

목록 보기
6/8
post-thumbnail

git을 사용하면서 upstream, origin 등 위치를 나타내는 듯한 용어들이 등장한다.
이들을 어떤 식으로 이해하면 좋을지 기록해보자.

위치 === 상대적

upstreamorigin은 위치를 나타내는 단어이다. 대략 상류, 원류로 해석된다.
그런데 위치라는 것은 상대적이다.
내 기준에서 저 것은 멀지만, 다른 사람 기준에서는 가까운 것일 수 있는 것 처럼말이다.

upstreamorigin도 마찬가지이다.
내가 바라봤을 때 무조건 어느 위치에"만" 존재하는 것들이 아니다. 유동적으로 위치가 바뀐다.

아래 그림을 보자.

참고 이미지

어떤 repository에서 fork를 통해 내 repository로 코드를 옮겨온 뒤,
내 local 환경에서 작업을 진행하고 있다.

여기서 upstream은 어디인가? 그리고 origin은 어디인가?

...모른다. 기준이 없기 때문이다.
기준이 있어야지 어떤 놈이 upstream이고 origin인지 말 할 수 있다.

그럼 기준을 잡아보자.

우선 local 환경을 기준으로 해보자.
origin은 어디일까? 원류, 즉, 기준을 만들어낸 기원이므로 내 repository를 의미한다.
upstream은 어디일까? 원류를 만들어낸 상류이므로 우테코 repository를 의미한다.

쉽게 말하면, upstreamoriginorigin이라고 할 수 있겠다.
그림으로 이해해보자.

참고 이미지

아! 이제야 관계가 이해가 된다.
정말 상대적인거구나.

git remote add origin ~

프로젝트를 github에 올리기 위해서 기계적으로 작성했던 이 코드.
이제 이 코드를 해석해볼 수 있겠다.

$ git remote add origin https://github.com/Rki0/git_study.git

origin이라는 이름으로 내 repository를 원격 저장소에 추가하겠다.

git push -u origin main

변경 사항이 발생해서, 이를 원격 저장소에 반영할 때 사용하는 커맨드이다.

$ git push -u origin main

origin 저장소에 main 브랜치를 push한다.
그러면 -u는 무슨 의미일까?
바로 --set-upstream의 약자이다.

즉, 위 커맨드는 아래와 동일하다는 것이다.

$ git push --set-upstream origin main

왜 굳이 -u를 사용해야하는걸까?
바로, 위계 질서를 정립하기 위해서이다.

originmain 브랜치의 upstream으로 설정하겠다는 것이다.
그래서, 매번 -u를 할 필요없이 처음 push에만 이렇게 해주면 된다.

아까 말했듯이 위치는 상대적이다.
따라서, 이전에 upstreamfork해 온 repository라고 했다해서,
걔만이 upstream으로 설정될 수 있고..그런 것은 아니다.

upstreamdownstream, 상류와 하류의 관계를 설정하는 것 뿐이다.

참고로, clone을 하면 상하 관계가 명확하기 때문에 자동적으로 upstream, origin 관계가 설정이 된다.

참고 자료

우테코 4기 레벨1 메이커준의 Git 특강

profile
나를 믿는 사람들을, 실망시키지 않도록

0개의 댓글