こんにちは!
普段から開発で git clone
コマンドを多用してますが、オプションが便利だったので、まとめてみました。(使いそうなものだけ)
ネタ元はこちら。
git cloneコマンドの主要なオプションについて、簡単にまとめます。
Git clone の基本的なオプション
基本オプション
-l, --local
- ローカルリポジトリからクローンする際に使用
- オブジェクトの共有にハードリンクを使用して容量を節約
※使ったことないが、容量を節約できるのは良さそう
-q, --quiet
- 進捗状況を表示しない静かモード
-v, --verbose
- 詳細な情報を表示するモード
-b <ブランチ名>, --branch <ブランチ名>
- 指定したブランチをチェックアウト
- タグの指定も可能
※デフォルトだとmasterとかがチェックアウトされてしまうので、これはありがたい。
--depth <数値>
- 指定したコミット数だけの浅いクローンを作成
- リポジトリサイズを小さくしたい場合に有効
※確かに、全コミットはいらんことがある
その他オプション
--mirror
- リモートの完全なミラーを作成
- すべてのブランチとタグを含む
--no-checkout
- クローン後に作業ディレクトリへのチェックアウトを行わない
→ リモートリポジトリから.gitディレクトリの内容だけをコピー - 大きなリポジトリで初期チェックアウトを避けたい場合などに便利
→ 特定のブランチだけをチェックアウトしたい場合など
--recurse-submodules
- サブモジュールも含めて再帰的にクローン
- プロジェクトの依存関係もまとめて取得できる
--shallow-submodules
- サブモジュールを深さ1でクローン
- サブモジュールのサイズを抑えたい場合に有効
--origin <名前>
- リモートの名前をデフォルトの"origin"から変更
--sparse
- スパースチェックアウトを有効化
- 必要なファイルのみを取得可能
備考
上記オプションは、以下のように組み合わせて使ったりします。
# 特定のブランチを浅くクローンする
git clone --depth 1 -b develop <リポジトリURL>
# サブモジュールを含む完全なミラーを作成
git clone --mirror --recurse-submodules <リポジトリURL>
実務では特に --depth
、-b
、--recurse-submodules
が使えそうですね。
これらの使い方を押さえておくといいかも。
補足
--sparse
オプションについて補足。
以下の場合に使えそう。
1. 巨大なモノレポの一部だけを扱いたい場合
huge-monorepo/
├── frontend/ # Webフロントエンド
├── backend/ # バックエンドAPI
├── ios/ # iOSアプリ
├── android/ # Androidアプリ
├── docs/ # ドキュメント
└── ml/ # 機械学習モデル
例えば、フロントエンド開発者はfrontend
ディレクトリのみが必要で、他は不要という場合:
# 1. sparseオプションでクローン
git clone --sparse https://github.com/company/huge-monorepo.git
cd huge-monorepo
# 2. 必要なディレクトリだけを指定
git sparse-checkout set frontend
# これで frontend/ 以下のファイルだけがチェックアウトされる
これ良さそうですよね。
利用ケースはそれなりにありそう。
まとめ
普段、なんとなく使ってる git clone
コマンドですが、大きなプロジェクトなど、オプションをうまく使うと、開発効率がアップします。
コマンドをうまく使って、ストレスの無い開発を目指しましょう!