Linux Kernel을 예로 들어 보겠습니다. 로컬 사본을 갖고 싶지만 최근 기록에만 관심이 있다고 가정 해 봅시다.이 저장소는 거대한 역사가 있기 때문에 얕은 복제를 수행하여 git 작업이 더 빠르게 작동하도록합니다 (구문 분석 할 필요가 없습니다). 전체 역사는 매번, 우리가 가지고있는 것만 로컬로).git 저장소를 모든 커밋으로 다시 복제하십시오. 모든 것이 아닌
좋아요, 우리가 얼마나 멀리 가져올 필요가 있는지 알아 보겠습니다. 예를 들어, v4.0
이 우리가 원하는만큼 멀리 있다고한다면, 이것을 --depth
으로 어떻게 변환할까요?
$ git rev-list --count v4.0..torvalds/master
95302
그래서,
v4.0
부터 마스터 95302 커밋이 있었다 올바른 깊이해야처럼 맞아, 소리? 시도해 보겠습니다.
$ git clone --depth=95302 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Cloning into 'linux'...
remote: Counting objects: 4791958, done.
remote: Compressing objects: 100% (3558/3558), done.
remote: Total 4791958 (delta 2188), reused 640 (delta 174), pack-reused 4788216
Receiving objects: 100% (4791958/4791958), 1.49 GiB | 12.93 MiB/s, done.
많은 것을 가져온 것처럼 보입니다. 얼마나 멀리 되돌아가는 지 보자.
$ git -C linux tag | head
v2.6.12
v2.6.12-rc2
v2.6.12-rc3
v2.6.12-rc4
v2.6.12-rc5
v2.6.12-rc6
v2.6.13
v2.6.13-rc1
v2.6.13-rc2
v2.6.13-rc3
OK, 우리는 여기에서 너무 많은 것을 분명히 가져 왔습니다.
가져 오는 양을 계산하려면 어떻게해야합니까? 어떤 --depth
을 요청 하시겠습니까?
편집 :이 명확하게하기 위해, 목표는 (은 그 후 새로운 커밋을 가져올 수 있도록 허용하는 경우 얕은 복제가하는 것처럼, 보너스 포인트) 일부 커밋 과거와 현재 사이의 역사를 가지고하는 것입니다. 히스토리를 파기하는 답변 (예 : 지금까지 제공 한 답변)은 분명히이를 만족시키지 않습니다.
방금 전에 우리가 원하는 커밋 이전에 스쿼시 버전의 이력을 접목 할 수있는 약 git-replace
을 알았습니다. 나는 그것을 줄 것이며 결과에 따라이 질문/답변을 업데이트 할 것이다.
아직 복제본이 없으면 일반적으로 사용할 수 없기 때문에 바보 같지만 * 커밋 *이 아닌 * 깊이 *를 계산해야합니다 (후자는 폭을 포함합니다 : 간단한 예 : 분기 X의 팁이 병합하고 X^~ X ^^ 또는 X^2 ~ X ^^에 따라 목표를 달성하기 위해 2 개의 커밋을 다시 수행해야합니다. 'rev-list --count'는 fencepost 오류를 제외하고는 3을 계산합니다. '- 경계가 없다 '). '--first-parent'는 항상 작동하지 않지만'--ancestry-path'와 마찬가지로 시작입니다. 또한 복제 단계에서'--single-branch'를 원할 수도 있습니다. – torek
@torek,'--single-branch'는'--depth'에 내포되어 있습니다. – AnoE
@AnoE : 오, 알았어요. 그렇습니다! 감사. – torek