원격 저장소
다른 사람과 협업을 하려면 원격 저장소가 필수적이다. 한 프로젝트 내에 원격 저장소가 여러 개 있을 수 있으며 원격 저장소의 push 권한, fetch 권한을 얻는다면 push 혹은 fetch 명령어를 사용할 수 있다.
원격 저장소 확인
git remote 명령으로 프로젝트에 등록된 리모트 저장소를 확인 할 수 있다.
저장소를 clone 하면 리모트 저장소가 'origin'이라는 이름으로 자동 등록 된다.
원격 저장소 추가
git remote add <단축이름> <url> 명령으로 url에 위치한 저장소를 원격 저장소로 등록한다.
리모트 브랜치
로컬 저장소의 브랜치 종류는 non-tracking local branch, tracking local branch, remote tacking branch로 나뉘며 리모트 저장소에는 오직 remote branch만 존재한다. remote branch와 remote tacking branch를 살펴보자.
- remote branch : 리모트 저장소에 존재하는 브랜치이다. 다른 사람들이 볼 수 있어 fetch나 push 할 수 있다.
- remote tracking branch : 로컬 저장소에 존재하며 리모트 브랜치를 추적하는 브랜치이다. 즉 fetch 시 리모트 브랜치와 같은 커밋을 가리키도록 업데이트 된다.
원격 저장소를 추가하면 로컬 저장소에서도 리모트 브랜치와 태그를 확인 할 수 있어야한다. git은 이를 위해 리모트 트래킹 브랜치를 제공한다. 리모트 트래킹 브랜치는 리모트 브랜치를 추적하는 브랜치이다. 즉 리모트 서버에서 fetch로 데이터를 가져오면 리모트 트래킹 브랜치는 리모트 브랜치와 같은 커밋을 가리키도록 업데이트 된다. 리모트 트래킹 브랜치의 이름은 <remote>/<branch> 형식으로 되어있다. 예를 들어 리모트 저장소 origin의 master 브랜치를 확인하고 싶다면 fetch 한 뒤 origin/master 브랜치를 확인하면 된다. 그러면 fetch 한 시점의 리모트 저장소 origin의 master 브랜치를 확인 할 수 있다. 리모트 트래킹 브랜치는 오직 fetch 할 때만 움직이며 임의로 움직일 수 없다.
예를 들어보자. 원격 저장소 git.ourcompany.com을 내 컴퓨터로 clone하면 로컬 저장소의 각 브랜치는 다음의 커밋을 가리킨다. (clone시 origin이라는 이름으로 원격 저장소가 추가된다.)
그 후 로컬 저장소에 작업을 진행하는데 누군가 리모트 저장소 origin에 push하면 아래와 같은 히스토리를 갖게 될 것이다.
이 상태에서 git fetch origin 명령어를 실행하면 리모트 트래킹 브랜치 origin/master가 아래와 같이 업데이트 된다.
이와 같이 원격 저장소에 있는 리모트 브랜치는 로컬 저장소에서 리모트 트래킹 브랜치로 확인 가능하다. 리모트 트래킹 브랜치를 통해 리모트 브랜치가 어떤 히스토리를 가졌으며 어떤 커밋을 가리키는지 확인 할 수 있다.
Push
로컬 브랜치를 리모트 브랜치로 전송하려면 git push <remote> <branch> 명령을 사용한다. 원격 저장소의 push 권한이 있어야한다. git push origin serverfix시 로컬 브랜치 serverfix를 리모트 브랜치 serverfix로 전송한다. 이때 중요한 점은 전송한 로컬 브랜치를 리모트 브랜치에서 fast-forward 방식으로 병합되도록 해야한다. 그렇지 않으면 push에 실패한다. 즉 다른 누군가가 리모트 브랜치에 push했다면 push하기 전에 fetch한 뒤 리모트 트래킹 브랜치와 merge 후 push 해야한다.
만약 로컬 브랜치와 리모트 브랜치의 이름이 다르다면 push 명령어를 아래와 같이 사용한다.
로컬 브랜치 serverfix를 리모트 브랜치 awesomebranch로 전송한다.
git push origin serverfix:awesomebranch
Fetch
원격 저장소로부터 데이터를 받으려면 git fetch <remote> 명령을 사용한다. 로컬 저장소가 갖고 있지 않은 새로운 데이터가 있다면 해당 데이터를 다운로드하고 리모트 트래킹 브랜치가 업데이트 된다. 이 후 리모트 트래킹 브랜치로 체크아웃 하거나 로컬 브랜치에서 merge 할 수 있다.
Pull
fetch와 merge를 한꺼번에 해주려면 git pull <remote> 명령을 사용한다. 일반적으로 pull 명령어를 사용해 fetch와 merge를 한꺼번에 하는 것 보다 fetch와 merge를 명시적으로 쓰는게 더 좋다.
'CM > Git' 카테고리의 다른 글
Git 히스토리 삭제 (0) | 2024.05.31 |
---|---|
Git branch (0) | 2022.08.01 |
Git 원리 (add,commit,status) (0) | 2022.08.01 |
Git 기초 (0) | 2022.07.31 |