大分多忙で記事が滞ってしまいました。
ここは現場ノウハウ系でお茶を濁しましょう…
何事!?
内容が膨大な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サーバー)側の操作権限があれば、他にもやれる方法はあるみたいです(あらかじめ圧縮したりとか)
私の場合は受託案件のためその権限がなく、手前でどうにかしなければいけなかったので…という次第です