포럼 회원으로 등록하신분만 다운로드가 가능합니다. 최대 업로드 가능한 용량은 20MB 입니다.
안녕하세요?
현재 국내에 GIT에 대한 제대로 된 문서가 없기에, GIT 사용자 가이드에 대하여 번역을 시작하게 되었습니다.
번역의 오류로 틀린 내용이 있을 수도 있으니, 오류 발견시 댓글을 남겨주시면 감사하겠습니다.
GIT 사용법 (ProGIT) - 2.5. 원격 저장소의 사용 방법
원본 : ProGIT Book(http://progit.org)
번역 : 김재훈(이솝 임베디드 포럼, http://www.aesop.or.kr)
2.5. 원격 저장소(Remote Repository)의 사용 방법
GIT를 사용한 프로젝트로 공동 작업을 진행해 나가려면, 원격 저장소(Remote Repository)의 사용 방법을 알 필요가 있습니다.
원격 저장소(Remote Repository)란 인터넷상 혹은 그 외 네트워크상의 어디엔가 존재하는 GIT 기반의 프로젝트 입니다. 복수의 원격 저장소(Remote Repository)를 가질 수도 있고, 각각을 읽기 전용으로 하거나, 읽기/쓰기가 가능하게 만들 수도 있습니다. 따라서 여러 프로젝트 참여자와 함께 공동으로 작업을 진행시켜 나가기 위해서는 이러한 원격 저장소(Remote Repository)를 구축학, 필요에 따라서 변경된 프로젝트 데이터를 Pull, Push를 하는 방법으로 작업을 분담해 나가게 됩니다.
원격 저장소(Remote Repository)의 관리에는 "원격 저장소(Remote Repository)의 추가", "불필요하게 된 원격 저장소(Remote Repository)의 삭제","원격 브랜치(branch)의 관리나 추적 대상/추적 제외 대상의 설정" 등 다양한 작업이 포함 됩니다.
이 장에서는 이러한 작업에 대해 설명 합니다.
2.5.1. 원격 저장소(Remote Repository)의 표시
지금까지 여러분이 어느 원격 저장소(Remote Repository) 서버를 설정했는지 알려면 git remote 명령을 사용 합니다. 이것은 지금까지 설정한 원격 저장소의 이름 목록을 출력 합니다. 저장소(Repository)를 클론(clone) 한 것이라면, origin 이라는 이름이 보이게 됩니다. origin 이라는 이름은 저장소를 클론한 서버에 대해서 디폴트로 붙이는 이름 입니다.
$ git clone git://github.com/schacon/ticgit.git
Initialized empty Git repository in /private/tmp/ticgit/.git/
remote: Counting objects: 595, done.
remote: Compressing objects: 100% (269/269), done.
remote: Total 595 (delta 255), reused 589 (delta 253)
Receiving objects: 100% (595/595), 73.31 KiB | 1 KiB/s, done.
Resolving deltas: 100% (255/255), done.
$ cd ticgit
$ git remote
origin
여기에 -v 옵션을 붙이면 클론한 저장소를 원래 받아온 GIT URL을 표시 합니다.
$ git remote -v
origin git://github.com/schacon/ticgit.git
복수의 원격 저장소를 설정한 경우는, git remote 명령은 모든 원격 저장소 목록을 출력 합니다. 예를 들어 필자가 이 문서를 기술하는데 사용하는 Grit 저장소의 경우는 다음과 같이 되어 있습니다.
$ cd grit
$ git remote -v
bakkdoor git://github.com/bakkdoor/grit.git
cho45 git://github.com/cho45/grit.git
defunkt git://github.com/defunkt/grit.git
koke git://github.com/koke/grit.git
origin [email protected]:mojombo/grit.git
즉, 위의 목록에 있는 사용자의 저장소의 변경된 사항을 가져올 수가 있는 것 입니다.여기서, origin 이라고 표시된 원격 저장소 만이 SSH 형식의 URL 인것을 주목해야 합니다. 내가 변경된 데이터를 Push 할 수 있는 저장소는 SSH 형식의 URL이 표시된 origin 만 가능 합니다. (그 이유에 대해서는 제 4장에서 설명 합니다.)
2.5.2. 원격 저장소(Remote Repository)의 추가
지금까지 GIT 사용법을 작성하면서 몇 번이나 원격 저장소(Remote Repository)의 추가를 실시해 왔지만, 여기서 다시 한 번 그 방법을 제대로 설명하고자 합니다. 새로운 원격 저장소(Remote Repository)에 접근하기 위해서는, git remote add [shortname] [url] 형식으로 명령어를 수행 합니다.
$ git remote
origin
$ git remote add pb git://github.com/paulboone/ticgit.git
$ git remote -v
origin git://github.com/schacon/ticgit.git
pb git://github.com/paulboone/ticgit.git
앞에 shortname은 일종의 alias라고 생각하시면 됩니다. 기존에 URL을 전부 입력하는 대신 위와 같이 설정하면 pb라는 short name만을 사용하면 됩니다. 예를 들어, paulboone의 원격 GIT의 정보 중에 내가 받은 저장소에 아직 존재하지 않는 모든 것을 취득하려면 git fetch pb를 실행하면 됩니다.
$ git fetch pb
remote: Counting objects: 58, done.
remote: Compressing objects: 100% (41/41), done.
remote: Total 44 (delta 24), reused 1 (delta 0)
Unpacking objects: 100% (44/44), done.
From git://github.com/paulboone/ticgit
* [new branch] master -> pb/master
* [new branch] ticgit -> pb/ticgit
위에서 보이는 것과 같이 Paul의 마스터 브랜치(이하부터 Branch를 브랜치로 대체 합니다.)는 로컬에서 pb/master로 접근 할 수 있습니다. 따라서 위의 내용을 자신의 브랜치에 머지(통합)하거나 로컬 브랜치로서 체크아웃하고 변경된 내용을 열어볼 수 있게 됩니다.
2.5.3. 원격 저장소(Remote Repository)로부터의 패치(Fetch), 그리고 풀(Pull)
데이터를 원격 저장소(Remote Repository)로부터 취득하려면 다음과 같은 명령을 실행 합니다.
$ git fetch [remote-name]
이 명령은, 원격 저장소(Remote Repository)의 모든 데이터중에서 여러분이 아직 가지고 있지 않은 데이터를 꺼내는 명령 입니다. 이 명령을 실행하면 원격 저장소(Remote Repository)에 있는 모든 브랜치를 참조할 수 있게 되어, 언제라도 그것을 머지(Merge)하거나 내용을 열람하는 것이 가능해 집니다.(브랜치의 개념과 사용 방법에 대해서는 제 3장에서 보다 자세하게 설명 합니다.)
저장소(Repository)를 클론 했을 때에는 원격 저장소(Remote Repository)에 대해서 자동적으로 origin이라는 이름이 붙어 집니다. 즉, git fetch origin 명령을 입력하면, 클론 했을 때(혹은 바로 앞의 fetch를 실행했을 때) 이후에 서버에 푸쉬(Push) 된 변경을 모두 취득할 수 있습니다.
여기서 주의해야 할 점은 fetch 명령은 데이터를 로컬 저장소에서 꺼내기만 한다는 것 입니다. 따라서 로컬 저장소에 원격 저장소의 내용이 머지(Merge)되거나 작업 중의 내용이 변경되지는 않습니다. 따라서, 필요에 따라서 스스로 데이터를 Merge할 필요가 있습니다.
원격 브랜치를 추적하기 위한 브랜치를 작성하면 (다음의 섹션과 제 3장에서 자세하게 설명 합니다.) git pull 명령을 사용할 수 있습니다. 이 명령은 자동적으로 패치(Fetch)를 실시해, 원격 브랜치의 내용을 현재의 브랜치에 머지(Merge) 합니다.
일반적인 용도에서는 이 명령이 간단하고 쉽기 때문에 많이 사용 합니다.
또한 기본적으로 git clone 명령은 로컬의 master 브랜치가 원격 저장소의 master 브랜치를 추적하도록 자동으로 설정 합니다. (이것은 원격 저장소에 master 브랜치가 존재하고 있다는 것을 전제로 하고 있습니다.)
따라서, git pull 명령을 실행하면 통상적으로 최초로 클론 한 서버로부터 데이터를 취득해, 현재 작업중인 코드에 머지를 시도 합니다.
2.5.4. 원격 저장소로의 푸쉬(Push)
여러분이 작업하는 프로젝트를 다른 사람들과 공유하길 원한다면, 이 프로젝트를 상위 저장소에 푸쉬해야 합니다. 이를 위한 명령이 git push [remote-name] [branch-name] 입니다. master 브랜치의 내용을 origin 서버(다시 한번 말씀드리지만, 저장소를 클론한 지점에서 이 브랜치 이름과 서버 이름이 자동으로 설정 됩니다.)에 푸쉬 하고 싶은 경우 다음과 같이 실행 합니다.
$ git push origin master
이 명령이 동작하는 것은, 자신이 접근 권한을 가지는 서버로부터 저장소를 클론했으며, 클론 한 이후에 아무도 저장소를 클론한 서버에 푸쉬하지 않은 경우에만 해당 됩니다. 만약 당신 이외에 누군가가 같은 서버로부터 저장소를 클론하고, 누군가가 원격 서버에 푸쉬를 한 이후에, 여러분이 푸쉬를 하려고 하면 이 명령은 거부 됩니다. 푸쉬가 거부되었을 경우에는 우선 누군가가 푸쉬한 작업의 내용을 꺼내와 로컬 환경에 저장하지 않으면 푸쉬 할 수 없습니다. (이것은 분산형 소스코드 버전 관리 시스템에서 데이터의 무결성을 보장하기 위한 방편 입니다.)
원격 서버에 푸쉬 방법에 대한 상세한 강좌는 제 3장을 참조해 주시기 바랍니다.
2.5.5. 원격 저장소의 조사
특정 원격 저장소의 정보를 좀 더 자세하게 알고 싶은 경우는 git remote show [remote-name] 명령을 실행 합니다. 예를 들어 origin과 같이 이름을 지정하면 다음과 같은 결과를 얻을 수 있습니다.
$ git remote show origin
* remote origin
URL: git://github.com/schacon/ticgit.git
Remote branch merged with 'git pull' while on branch master
master
Tracked remote branches
master
ticgit
위와 같은 메시지가 나오며 여기에는 원격 저장소의 URL과 추적 대상이 되고 있는 브랜치의 정보가 표시 됩니다. 또한 친절하게 "master 브랜치 상에서 git pull 명령을 입력하면 자동적으로 원격저장소의 master 브랜치를 머지 한다."라고 설명이 되어 있습니다. 또한 모든 원격 저장소의 정보에 대한 목록이 나타 납니다.
Git를 사용하면 할 수록 git remote show 명령을 통해 얻을 수 있는 정보가 계속 증가하게 됩니다. 예를 들어 다음과 같은 결과를 얻게 될 수도 있습니다.
$ git remote show origin
* remote origin
URL: [email protected]:defunkt/github.git
Remote branch merged with 'git pull' while on branch issues
issues
Remote branch merged with 'git pull' while on branch master
master
New remote branches (next fetch will store in remotes/origin)
caching
Stale tracking branches (use 'git remote prune')
libwalker
walker2
Tracked remote branches
acl
apiv2
dashboard2
issues
master
postgres
Local branch pushed with 'git push'
master:master
이 명령은 특정의 브랜치 상에서 git push 했을 때에 어느 브랜치에 자동적으로 푸쉬가 되는지를 표시하고 있습니다. 또한 서버상의 원격 저장소 중 로컬 저장소에 저장되지 않은 것, 로컬 저장소에는 있으나 서버상에는 존재하지 않는 것, git pull 명령을 실행했을 때 자동적으로 머지 되는 브랜치 등도 표시되고 있습니다.
2.5.6. 원격 저장소 참조의 삭제 및 이름 변경
만약 원격 저장소를 참조하는 이름을 변경하고 싶은 경우, git remote rename 명령을 사용할 수 있습니다. 예를 들어 pb라는 원격 저장소의 참조 이름을 paul로 변경하고 싶을 경우에는, git remote rename 명령을 다음과 같이 실행 합니다.
$ git remote rename pb paul
$ git remote
origin
paul
이것은 원격 저장소의 이름도 변경되는 것을 덧붙여 알아두셔야 합니다. 지금까지 pb/master로 참조하고 있던 브랜치는 위의 명령을 수행한 이후부터 paul/master로 변경됩니다.
또한 어떤 이휴로 원격 저장소의 참조를 삭제하고 싶은 경우 (서버를 이동했다던가, 특정 미러(Mirror)를 사용하지 않게 되었거나, 프로젝트의 참여 멤버가 빠지게 된 경우)에는 git remote rm 명령을 사용 합니다.
$ git remote rm paul
$ git remote
origin
번역 괜찮은데요. 충분히 훌륭합니다^^ 잘보고 있습니다.