리모트 Refs
- 리모트 Refs는 리모트 저장소에 있는 포인터인 레퍼런스로, 리모트 브랜치, 태그 등을 의미한다.
-
$ git ls-remote [remote] # 모든 리모트 Refs를 조회할 수 있습니다. $ git remote show [remote] # 모든 리모트 브랜치와 정보를 보여줍니다.
리모트 트래킹 브랜치
- 리모트 트래킹 브랜치는 리모트 브랜치를 추적하는 로컬의 레퍼런스이자 브랜치이다.
- 로컬에서 임의로 조작할 수 없으며, 리모트 서버에 연결할 때마다 자동으로 갱신된다.
- 이름은 <remote>/<branch> 형식으로 표현되며, 예를 들어 origin/master는 origin 서버의 master 브랜치를 가리킨다.
-
$ git clone -o booyah # booyah/master 라고 사용자가 정한 대로 리모트 이름을 생성해준다.
리모트 서버와 로컬의 작업 흐름
- Git에서는 리모트 저장소로부터 데이터를 가져오려면 git fetch [remote] 명령을 사용한다.
- git fetch 명령은 리모트 서버의 정보를 확인하고 새로운 데이터가 있으면 내려받아 로컬 저장소를 업데이트하며, 리모트 트래킹 브랜치의 위치도 최신 커밋으로 이동시킨다.
여러 개의 리모트 저장소
- 여러 리모트 저장소를 운영하는 상황에서는 각각의 리모트 저장소에 대한 리모트 트래킹 브랜치를 관리한다.
- git remote add [name] [url] 명령으로 새로운 리모트 저장소를 추가하고, git fetch [remote] 명령으로 해당 리모트 저장소의 데이터를 내려받을 수 있다.
브랜치 PUSH하기
- 로컬 브랜치를 리모트 저장소로 Push 하려면 쓰기 권한이 있는 리모트 저장소에 명시적으로 Push해야 합니다. 브랜치를 처음 Push하는 경우 git push <remote> <branch> 명령을 사용합니다.
-
$ git push origin serverfix
- 이름이 다를 경우에는 git push origin serverfix:awesomebranch처럼 사용할 수 있습니다.
- 만약 HTTPS URL을 사용하는 리모트 저장소를 사용하고 있다면, Git은 사용자이름이나 암호를 물어볼 것입니다. 이를 피하기 위해 "credential cache" 기능을 활성화할 수 있습니다.
-
$ git config --global credential.helper cache # 기본으로 15분 동안 인증 절차 요구하지 않습니다. $ git config --global credential.helper 'cache --timout=3600' # 3600초(1시간)으로 변경
- 리모트 저장소에 Push한 후에는 다른 개발자가 해당 브랜치를 Fetch 하여 로컬에 가져올 수 있습니다. Fetch 한 후에는 origin/serverfix 브랜치로 리모트 트래킹 브랜치를 이용하여 작업할 수 있습니다.
-
$ git fetch origin
- 이제 다른 개발자가 origin/serverfix 브랜치를 Merge하거나 이를 기반으로 새로운 브랜치를 만들어 작업할 수 있습니다.
-
$ git checkout -b serverfix origin/serverfix
브랜치 추적
- 리모트 트래킹 브랜치를 로컬 브랜치로 Checkout하면 자동으로 트래킹 브랜치가 생성됩니다.
- 이 트래킹 브랜치는 리모트 브랜치와 직접적인 연결이 있는 로컬 브랜치이며, 이 브랜치에서 git pull 명령을 실행하면 리모트 저장소로부터 데이터를 가져와 연결된 리몬트 브랜치와 자동으로 Merge합니다.
- 서버로부터 저장소를 Clone하면 Git은 자동으로 master 브랜치를 origin/master 브랜치의 트래킹 브랜치로 만듭니다.
- 트래킹 브랜치를 직접 만들고 싶다면, 리모트를 origin 이 아닌 다른 리모트로 하거나, 브랜치를 master가 아닌 다른 브랜치로 추적하게 할 수 있습니다.
-
$ git checkout --track origin/serverfix # 리모트 트래킹 브랜치를 로컬 브랜치로 Checkout하면 자동으로 트래킹 브랜치가 생성됩니다.
-
$ git checkout serverfix # 로컬에 브랜치가 없고 리모트가 하나인 경우 간략한 생성 방법
-
$ git checkout -b sf origin/serverfix # 트래킹 브랜치를 직접 생성
-
$ git branch -u origin/serverfix # 이미 로컬 브랜치가 존재하는 경우 트래킹 브랜치 설정 # git branch 명령에 -u 나 --set-upstream-to 옵션을 붙여서 설정할 수 있습니다.
-
$ git branch -vv # 트래킹 브랜치 상태 확인
- 브런치에서 ahead라고 표시된 거는 push해야할 커밋이고 behind라고 표시된 거는 pull받아야할 커밋입니다.
- 이 명령에서 중요한 점은 결과가 마지막으로 서버에서 데이터를 가져온(fetch) 시점을 기준으로 계산된다는 것입니다. 단순히 이 명령만으로는 서버의 최신 데이터를 반영하지 않으며 로컬에 저장된 서버의 캐시 데이터를 사용합니다.
- 현재 시점에서 진짜 최신 데이터로 추적 상황을 알아보려면 먼저 서버로부터 최신 데이터를 받아와야 한 후에 추적 상황을 확인해야 합니다. 아래와 같이 두 명령을 이어서 사용하는 것이 적절합니다.
-
$ git fetch --all; git branch -vv
Pull 하기
- fetch 명령으로 서버에는 존재하지만 로컬에는 아직 없는 데이터를 가져와 저장합니다.
- 워킹 디렉토리의 파일 내용은 변경되지 않고 그대로 남아있습니다. merge를 따로 수행해야합니다.
-
$ git fetch origin $ git merge origin/master
- git pull 명령은 주로 git fetch 명령을 실행하고 나서 자동으로 git merge 명령을 수행합니다.
-
$ git pull origin master
리모트 브랜치 삭제
- 리모트 브랜치를 삭제하려면 git push 명령에 --delete 옵션을 사용합니다.
-
$ git push origin --delete serverfix
'GIT > Git 브랜치' 카테고리의 다른 글
[GIT] Rebase 하기 (0) | 2024.02.13 |
---|---|
[GIT] 브랜치 워크플로 (0) | 2024.02.13 |
[GIT] 브랜치 관리 (1) | 2024.02.13 |
[GIT] 브랜치와 Merge의 기초 (0) | 2024.02.13 |
[GIT] 브랜치란 무엇인가 (0) | 2024.02.08 |