LoginSignup
1
1

More than 3 years have passed since last update.

[Git] 大容量リポジトリをcloneする…!

Last updated at Posted at 2020-06-17

大分多忙で記事が滞ってしまいました。
ここは現場ノウハウ系でお茶を濁しましょう…

何事!?

内容が膨大な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サーバー)側の操作権限があれば、他にもやれる方法はあるみたいです(あらかじめ圧縮したりとか)
私の場合は受託案件のためその権限がなく、手前でどうにかしなければいけなかったので…という次第です:sweat:

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1