'refspec'에 해당하는 글 1건

pull scenario

Tool/Git 2013. 3. 28. 01:37

원격 저장소의 작업물을 로컬 저장소로 복제하기 위해 clone 을 사용했지만,
이 후 원격 저장소의 변경된 작업물을 가져오기 위해서는 pull 이나 fetch 명령을 사용해야 합니다.
fetch 명령은 원격 저장소의 변경된 작업물(obj, ref, tag)만을 가져옵니다.
pull 명령은 fetch + merge 를 실행하는 것과 동일한 결과를 보여 줍니다.

 

만약 로컬의 master 와 원격의 master(origin/master) 가 각각 다른 commit을 진행중일 때,
merge를 원한다면 pull 명령을, 단지 origin/master 만 update 하길 원한다면 fetch 를 사용하면 되겠습니다.

 

우선 clone 으로 동기화한 후의 fetch 명령은 이미 remote branch 세팅이 끝난 상태이므로 패스하고,
초기화(init)된 상태에서 fetch 와 merge, origin/master 추적을 사용해 보겠습니다.

 

 

 

git fetch <repo> <refspec>

 

$ git init
$ git remote add origin git@github.com:ggamzzak/test.git
$ git fetch origin
From github.com:ggamzzak/test
 * [new branch]      b2         -> origin/b2
 * [new branch]      master     -> origin/master

 

remote branch 가 생성되었습니다.
이제 merge를 사용하여 로컬 origin/master 에 master HEAD 를 놓습니다.

 

$ git merge origin/master

 

* refspec 이란 것은 간략하게 <src branch>:<dest branch> 라고 보면 되겠습니다.

 

 

 

git pull <repo> <refspec>

 

$ git init
$ git remote add origin git@github.com:ggamzzak/test.git
$ git pull origin
Enter passphrase for key '/home/oops4u/.ssh/id_rsa':
From github.com:ggamzzak/test
 * [new branch]      b2         -> origin/b2
 * [new branch]      master     -> origin/master
You asked to pull from the remote 'origin', but did not specify
a branch. Because this is not the default configured remote
for your current branch, you must specify a branch on the command line.
$ git checkout -B master origin/master
Branch master set up to track remote branch master from origin.
Reset branch 'master'
$ git pull origin
Already up-to-date.

 

fetch와 merge를 사용한 결과는 pull 명령을 사용한 것과 동일합니다.
동일하다고는 하였지만, 원격 저장소 주소만 추가한 상태에서 branch 를 명시하지 않으면,
merge할 branch를 지정하라는 메시지를 출력합니다.
이 때 master 를 reset 하여 origin/master 를 추적하도록 합니다.
그리고 나면 pull 명령에 branch 를 생략해도 master->master 로 가져오게 됩니다.


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,