リポジトリAがあって、リポジトリBをサブモジュールとして取り込んでいる場合、リポジトリBの一部だけを利用したいという場面がありました。
この場合、gitには「sparse checkout(スパースチェックアウト)」というものがあることを知ったので、sparse checkoutについてまとめてみました。
「git sparse checkout」を使ってリポジトリ内の一部だけ取り込む
sparse checkoutとは
リポジトリの一部だけをcheckoutするgitコマンドです。
sparse checkoutを使ってリポジトリ内の一部だけを取り込む
sparse checkout
を使ってリポジトリ内の一部だけを取得する方法について。リポジトリAがあり、以下のようなディレクトリ構造だった場合を例にとって説明していきます。
リポジトリA
├─ dirA(サブモジュール)
│ ├─ dirA-1
│ └─ dirA-2
└─ dirB
まずはリポジトリAをclone。サブモジュールを含むリポジトリなのでrecursiveオプションをつけています。
git clone --recursive [リポジトリAのURL]
次に、sparse checkout
を使って、dirA/dirA-1だけを取り込むようにします。
まず、sparse checkout
を有効に。Cオプションは、指定したパス上でgitコマンドを実行してくれます。
git -C dirA config core.sparsecheckout true
.git/modules/dirA/info/sparse-checkout
を作成し、取得するdirA-1を指定します。
vi .git/modules/dirA/info/sparse-checkout
dirA-1
その後、dirAのツリー情報を読み込み直してあげると、dirA配下はdirA-1のみ存在するようになっています。mオプションでマージンを実行し、uオプションでツリー内のファイル更新を行っています。
git -C dirA read-tree -mu HEAD
Git関連のおすすめUdemy講座
Git関連のおすすめ書籍
リンク
コメント