[GIT] 리모트 브랜치

리모트 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