리모트 트래킹 브랜치
아래 깃 다큐멘테이션을 공부하면서 정리한 글.
Git - 리모트 브랜치
``origin'' 의 의미 브랜치 이름으로 많이 사용하는 master'' 라는 이름이 괜히 특별한 의미를 가지는 게 아닌 것처럼 origin'' 도 특별한 의미가 있는 것은 아니다. git init 명령이 자동으로 만들기 때문
git-scm.com
리모트 트래킹 브랜치란?
- 리모트 트래킹 브랜치는 리모트 브랜치를 추적하는 레퍼런스이며 브랜치이다.
- 리모트 트래킹 브랜치는 로컬에 있지만 임의로 움직일 수 없다.
- 일종의 북마크처럼 리모트 저장소에 마지막으로 연결했던 순간에 브랜치가 무슨 커밋을 가르키고 있었는지 나타낸다.
즉 리모트 서버에 연결할 때마다 자동으로 갱신된다.
git.ourcompany.com 이라는 git 서버가 있다고 하자.
이 서버를 clone해오면 git은 자동으로 이 remote 저장소에 origin 이라는 이름을 붙인다.
또한 로컬에서는 자동으로 master 브랜치를 가르키는 origin/master 라는 포인터를 만든다. (리모트 브랜치)
즉 최초에는 local branch와 remote branch모두 f4265라는 같은 커밋을 가르키고 있다.
최초의 clone 해온 상황 이후, 내가 로컬에서 어떤 작업을 진행하고 커밋을 진행했다.
그럼 로컬에서 내 master 브랜치는 원래 f4265에서 커밋을 진행한 후 이제 893cf 를 가르키고 있다.
하지만 서버 저장소로부터 어떤 데이터도 주고받지 않아서 remote 브랜치인 origin/master는 그대로다.
깃 저장소인 git.our.company에서는 나 이외의 누군가가 서버에 push를 해서 master 브랜치를 업데이터 했기때문에 master 브랜치는 원래의 f4265에서 이제 190a3을 가르키고 있다.
즉 로컬과 서버의 커밋 히스토리는 독립적이라는 것을 볼 수 있다.
자 이제 나 이외의 누군가가 깃 저장소인 git.our.company에 push를 했기 때문에 리모트 서버(깃 저장소)와 내 로컬의 데이터 상황이 다르다.
리모트 서버와 내 컴퓨터의 로컬의 상황을 동기화하려면 git fetch origin 명령을 사용한다.
이 명령을 실행하면 우선 origin 서버 (여기선 git.our.company)를 찾아서, 현재 로컬의 저장소가 갖고 있지 않은 새로운 정보를 모두 내려받고, 받은 데이터를 로컬 저장소에 업데이트하고 나서,
리모트 브랜치인 origin/master 포인터의 위치를 최신 커밋으로 이동시킨다.
위 사진을 보면 origin/master 포인터가 깃 저장소와 같이 최신 커밋인 190a3으로 이동됐다.
f4265 커밋 시점으로 부터 내가 로컬에서 수행한 작업들은 따로 a38de, 893cf로 나와있고 현재 내 로컬 브랜치는 893cf를 가르킨다.
이제 git.team1.ourcompany.com 이라는 새로운 깃 저장소를 추가한다.
콘솔에서 git remote add 명령으로 새로 만든 리모트 저장소를 추가한다. 별명은 teamone 으로 한다.
위 사진을 보면 새로운 teamone이라는 리모트 저장소가 추가됐다.
이 상태에서 git fetch teamone 명령으로 teamone 서버의 데이터를 내려받는다.
그런데 현재 teamone 서버의 데이터는 모두 origin 서버에도 있는 것들이라 아무것도 받지 않는다.
그대신 이 명령은 리모트 트래킹 브랜치 teamone/master 가 teamone 서버의 master 브랜치가 가르키고있는 커밋을 가르키도록 한다.
위 사진을 보면 리모트 트래킹 브랜치 teamone/master가 git.team1.ourcompany.com 깃 서버가 가르키고 있는 31b8e
커밋을 가르키게 됐다.
브랜치 추적
리모트 트래킹 브랜치를 로컬 브랜치로 Checkout 하면 자동으로 트래킹 브랜치가 만들어진다.
트래킹 하는 대상 브랜치를 Upstream 브랜치라고 한다.
트래킹 브랜치는 리모트 브랜치와 직접적인 연결고리가 있는 로컬 브랜치다.
트래킹 브랜치에서 git pull 명령을 사용하면 리모트 저장소로부터 데이터를 내려받아 연결된 리모트 브랜치와 자동으로 merge 한다.
서버로부터 저장소를 Clone해 오면 git은 자동으로 로컬의 master 브랜치를 리모트 브랜치인 origin/master 브랜치의 트래킹 브랜치로 만든다.
즉 (1) 로컬의 master 브랜치가 있고
(2) origin 저장소의 master 브랜치가 가르키는 커밋을 가르키는 브랜치인 origin/master 리모트 브랜치가 있고
(3) origin/master 리모트 브랜치가 로컬의 master 브랜치를 가르키는 트래킹 브랜치가 되는것.