09. git-브랜치만-clone하기

깃(Git) 원격 저장소(리포지토리, Repository)에서 특정 브랜치(Branch)를 지정하여 로컬 환경으로 복제(클론, Clone)하는 방법을 설명한다. 기본 복제 명령을 실행하면 저장소의 기본 브랜치가 작업 공간에 설정되지만, 옵션을 활용하면 처음부터 원하는 브랜치를 선택하여 복제할 수 있다. 모든 브랜치 데이터를 함께 가져오며 대상 브랜치를 전환하는 방법과, 다른 브랜치를 제외하고 대상 브랜치만 선별하여 복제하는 방법의 차이를 다룬다.

원격 브랜치 복제 방식 비교 — 전체 브랜치 이력을 가져오는 방식과 대상 브랜치만 선별하여 내려받는 방식을 비교한다.

주요 개념 정의

클론(Clone)은 원격 저장소의 파일과 전체 커밋 기록을 로컬 컴퓨터로 복제하는 기능이다. 원격 서버에 등록된 브랜치와 태그, 커밋 이력 메타데이터를 모두 내려받아 로컬 디렉터리에 동일한 깃 저장소를 생성한다. 원본 서적의 모든 개정판과 본문을 통째로 복사하여 개인 서재에 그대로 옮겨 놓는 복사본 제작과 같다.

브랜치(Branch)는 프로젝트의 메인 흐름에서 독립적인 작업을 진행하기 위해 갈라져 나온 작업 선이다. 기존 커밋을 기준으로 새로운 분기점을 생성하여 다른 작업자의 변경 사항과 충돌 없이 독립적으로 기능을 개발하거나 수정한다. 큰 나무 줄기에서 뻗어 나온 나뭇가지처럼 독립적으로 뻗어나가다 필요할 때 다시 본줄기와 합쳐지는 구조와 같다.

패치(Fetch)는 원격 저장소의 최신 이력과 변경 사항을 로컬 저장소로 가져오는 작업이다. 원격 브랜치의 커밋 정보를 로컬의 원격 추적 브랜치로 가져오되, 현재 작업 디렉터리의 파일에는 자동으로 병합하지 않고 참조 상태만 갱신한다. 도서관의 신간 도서 목록을 먼저 받아와 살펴본 뒤 실제 책을 대출할지 나중에 결정하는 검토 절차와 같다.

1-리포지토리의 모든 브랜치 패치 후 특정 브랜치로 전환

원격 저장소에 존재하는 모든 브랜치 정보를 로컬로 가져오면서, 지정한 특정 브랜치를 기본 작업 브랜치로 즉시 체크아웃(Checkout)하여 작업 공간을 구성하는 명령어이다.

git clone --branch <branchname> <remote-repo-url> .

or

git clone -b <branchname> <remote-repo-url> .

명령어에 사용된 각 인자와 옵션의 역할은 다음과 같다.

  • --branch <branchname> 또는 -b <branchname>: 저장소를 복제한 직후 작업 디렉터리에 체크아웃할 브랜치 이름을 지정한다.
  • <remote-repo-url>: 복제해 올 원격 저장소의 주소이다.
  • . (마침표): 현재 디렉터리 위치에 저장소 파일들을 직접 복제한다. 마침표를 생략하면 저장소 이름과 동일한 하위 디렉터리가 새로 생성된다.

이 방식은 원격의 모든 브랜치 메타데이터를 함께 받아오므로, 복제 후 다른 브랜치로 전환해야 할 때 추가 설정 없이 즉시 브랜치를 변경할 수 있다. 다만 마침표(.)를 붙여 현재 디렉터리에 복제할 때 디렉터리 안에 파일이 이미 존재하면 오류가 발생하므로 빈 디렉터리에서 실행해야 한다.

예시

git clone -b main https://github.com/qwerewqwerew/github.git .

위 예시는 원격 저장소의 전체 이력을 로컬로 가져온 후 main 브랜치를 작업 공간에 체크아웃하여 현재 디렉터리에 배치한다. 복제 완료 후 원격의 다른 브랜치 이력도 로컬에 보관되므로 자유로운 브랜치 전환이 가능하다.

2-특정 브랜치만 패치하고 다른 브랜치는 패치안함

--single-branch는 가져올 브랜치의 범위를 제한하는 옵션이며, 최신 커밋 하나만 가져오는 옵션은 아닙니다. 해당 브랜치의 과거 이력도 필요하면 아래 명령을 그대로 사용합니다. 이력 깊이를 줄이는 --depth는 별도의 얕은 복제 옵션이므로, 브랜치 선택과 이력 길이를 구분합니다. Git 공식 clone 옵션 설명을 참고합니다.

지정한 특정 브랜치의 커밋 이력만 원격 저장소에서 내려받고, 다른 브랜치의 데이터는 일체 가져오지 않도록 제한하는 명령어이다.

git clone --branch <branchname> --single-branch <remote-repo-url> .

or 

git clone -b <branchname> --single-branch <remote-repo-url> .

명령어에 추가된 옵션의 역할은 다음과 같다.

  • --single-branch: 원격 저장소의 여러 브랜치 중 -b 또는 --branch로 지정한 단 하나의 브랜치 이력만 다운로드하도록 제한한다.

저장소의 전체 용량이 매우 크거나 특정 브랜치 코드만 내려받아 작업할 때 다운로드 시간과 디스크 사용량을 절약할 수 있다. 주의할 점은 다른 브랜치 정보가 로컬에 저장되지 않으므로, 추후 다른 브랜치로 전환하려면 원격 저장소 참조 설정을 별도로 수정해야 한다는 점이다.

예시

git clone --branch main --single-branch https://github.com/qwerewqwerew/github.git .

위 예시는 원격 저장소에서 main 브랜치에 해당하는 커밋 이력만 선별하여 현재 디렉터리에 복제한다. 다른 브랜치의 메타데이터는 로컬에 생성되지 않으므로 최소한의 용량으로 신속하게 복제가 완료된다.

댓글 남기기