[Git] 대용량 리포지토리를 clone한다!

오이타 다망하고 기사가 멈췄습니다.
이곳은 현장 노하우계에서 차를 탁하자…

무슨 일이야! ?



내용이 방대한 Git 저장소, 있다고 생각합니다 ...
(게임 앱의 애셋 리포지토리라든지)

그것을 clone하려고하면 오류가 발생합니다.
Cloning into 'xxxxxxxxxx'...
Warning: Permanently added '[xxx.xxx.xxx.xxx]:11111' (ECDSA) to the list of known hosts.
remote: Enumerating objects: 83107, done.
remote: Counting objects: 100% (83107/83107), done.
remote: Compressing objects: 100% (54788/54788), done.
ssh_dispatch_run_fatal: Connection to xxx.xxx.xxx.xxx port 11111: message authentication code incorrect
fatal: the remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

어떻게! ?



몇 가지 방법이있을 것 같지만,

버퍼를 크게 해본다



이것만으로는 좋지 않았습니다 ....
git config --global http.postBuffer 524288000

하지만 설정해 보는 것에 넘어선 적은 없을 것입니다.

최신 상태만 clone 해 본다


--depth X 에서 최근 업데이트 X 건에만 포함된 데이터로 짜서 clone 합니다.
git clone --depth 1 リポジトリurl

하지만 좋지 않았습니다 ....
그 가까운 상태에서 이미 방대하다면 無駄無駄無駄無駄無駄無駄無駄無駄ッッッ!!

리포지토리 내용 중 일부만 clone



이것으로 어떻게 꽤 있었습니다…!

그러나 조건이 ...



어떠한 방법으로, 리포지토리내의 디렉토리나 파일 구성을 벌써 알고 있지 않으면 이 손은 사용할 수 없습니다.

우선, 받아들이는 디렉토리를 로컬에 작성


mkdir ttt
cd ttt
git init

일부만 clone하기 위한 설정을 실시한다


git config core.sparsecheckout true
git remote add origin リポジトリurl

clone하려는 경로만 열거한 텍스트 파일 만들기



vi로 필기라든지 뭐든지 OK입니다만, 일발 커맨드라든가라면↓ 이런 느낌으로.
cat - << EOS >> .git/info/sparse-checkout
リポジトリurlより下の、欲しい/パス
リポジトリurlより下の、欲しい/パス2
リポジトリurlより下の、欲しい/パス3
EOS

欲しいパス의 내용이 이미 방대하다면, 최선을 다하고 더 서브 디렉토리와 파일을 짜내십시오 ...

막상 clone! (실제는 git pull이지만)


git pull origin master

이게 어떻게 됐어!
응 아 아 아 아 아 아 아 아 아 아 아! ! !

여담



리포지토리(Git 서버)측의 조작 권한이 있으면, 그 밖에도 할 수 있는 방법은 있는 것 같습니다(미리 압축하거나라든지)
나의 경우는 수탁 안건 때문에 그 권한이 없고, 앞에서 어떻게 해야 했기 때문에…

좋은 웹페이지 즐겨찾기