특정 개정으로 Git 리포지토리 복제

John Wachira 2023년6월20일
특정 개정으로 Git 리포지토리 복제

이 기사에서는 특정 개정 또는 변경 세트로 Git 리포지토리를 복제하기 위해 사용할 수 있는 다양한 방법에 대해 설명합니다. 대용량 파일이 있는 리포지토리가 있고 특정 코드 버전만 필요한 경우에 편리합니다.

전체 리포지토리를 복제하는 대신 특히 대용량 파일을 처리하는 경우 복제 시간을 줄이는 데 도움이 되는 특정 변경 세트를 가져올 수 있습니다.

특정 개정으로 Git 리포지토리 복제

여러 가지 방법을 사용하여 특정 변경 세트로 리포지토리를 복제할 수 있습니다. 관심 있는 커밋과 함께 git fetch 명령을 사용할 수 있는 Git의 최근 개발부터 시작하겠습니다.

Git 버전 2.5.0 이전에는 git fetch origin <commit id>가 작동하지 않았습니다. 버전 2.5.0 릴리스와 함께 Git에는 서버 측에서 uploadpack.allowReachableSHA1InWanttrue로 구성하는 옵션이 포함되었습니다.

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> 명령을 실행할 수 있습니다.

우리는 동일한 목적지에 도착할 다른 대안을 다루었습니다.

작가: John Wachira
John Wachira avatar John Wachira avatar

John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.

LinkedIn

관련 문장 - Git Clone