본문 바로가기
개발 도구 및 Git 사용법/git (협업 툴) 사용법 정리

Git : git clone 이후 모든 브랜치를 원격에서 로컬 브랜치로 가져오기

by 번데기 개발자 2024. 8. 14.
반응형

 

 

원격 브랜치를 로컬 브랜치로 가져올때 유의점

 

Git을 clone한 이후 모든 브랜치를 가져왔다고 생각하지만 보통 현재 활성화된 브랜치(default) 만 가져올 때가 많습니다.

 

보통 `git fetch --all (원격 저장소 변경사항 반영)` 또는 `git pull --all (브랜치를 로컬로 병합)` 명령어를 통해서 브랜치를 가져오게 되는데요, 이때 모두 올바르게 가져왔다고 생각하지만 이는 원격 추적 브랜치 의 변경사항만을 업데이트한것으로 실제 브랜치들은 로컬 브랜치로 가져오지 않습니다.

 

 

 

여기서, 원격에 있는 브랜치들의 상태 (삭제, 생성, 업데이트 갱신)을 로컬에서 추적하고 있는 브랜치를 원격 추적 브랜치 라고 합니다.

 

만약 이상태에서 원격의 연결이 끊어지게 되면 현재 브랜치가 아닌 다른 브랜치들은 로컬 브랜치에 존재하지 않기때문에 checkout할 수 없습니다.

 

따라서 원격에 있는 브랜치를 로컬에 가져오기 위해서는 checkout을 통해 가져오고 싶은 원격의 브랜치를 각각 이동하여야 하는데요, 브랜치가 한두개라면 문제가 안되지만 브랜치가 많아질 경우 해당 브랜치를 checout으로 이동하는 작업이 번거로워집니다. 

 

 

스크립트로 모든 원격 브랜치를 로컬 브랜치로 가져오기 

 

아래 스크립트를 사용하면 원격에 있는 모든 브랜치를 로컬로 가져올 수 있습니다.

 

git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all

 

 

`git branch -r | grep -v '-v'`

  • ->를 포함하지 않는 원격 브랜치의 목록을 가져옵니다 (포인터를 제외한 원격 브랜치를 출력)

`while read remote; do git branch --track "${remote#origin/}" "$remote"; done` 

  • 원격을 제외한 문자열 "${remote#origin/}" 을 통해 로컬에 브랜치를 만들고, 원격 ${remote}에 연결합니다. 
  • ex) git branch --track test origin/test

 

명령어 실행 결과

 

 

위 명령 이후 아래와 같이 원격의 모든 브랜치로 가져올수 있는 것을 확인할 수 있습니다.

 

 

 

마무리

 

오늘은 모든 원격에 있는 브랜치를 로컬 브랜치로 가져오는 방법에 대해 정리해보았는데요,

 

회사에서 예전에 NAS 서버에 백업을 하려다가, git clone만 받고 브랜치들은 날려먹을뻔한 적이 있어서 한번 다시 기록을 해두었습니다.

 

다음번에도 GIT 관련 주제로 유용한 포스팅 주제가 생기면 공유드리도록 하겠습니다.

 

감사합니다.

 

 

 

참고

 

https://github.com/jobhope/TechnicalNote/blob/master/github/CloneRepository.md

 

 

반응형