Git Repository란? (=원격 레포지토리, 리모트 저장소, 원격 저장소)
: 인터넷이나 네트워크 어딘가에 있는 저장소를 말한다.
ㄴ>※ 원격 저장소라 하더라도 로컬 시스템에 위치할 수도 있다. (사실 같은 로컬 시스템에 존재할 수도 있다.)
'remote' 라는 이름은 반드시 저장소가 네트워크나 인터넷을 통해 어딘가 멀리
떨어져 있어야만 한다는 것을 의미하지 않는다.
물론 일반적인 원격 저장소와 마찬가지로 Push, Pull 등의 기능은 동일하게 사용한다.
- 다른 사람들과 함께 일한다는 것은 '리모트 저장소를 관리'하면서 데이터를 거기에 Push 하고 Pull 하는 것
ㄴ> '리모트 저장소를 관리'한다' : 저장소를 추가, 삭제하는 것뿐만 아니라 브랜치를 관리하고 추적할지 말지 등을 관리
내용이 길어질 것 같다.. 일단 포스팅 목차를 보자면 아래와 같다!
1. Git Repository 확인하기 : $ git remote 2. Git Repository 추가하기 : $ git remote add <단축이름> <url> 3. Git Repository 가져오기 : $ git fetch <Repository alias> <branch>또는 $ git pull <Repository alias> <branch> 4. Git Repository에 수정사항 저장하기 : $ git push <Repository alias> <branch> 5. Git Repository 확인하기 : $ git remote show <Repository alias> 6. Git Repository 이름 변경하기 : $ git remote rename <현재 Repository alias> 7. Git Repository 삭제하기 : $ git remote remove <Repository alias> 또는 $ git remote rm <Repository alias> |
1. Git Repository 확인하기 : $ git remote
: 현재 프로젝트에 등록된 리모트 저장소를 확인하는 명령어
ㄴ> $ git remote 명령어 실행 시 리모트 저장소의 단축 이름을 보여준다.
ㄴ> 저장소를 Clone 하면 `origin`이라는 리모트 저장소가 자동으로 등록되기 때문에 `origin`이라는 이름을 볼 수 있다.
ㄴ> ex▼)
$ git clone https://github.com/schacon/ticgit
Cloning into 'ticgit'...
remote: Reusing existing pack: 1857, done.
remote: Total 1857 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (1857/1857), 374.35 KiB | 268.00 KiB/s, done.
Resolving deltas: 100% (772/772), done.
Checking connectivity... done.
$ cd ticgit
$ git remote
origin
- '-v' 옵션 : 단축이름과 URL을 함께 확인
$ git remote -v |
ㄴ> 리모트 저장소가 여러 개 있다면 이 명령은 등록된 전부를 보여준다.
ㄴ> ex▼)
$ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)
2. Git Repository 추가하기(=원격 저장소 연결)
: $ git remote add <단축이름> <url>
: 기존 Working directory에 새 리모트 저장소를 추가하는 명령어 (= 새 원격 저장소를 로컬에 연결한다)
ㄴ> ex1) 프로젝트에 등록된 'orgin' 저장소 외 새로운 Git Repository 'pd'를 추가하고자 할 때
$ git remote
origin
$ git remote add pb https://github.com/paulboone/ticgit
$ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)
pb https://github.com/paulboone/ticgit (fetch)
pb https://github.com/paulboone/ticgit (push)
ㄴ> 기존 'orgin' 외 새로운 Git Repository 'pd'가 생겼고, URL 대신에 'pb' 라는 이름을 사용할 수 있다.
ㄴ> 이 프로젝트에는 이제 2개의 저장소 'orgin'과 'pd'가 등록되어 있다.
ㄴ> ex2) ex1 이후 로컬 저장소에는 없는 'pd' 저장소의 데이터들을 가져오려면 '$git fetch <저장소 별칭>'
$ git fetch pb
remote: Counting objects: 43, done.
remote: Compressing objects: 100% (36/36), done.
remote: Total 43 (delta 10), reused 31 (delta 5)
Unpacking objects: 100% (43/43), done.
From https://github.com/paulboone/ticgit
* [new branch] master -> pb/master
* [new branch] ticgit -> pb/ticgit
ㄴ> 이제 로컬에서 'pb/master' 가 'pd' 저장소의 master 브랜치이다.
이 브랜치를 로컬 브랜치중 하나에 Merge 하거나 Checkout 해서 브랜치 내용을 자세히 확인할 수 있다.
3. Git Repository 가져오기
: $ git fetch <Repository alias> <branch>
또는 $ git pull <Repository alias> <branch>
: Remote Repository의 내용을 내 로컬로 가져오기 (= 리모트 저장소를 Pull 하거나 Fetch 하기)
ㄴ> Remote Repository의 내용과 Working directory의 데이터가 달라 충돌이 발생할 수 있다!!
1. $ git fetch <Repository alias>
: 로컬에는 없지만, Remote Repository에는 있는 데이터를 가져오나, 자동으로 Merge 하지 않는다
- 로컬에서 하던 작업을 정리하고 나서 수동으로 Merge 해야 한다.
- 저장소를 Clone 하면 명령은 자동으로 리모트 저장소를 'origin' 이라는 이름으로 추가한다.
그래서 나중에 $ git fetch origin 명령을 실행하면 마지막으로 가져온 이후 수정된 것을 모두 가져온다.
2. $ git clone
: 자동으로 로컬의 master 브랜치가 리모트 저장소의 master 브랜치를 추적하도록 한다
- 저장소를 Clone 하면 명령은 자동으로 리모트 저장소를 'origin' 이라는 이름으로 추가한다.
3. $ git pull <Repository alias>
: clone 한 Remote Repository에 데이터를 가져오고, 자동으로 Merge 한다. (로컬 작업 코드와)
- 다른 사람이 commit했을 때 그 내용을 클라이언트로 내려받는 명령어
- Ex) $ git pull origin master : origin의 내용이 master로 복사
4. Git Repository에 수정사항 저장하기
: $ git push <Repository alias> <branch>
: Remote Repository에 현재 스냅샷을 저장(=commit한다)
= 프로젝트를 공유하고 싶을 때 Upstream 저장소에 '$ git push'할 수 있다.
[업스트림(upstream)] 은 클라이언트나 로컬 기기(일반적으로 컴퓨터나 모바일기기)에서 서버나 원격 호스트로 보내지는(전송되는) 데이터 또는 보내는 것을 의미한다.
cf) [다운스트림(downstream)]은 반대로 서버에서 로컬 기기로 전송되는 데이터의 흐름을 말한다.
ㄴ> ex) master 브랜치를 'origin' 서버에 저장하려면 : $ git push origin master
$ git push origin master
ㄴ> ※ 주의 : 이 명령은 clone 한 리모트 저장소에 쓰기 권한이 있고, clone 하고 난 이후
아무도 Remote Repository(Upstream 저장소)를 수정하지 않았을 때만 사용할 수 있다.
다시 말해서 clone 한 사람이 여러 명 있을 때, 다른 사람이 Push 한 후에 Push 하려고 하면 Push명령을 할 수 없다.
먼저 다른 사람이 작업한 것을 가져와서 Merge 한 후에 Push명령어를 사용할 수 있다.
5. Git Repository 확인하기
: $ git remote show <Repository alias>
: Remote Repository의 구체적인 정보를 확인
- $ git remote show <Repository alias> 명령어 실행 시 간략하게는 URL과 추적하는 브랜치 등을 보여준다.
- $ git pull 명령을 실행할 때 master 브랜치와 Merge 할 브랜치가 무엇인지 보여 준다
ㄴ> ex1) 간략한 저장소 정보 출력 예
$ git remote show origin
* remote origin
Fetch URL: https://github.com/schacon/ticgit
Push URL: https://github.com/schacon/ticgit
HEAD branch: master
Remote branches:
master tracked
dev-branch tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)
ㄴ> ex2) 대규모 작업이 연관되어 다양한 저장소 정보가 출력되는 예
$ git remote show origin
* remote origin
URL: https://github.com/my-org/complex-project
Fetch URL: https://github.com/my-org/complex-project
Push URL: https://github.com/my-org/complex-project
HEAD branch: master
Remote branches:
master tracked
dev-branch tracked
markdown-strip tracked
issue-43 new (next fetch will store in remotes/origin)
issue-45 new (next fetch will store in remotes/origin)
refs/remotes/origin/issue-11 stale (use 'git remote prune' to remove)
Local branches configured for 'git pull':
dev-branch merges with remote dev-branch
master merges with remote master
Local refs configured for 'git push':
dev-branch pushes to dev-branch (up to date)
markdown-strip pushes to markdown-strip (up to date)
master pushes to master (up to date)
ㄴ> 브랜치명을 생략하고 $ git push 명령을 실행할 때 어떤 브랜치가 어떤 브랜치로 Push 되는지,
아직 로컬로 가져오지 않은 리모트 저장소의 브랜치는 어떤 것들이 있는지,
서버에서는 삭제됐지만 아직 가지고 있는 브랜치는 어떤 것인지,
git pull 명령을 실행했을 때 자동으로 Merge 할 브랜치는 어떤 것인지 등을 보여준다.
6. Git Repository 이름 변경하기
: $ git remote rename <현재 Repository alias>
: Remote Repository의 이름을 변경
- ※ 주의) 로컬에서 관리하던 Remote Repository의 브랜치 이름도 바뀐다
ㄴ> ex1) Repository 'pb' 를 'paul' 로 변경하기
$ git remote rename pb paul
$ git remote
origin
paul
ㄴ> 여태까지 pb/master 로 리모트 저장소 브랜치를 사용했으면 이제는 paul/master 라고 사용해야 한다.
7. Git Repository 삭제하기
: $ git remote remove <Repository alias>
또는 $ git remote rm <Repository alias>
: Remote Repository를 삭제한다.
- ※ 주의) 해당 리모트 저장소에 관련된 추적 브랜치 정보나 모든 설정 내용도 함께 삭제된다.
- 사용) 서버 정보가 바뀌었을 때 / 더이상 별도의 백업 미러가 필요하지 않을 때 / 더이상 활동하지 않을 때
ㄴ> ex)
$ git remote remove paul
$ git remote
origin
END!
스터디 도움 참조 블로그 (References)
- 버전 관리(VC) 위키백과 https://ko.wikipedia.org/wiki/%EB%B2%84%EC%A0%84_%EA%B4%80%EB%A6%AC - 누구나 쉽게 이해할 수 있는 Git 입문 https://backlog.com/git-tutorial/kr/ /입문편/Git의 기본/이력을 관리하는 저장소 https://backlog.com/git-tutorial/kr/intro/intro1_2.html - git--distributed-even-if-your-workflow-isnt (Pro Git Book) https://git-scm.com/book/en/v2 - git--distributed-even-if-your-workflow-isnt (Pro Git Book) / ch2.5 https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EA%B8%B0%EC%B4%88-%EB%A6%AC%EB%AA%A8%ED%8A%B8-%EC%A0%80%EC%9E%A5%EC%86%8C - Upstream wiki https://ko.wikipedia.org/wiki/%EC%97%85%EC%8A%A4%ED%8A%B8%EB%A6%BC_(%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC) |