テレワークが始まって家で仕事される方も増えましたね。家のネット環境が弱くてgitのcloneが遅いという声を聞くことがあったのでcloneを早くする方法はないかと調べました。
shallow cloneで取得するコミット数を減らす
取得するコミット数を減らしてclone する方法はshallow clone と呼ばれます。
取得するコミット数が減るので通信容量も速度も改善されます。
shallow cloneは3種類あります。
- git clone --depth <コミット数>
- git clone --shallow-since <日時>
- git clone --shallow-exclude <リビジョン>
git clone --depth <コミット数>
指定したコミット数分をcloneできるオプションです。最新のコミットだけ必要であれば「 1 」 を指定します。
git clone --depth 1 <リポジトリ> <ディレクトリ>
git clone --shallow-since <日時>
指定した日時以降のコミットがcloneできるオプションです。時間も指定できますが、日にちだけでも指定可能です。
git clone --shallow-since "2020-04-13 12:00:00" <リポジトリ> <ディレクトリ>
git clone --shallow-exclude <リビジョン>
指定したタグより新しいコミットがcloneできるオプションです(タグは含まれない)。
リファレンスドキュメントを読んでも、使い方がなかなか分からなかったコマンドです。リビジョンと書かれていますが、使用できるのはタグ一択だと思いました。
git clone --shallow-since "V1.0" <リポジトリ> <ディレクトリ>
submoduleも shallow clone
submoduleも shallow clone するオプションが shallow-submodules です。
shallow-submodulesオプションは他の設定に関わらずdepth 1 で cloneされます。
git clone --depth 1 --recursive --shallow-submodules <リポジトリ> <ディレクトリ>
shallow clone したあとfetchやpull
shallow clone したあともfetch や pull は可能です。追加でコミットログを取得したい場合はdepthの数を増やすと良いです。
git fetch --depth 2
すべてのコミットログを取得する場合は --unshallow オプションを使います。
git fetch --unshallow
さいごに
- shallow clone を使用することで必要な部分だけcloneできます
- shallow clone のあとすべてを取得することもできます