원격 저장소를 이용하여 작업하기

 

이번에는 원격 저장소의 프로젝트와 상호작용하는 방법을 다루게 될 것이다.

 

어떠한 형태의 원격 저장소가 있는가?

어떻게 원격 저장소 복사본을 생성하는가?

어떻게 원격 저장소의 변경 사항을 가져와 최신 상태로 유지하는가?

어떻게 자신의 변경 사항을 푸싱하여 원격 저장소에 공유하는가?

어떻게 원격 브랜치와 작업하는가?

어떻게 새로운 원격 저장소를 추가 하는가?

 

□ 네트워크 프로토콜

 

Git는 SSH, git, HTTP/HTTPS 이렇게 3개의 프로토콜로 원격 저장소와 통신을 하게 된다.

 

□ SSH(Secure Shell)

git@github.com/tswicegood/mysite-chp6.git

 

git는 사용자 명이다.

github.com은 서버이름이다.

맨마지막은 저장소의 경로를 의미한다.

 

□ git

속도를 위해서 설계되어진 전용 프로토콜이다.

주로 read only로 저장소를 공유할 때 사용 한다.

하지만 네트워크 9418번 port를 사용하기 때문에 방화벽으로 인해서 막히는 현상이 자주 발생 한다.

 

git://github.com/tswicegood/mysite-chp6.git

 

SSH와 가장큰 차이점은 git가 사용자 아이디가 아니라, 그냥 git 프로토콜을 나타내는 접두어 git일 뿐이라는 것이다. 즉 임의의 사용자의 접근을 허용한다는 의미이다. 따라서 읽기전용만 된다는 것이다.

 

□ HTTP/HTTPS

최후의 수단이다. 따라서 느리고, 네트워크에 부담도 많이 준다.

하지만 방화벽 문제는 거의 발생시키지 않는다. well-known port를 사용하기 때문이다.

 

http[s]://github.com/tswicegood/mysite-chp6.git

 

□ 원격 저장소 복제하기

 

git clone [저장소 주소]

 

복제 명령어 clone을 통해서 생성된 복사본은 git init으로 직접 생성한 저장소처럼 동작 한다.

 

 

변경이력을 최신으로 만들기

 

방법 1) 아직 미완성

git fetch // branch의 이력을 최신으로 업데이트한다.

 

fetch를 실행하면 지역 저장소의 원격 브랜치가 갱신된다. 즉 -r이나 -a를 해서 보면 목록이 갱신된것을 볼 수 있다. 하지만 이때, 지역 브랜치에 가져온 원격 브랜치의 변경 사항들은 merge 되지 않는다. 즉 변강사항들이 반영되지 않는다는 말이다.

 

git branch -r // r option은 remote branch의 목록을 보는것이다.

 

아직 불안전한 방법이다.

 

방법 2) 완성된 방법

 

git remote //원격 저장소의 별칭을 알아낸다.

git remote show [원격 저장소 별칭] // 원격 저장소의 별칭에 대한 주소와 remote branch의 정보를 알아온다.

git pull [원격저장소 별칭] // 원격 저장소의 별칭을 이용해서 변경이력을 가져와 현재 브랜치와 합병한다. 

git remote add [원격 저장소 별칭] [원격저장소 full address] // 원격 저장소의 풀주소(git://, ssh://, http[s]://)를 해당 별칭으로 등록 한다.

 

그러닌까 pull은 원격저장소의 내용을 현재 branch로 합병 시켜버린다.

 

만약 원격 저장소의 이름이 origin/next라고하면

git pull origin next 이렇게해야한다.

'/'를 쓰면 안된다.

 

pull을 반영 시킬 현재 브랜치를 설절하고 싶다면 <참조>를 이용한다.

git pull origin next:current_next // current_next라는 현재 지역 저장소의 브랜치에 원격 저장소의 next 브랜치의 내용을 합병 시킨다.

 

즉, git pull이란 아래의 명령어를 사용한 효과와 동일하다.

git fetch orgin

git merge origin/next

 

 

변경 사항 푸싱하기

 

git push

매개 변수 없이 실행하면, origin 저장소에 푸싱한다고 생간한다. 또한 지역 저장소의 현재 브랜치를 원격의 같은 이름의 브랜치에 푸싱한다고 여긴다. 이때, 원격 저장소에 같은 이름의 브랜치가 존재해야한다.

 

git push <저장소> <참조>

사용 형태는 pull과 비슷하다. pull을 이해했다면 모든것을 반대로만 생각해주면 쉽게 사용 할 수 있다.

 

+ Recent posts