HOWTO · Git
특정 개정으로 Git 리포지토리 복제
특정 변경 세트로 Git 리포지토리를 복제하는 데 사용할 수 있는 다양한 방법입니다.
이 기사에서는 특정 개정 또는 변경 세트로 Git 리포지토리를 복제하기 위해 사용할 수 있는 다양한 방법에 대해 설명합니다. 대용량 파일이 있는 리포지토리가 있고 특정 코드 버전만 필요한 경우에 편리합니다.
전체 리포지토리를 복제하는 대신 특히 대용량 파일을 처리하는 경우 복제 시간을 줄이는 데 도움이 되는 특정 변경 세트를 가져올 수 있습니다.
특정 개정으로 Git 리포지토리 복제
여러 가지 방법을 사용하여 특정 변경 세트로 리포지토리를 복제할 수 있습니다. 관심 있는 커밋과 함께 git fetch 명령을 사용할 수 있는 Git의 최근 개발부터 시작하겠습니다.
Git 버전 2.5.0 이전에는 git fetch origin <commit id>가 작동하지 않았습니다. 버전 2.5.0 릴리스와 함께 Git에는 서버 측에서 uploadpack.allowReachableSHA1InWant를 true로 구성하는 옵션이 포함되었습니다.
true로 설정하면 도달 가능한 모든 커밋을 가져올 수 있습니다. 이 기능은 기본적으로 꺼져 있으며 보안 및 성능상의 이유로 사용하지 않는 것이 좋습니다.
Bitbucket과 같은 일부 Git 서버에는 일반적으로 이 기능이 기본적으로 설정되어 있습니다. 특정 변경 세트에서 대규모 Git 저장소의 작은 하위 집합을 가져오려면 다음 단계를 따르세요.
복제하려는 디렉토리에서 Git 리포지토리를 초기화합니다.
$ git init
그런 다음 원격을 로컬 저장소에 추가합니다.
$ git remote add origin <url://to/source/repository
이제 아래 그림과 같이 원하는 커밋을 가져올 수 있습니다.
$ git fetch origin <sha1-of-commit-of-interest>
분기를 관심 있는 커밋으로 재설정하여 프로세스를 완료합니다.
$ git reset --hard FETCH_HEAD
지정된 커밋을 포함하여 전체 커밋 기록을 가져옵니다. --depth=...' 또는 '--shallow-since=... 플래그로 이를 제한할 수 있습니다.
이 방법은 안전하지 않으며 모든 Git 서버에서 작동하지 않을 수 있습니다. 동일한 목적지에 도착하는 이 방법에 대한 대안이 있습니까?
우리가 논의하려는 방법은 작은 리포지토리에 이상적입니다. 여전히 큰 리포지토리에서 작동하지만 사용자 측의 인내심이 필요합니다.
복제하려는 커밋을 이미 알고 있다고 가정하고 전체 리포지토리를 복제하여 시작합니다.
원격을 로컬 리포지토리에 추가하여 시작하고 아래와 같이 복제를 진행합니다.
$ git clone <repo url>
완료되면 아래 그림과 같이 git reset 명령을 사용하여 HEAD를 원하는 커밋으로 이동합니다.
$ git reset --hard <commit id>
가장 최근 커밋으로 돌아가려면 git pull 명령을 실행합니다.
또는 아래와 같이 git checkout 명령을 사용하여 리포지토리를 복제하고 원하는 커밋으로 전환할 수 있습니다.
$ git clone <repo url>
커밋으로 전환하려면:
$ git checkout <commit id>
아래와 같이 분리된 HEAD 모드에서 git reset 명령을 실행합니다.
$ git reset --hard
이 접근 방식은 분기 내용을 변경하지 않고 코드를 사용하려는 경우 이상적입니다.
git switch - 명령을 실행하여 분리된 HEAD 모드를 종료합니다.
결론적으로 Bitbucket과 같은 일부 Git 서버를 사용하면 도달 가능한 커밋에서 가져올 수 있습니다. uploadpack.allowReachableSHA1InWant 기능을 활용하려면 Git 버전 2.5 이상이 필요하며 git fetch origin <commit-of-interest> 명령을 실행할 수 있습니다.
우리는 동일한 목적지에 도착할 다른 대안을 다루었습니다.