programing

깊이 1로 특정 커밋을 얕은 복제하는 방법은 무엇입니까?

procenter 2021. 1. 15. 19:47
반응형

깊이 1로 특정 커밋을 얕은 복제하는 방법은 무엇입니까?


저장소의 특정 커밋을 얕게 복제하는 것이 가능합니까 (예 : 깊이 1)? 같은 것

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직접 수행 할 구문을 찾지 못했습니다 .


참고 : 내 예제는 커밋 해시로 복제하는 데 도움이되지 않지만 태그를 복제하고 경량 리포지토리를 갖는 데 도움이됩니다.

"클론"에 커밋이 하나만 있어야하고 커밋 해시를 사용하려는 경우 짧은 대답은 NO 입니다.

이 명령 구성 ( v2.13.2.windows.1에서 테스트 )을 태그에 사용합니다.

git clone --depth 1 git@github.com:VENDOR/REPO.git --branch 1.23.0 --single-branch

1.23.0 -커밋 해시 또는 분기가 될 수 있습니다.

전체 예 :

$ 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디렉토리 크기 ( 267K2.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에게 감사드립니다.


즉각적인 대답은 : 당신은 할 수 없습니다.
왜? 자세한 설명은 여기에서 찾을 수 있습니다. 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>

깊이 1로 특정 커밋을 얕은 복제하는 방법은 무엇입니까?

@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>

whilebash에서 사용해보십시오 .

git clone --depth=1 $url
i=1; while ! git show $sha1; do git fetch --depth=$((i+=1)); done

이것은 각 커밋을 개별적으로 가져 오기 때문에 매우 느립니다. 증분을 늘릴 수 있지만 (일괄 적으로 커밋을 가져오고 네트워크를 통해 성능을 향상시키기 위해) 여전히 무차별 대입 방식입니다.

ReferenceURL : https://stackoverflow.com/questions/31278902/how-to-shallow-clone-a-specific-commit-with-depth-1

반응형