'Origin'에 해당하는 글 2건

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
손가락귀신
정신 못차리면, 벌 받는다.

,

git clone

Tool/Git 2013. 3. 19. 00:37

본인의 원격 저장소든 타인의 원격 저장소든 git@github.com:ggamzzak/test.git 같은 이미 생성된 원격 저장소 주소를 알아냈다면,
로컬 저장소(Local Repository)를 생성하고 원격 저장소로부터 소스를 복제하여 해당 프로젝트의 버전관리를 시작할 수 있습니다.
windows, linux, mac 등 어디든 로컬 저장소가 될 수 있고 특정 원격 저장소의 소스를 복제하는 방법은 clone 명령을 사용합니다.

 

git clone <원격 저장소 주소> <복제될 디렉토리>

 

원격 저장소로부터 소스를 복제한 후 계속해서 원격 저장소와 소스를 주고 받아야 함에 있어서 별칭을 사용할 수 있습니다.
매번 저 긴 원격 저장소 주소를 입력할 수는 없으니까요.
게다가 2개 이상의 원격 저장소로부터 버전 관리를 병행한다면 별칭은 더욱 중요합니다.
clone으로 복제를 실행하면 원격 저장소에 대하여 origin 이란 이름으로 자동 생성됩니다.
원격 저장소의 이름을 변경하고 싶다면 clone 명령시 -o name 옵션을 추가할 수 있습니다.

 

$ pwd
/home/oops4u/dev
$ git clone git@github.com:ggamzzak/test.git
Cloning into 'test'...
Enter passphrase for key '/home/oops4u/.ssh/id_rsa':
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
$ ls
test
$ cd test
$ ls -al
.git
README.md

 

clone 명령으로 원격저장소의 test 란 프로젝트를 복제하고나니 현재 디렉토리에 test 란 디렉토리가 생성되었습니다.
복제될 디렉토리를 현재 디렉토리(.)로 지정할 수도 있습니다.
그 안에는 복제된 디렉토리나 파일들이 있을 것이구요, .git 란 버전관리 디렉토리도 생성됩니다.

 

$ git remote
origin
$ git remote -v
origin  git@github.com:ggamzzak/test.git (fetch)
origin  git@github.com:ggamzzak/test.git (push)

 

remote 명령으로 origin 이란 원격 저장소 별칭이 생성된 것을 확인하였습니다.

 

clone 명령으로의 복제는 원격 저장소의 모든 커밋 히스토리까지 가져오는 것이 특징입니다.
히스토리는 log 명령으로 확인 가능합니다.

 

$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Sat Mar 15 16:40:33 2008 -0700

    removed unnecessary test code

commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Sat Mar 15 10:31:28 2008 -0700

    first commit


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

,