git을 사용하면서
upstream
,origin
등 위치를 나타내는 듯한 용어들이 등장한다.
이들을 어떤 식으로 이해하면 좋을지 기록해보자.
upstream
과 origin
은 위치를 나타내는 단어이다. 대략 상류, 원류로 해석된다.
그런데 위치라는 것은 상대적이다.
내 기준에서 저 것은 멀지만, 다른 사람 기준에서는 가까운 것일 수 있는 것 처럼말이다.
upstream
과 origin
도 마찬가지이다.
내가 바라봤을 때 무조건 어느 위치에"만" 존재하는 것들이 아니다. 유동적으로 위치가 바뀐다.
아래 그림을 보자.
어떤 repository에서 fork
를 통해 내 repository로 코드를 옮겨온 뒤,
내 local 환경에서 작업을 진행하고 있다.
여기서 upstream
은 어디인가? 그리고 origin
은 어디인가?
...모른다. 기준이 없기 때문이다.
기준이 있어야지 어떤 놈이 upstream
이고 origin
인지 말 할 수 있다.
그럼 기준을 잡아보자.
우선 local 환경을 기준으로 해보자.
origin
은 어디일까? 원류, 즉, 기준을 만들어낸 기원이므로 내 repository를 의미한다.
upstream
은 어디일까? 원류를 만들어낸 상류이므로 우테코 repository를 의미한다.
쉽게 말하면, upstream
은 origin
의 origin
이라고 할 수 있겠다.
그림으로 이해해보자.
아! 이제야 관계가 이해가 된다.
정말 상대적인거구나.
프로젝트를 github
에 올리기 위해서 기계적으로 작성했던 이 코드.
이제 이 코드를 해석해볼 수 있겠다.
$ git remote add origin https://github.com/Rki0/git_study.git
origin
이라는 이름으로 내 repository를 원격 저장소에 추가하겠다.
변경 사항이 발생해서, 이를 원격 저장소에 반영할 때 사용하는 커맨드이다.
$ git push -u origin main
origin
저장소에 main
브랜치를 push
한다.
그러면 -u
는 무슨 의미일까?
바로 --set-upstream
의 약자이다.
즉, 위 커맨드는 아래와 동일하다는 것이다.
$ git push --set-upstream origin main
왜 굳이 -u
를 사용해야하는걸까?
바로, 위계 질서를 정립하기 위해서이다.
origin
을 main
브랜치의 upstream
으로 설정하겠다는 것이다.
그래서, 매번 -u
를 할 필요없이 처음 push
에만 이렇게 해주면 된다.
아까 말했듯이 위치는 상대적이다.
따라서, 이전에 upstream
은 fork
해 온 repository라고 했다해서,
걔만이 upstream
으로 설정될 수 있고..그런 것은 아니다.
upstream
과 downstream
, 상류와 하류의 관계를 설정하는 것 뿐이다.
참고로, clone
을 하면 상하 관계가 명확하기 때문에 자동적으로 upstream
, origin
관계가 설정이 된다.
우테코 4기 레벨1 메이커준의 Git 특강