리모트 트래킹 브랜치의 이름은
<remote>
/<branch>
형식으로 되어 있다.
git fetch origin
명령을 사용한다.git pull
명령과 차이점은 무엇일까?git fetch
의 경우 워킹 디렉토리의 파일 내용은 변경되지 않고 그대로 남는다. 서버로부터 데이터를 가져와서 저장해두고 사용자가 Merge 하도록 준비만 해둔다. 간단히 말하면 git pull
명령은 대부분 git fetch
명령을 실행하고 나서 자동으로 git merge
명령을 수행하는 것 뿐이다.
git remote add <name> <url>
을 통해 다른 저장소에 대한 내용을 추가시킬 수 있다. 현재 작업 중인 프로젝트에 팀의 저장소를 추가하는 예시이다.git fetch teamone
명령으로 teamone
서버의 데이터를 내려받는다. 명령을 실행해도 teamone
서버의 데이터는 모두 origin 서버에도 있는 것들이라서 아무것도 내려받지 않는다. 하지만, 이 명령은 리모트 트래킹 브랜치 teamone/master
가 31b8e
커밋을 가리키도록 만든다.
로컬의 브랜치를 서버로 전송하려면 쓰기 권한이 있는 리모트 저장소에 Push 해야 한다. 로컬 저장소의 브랜치는 자동으로 리모트 저장소로 전송되지 않는다. 명시적으로 브랜치를 Push 해야 정보가 전송된다.
serverfix
라는 브랜치를 다른 사람과 공유할 때도 브랜치를 처음 Push 하는 것과 같은 방법으로 Push 한다. 아래와 같이 git push <remote> <branch>
명령을 사용한다.
Git은 serverfix라는 브랜치 이름을 refs/heads/serverfix:refs/heads/serverfix
로 확장한다. 이것은 serverfix
라는 로컬 브랜치를 서버로 Push 하는데 리모트의 serverfix
브랜치로 업데이트한다는 것을 의미한다.
# 현재 repo에 server라는 이름으로 해당 url 저장소의 git 정보 추가
> git remote add server ../Original-Server
# server에 해당하는 저장소 정보를 동기화 (아직 merge 없이 그저 추가)
> git fetch server
# 독립적인 프로젝트 간의 merge를 수행
> git merge --allow-unrelated-histories server/master
# remote 서버 제거
> git remote remove server
# 변경 사항 몯 반영
> git add .
# 커밋
> git commit -m "Merge server project into original-project"
# 푸시
> git push