Git

【GIT】非常に重たいrepositoryをcloneする方法

このところ業務でやたらと重たいリポジトリを扱うことが多いので、重たいリポジトリを clone して、 remote branch から branch 切ったり commit したり、 push したり、できるようにする clone の仕方をメモ。

いきなり全履歴を落とさず直近の履歴だけをおとし、最終的に全履歴落とす方法。

terminal でコマンド打ちます。

clone したいカレントディレクトリに移動

以下コマンドで現在いるディレクトリを確認します。

pwd

terminal を立ち上げてすぐだと、だいたい以下のパスになっていると思いますが

/Users/{ユーザー名}

これを cd コマンドでクローンしたいフォルダに移動します

cd /Users/{ユーザー名}/{クローンしたいフォルダ}

tips

clone したいフォルダの階層にすでに clone してできるフォルダと同じ名前のフォルダが存在しているとエラーになるので被っているフォルダ名がないか注意

まず直近1つの履歴のみで clone します

git clone --depth 1 {リポジトリのurl}
  • {リポジトリのurl} は適宜URLに置き換えてください
  • 例) git clone --depth 1 https://hogehoge.com/fugafuga.git

ひとまず clone ができたら次は履歴をちょっとずつ fetch する

fetch するにはそのリポジトリフォルダの中に移動します。

cd {クローンしたフォルダ}

以下コマンドでカレントがクローンしたフォルダになっているか確認

pwd

クローンしたフォルダに入っているのを確認して、以下のコマンドを実行

git fetch --depth 10
git fetch --depth 100
  • 数は履歴の数。少しずつ増やして最終的には全部落としました

最後まで落とした時にこの表示になった

remote: Total 0 (delta 0), reused 0 (delta 0)

 しかしこれまでだと fetch や他の remote branchcheckout ができないので以下のコマンドを入力

git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"

そのあと

git fetch --all

でリモートブランチも取得、チェックアウトでき、利用できるようになる。