저장소의 특정 커밋을 얕게 복제하는 것이 가능합니까? 같은 것
git clone http://myrepo.git 728a4d --depth 1
SHA로 커밋 할 때 저장소 상태를 얻으려면 728a4d...
?
동기는 전체 저장소를 복제하지 않고 특정 커밋에서 저장소의 상태에만 관심이있을 때 특정 커밋을 확인하는 것입니다.
답변:
Git 2.5.0 ( 클라이언트 및 서버 측 모두 에서 사용 가능해야 함)부터 uploadpack.allowReachableSHA1InWant=true
특정 SHA1 가져 오기를 활성화하도록 서버 측에서 설정할 수 있습니다 .
git init
git remote add origin <url>
git fetch --depth 1 origin <sha1>
git checkout FETCH_HEAD
이 작업을 git clone
직접 수행 할 구문을 찾지 못했습니다 .
git fetch --depth 1 origin d6be96bc...
쇼fatal: Couldn't find remote ref d6be96bc...
allowTipSHA1InWant
하지만,도, allowReachableSHA1InWant
도 allowAnySHA1InWant
.
error: pathspec 'FETCH_HEAD' did not match any file(s) known to git
참고 : 내 예제는 커밋 해시로 복제하는 데 도움이되지 않지만 태그를 복제하고 경량 리포지토리를 갖는 데 도움이됩니다.
"클론"에 하나의 커밋 만 있어야하고 커밋 해시를 사용하려는 경우 짧은 대답은 NO 입니다.
이 명령 구성 ( v2.13.2.windows.1에서 테스트 됨 )을 태그에 사용합니다.
git clone --depth 1 git@github.com:VENDOR/REPO.git --branch 1.23.0 --single-branch
전체 예 :
$ git clone --depth 1 git@github.com:Seldaek/monolog.git --branch 1.23.0 --single-branch
Cloning into 'monolog'...
remote: Counting objects: 201, done.
remote: Compressing objects: 100% (188/188), done.
remote: Total 201 (delta 42), reused 32 (delta 5), pack-reused 0
Receiving objects: 100% (201/201), 190.30 KiB | 0 bytes/s, done.
Resolving deltas: 100% (42/42), done.
Note: checking out 'fd8c787753b3a2ad11bc60c063cff1358a32a3b4'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
$ cd monolog
.git
디렉토리 크기 ( 267K 대 2.6M 전체 사용하여 clone
) :
$ du -h --max-depth=0 .git
267K .git
표시하고 싶은 --branch
것은 태그 / 분기를 취할 수 있습니다.
https://git-scm.com/docs/git-clone#git-clone---branchltnamegt
--branch
태그를 가져와 결과 저장소의 해당 커밋에서 HEAD를 분리 할 수도 있습니다.
UPD
간단히 말해서 "refs"를 취할 수 있습니다. 자세한 내용은 여기에서 읽을 수 있습니다. "서버가 보급되지 않은 개체에 대한 요청을 허용하지 않습니다."라는 git 오류 메시지는 무엇을 의미합니까?
또한 다음과 같은 트릭 이 없습니다 .
git fetch --depth 1 origin <COMMIT_HASH>
내 실수를 지적 해 주신 @BenjiWiebe에게 감사드립니다.
--branch
커밋을 지원 하지 않고 브랜치 이름 만 지원합니다. 이것은 전혀 해결되지 않습니다. 사실이 아니기 때문에.
즉각적인 대답은 : 당신은 할 수 없습니다.
왜? 자세한 설명은 여기에서 찾을 수 있습니다. Git 클론 특정 커밋 옵션이없는 이유는 무엇입니까?
너는 어떤 다른 일을 할 수 있니?
# Create empty repository to store your content
git clone <url>
git reset <sha-1> --hard
더 많은 정보:
git clone <url> --branch <branch_name> --single-branch <folder_name>
git clone <url> --depth=1 --branch <branch_name> --single-branch <folder_name>
@sschuberth가 주석으로 언급했듯이 : --depth
암시합니다 --single-branch
.
복제 대신 fetch 명령을 사용하십시오.
# fetch a commit (or branch or tag) of interest
# In this case you will have the full history of this commit
git fetch origin <sha1>
--depth
을 의미하므로이 --single-branch
경우 삭제할 수 있습니다.
git fetch
실제로 SHA1을 수락 합니까 refspec
?
while
bash에서 사용해보십시오 .
git clone --depth=1 $url
i=1; while ! git show $sha1; do git fetch --depth=$((i+=1)); done
이것은 각 커밋을 개별적으로 가져 오기 때문에 매우 느립니다. 증분을 늘릴 수 있지만 (일괄 적으로 커밋을 가져오고 네트워크를 통해 성능을 향상시키기 위해) 여전히 무차별 대입 방식입니다.