upstream
과 downstream
은 두 레포간의 관계에 따라 정의되는 상대적인 개념이다. 어떤 한 레포가 절대적으로 업스트림이거나 다운스트림이 아니라는 소리이다.내 래포가 myRepo이고 다른 레포가 otherRepo라 하자. 내가 otherRepo로부터 pull from 해오고(당겨오고) push to한다면 내 myRepo가 downstream
, otherRepo가 upstream
으로 정의된다.
하나의 업스트림에 여러 개의 다운스트림이 있을 수 있다.
어떤 때는 remote origin이라고 하고, 어떤 때는 remote upstream이라고 하고..
원격저장소가 remote인건 알겠는데 그럼 origin은 뭐고 upstream은 뭐지?
fork
맥락에서 이해되어야 한다.한편 origin은 내 포크를 의미한다. 레포가 클론될 때에 디폴트 리모트는 origin이라고 불린다. 그러니까 내 포크를 myRepo라고 할 때, 클론하면 이것이 내 레포가 origin이 된다. 내가 오리지널 레포의 변화를 추적하고 싶으면 upstream이라는 이름의 리모트를 추가해야 한다.
>> GitHub Page 설명
When a repo is cloned, it has a default remote called origin that points to your fork on GitHub, not the original repo it was forked from.
To keep track of the original repo, you need to add another remote named upstream.
$ git remote add upstream git://github.com/user/repo.git # 이런 식으로 remote upstream을 추가해야 오리지널 레포를 추적할 수 있다