Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

githubリポジトリ内のサブディレクトリのみをダウンロードしてくる方法

今回はgithub上に上がっているリポジトリ内のサブディレクトリのみを取得する方法についてまとめたいと思います。

最近参考にしたいコードをローカルにダウンロードしようと思ったのですが、
リポジトリがとても大きかったので欲しいコードだけ持ってこれないか?と思い、
調べたところ、方法があったのでその備忘録になります。


■前準備

まずダウンロードを行うためのディレクトリを作成していきます。

mkdir TestDir #適当なディレクトリ名
cd ./TestDir
git init
git remote add origin https://hogehoge~~ #リポジトリの設定を行う

■sparsecheckoutを用いてサブディレクトリのみを取得する。

リポジトリ内のサブディレクトリのみを取得するにあたり、
”sparsecheckout”というコマンドを用います。
sparsecheckoutを用いることにより、gitリポジトリの一部のみを取得できるようになります。
※sparseとは"わずかな"という意味だそうです。

まずはsparsecheckoutの設定をtrueにしていきます。

git config core.sparsecheckout true

次に取得したいサブディレクトリをsparse-checkoutに設定していきます。

echo サブディレクトリパス > .git/info/sparse-checkout

ここで、設定するサブディレクトリパスですが、
リポジトリをトップディレクトリとした時のパスを入力すればよいです。
例えば、こちらのリポジトリのsampleのみを取得したい場合には、
https://github.com/Elsammit/ScreenCapture

下記の通りコマンド実行すればOK。

echo sample > .git/info/sparse-checkout

もしくは、

vim .git/info/sparse-checkout

でファイル編集にてサブディレクトリを記載してもOK。

ダウンロードするサブディレクトリは複数選択可能で、
2つ目以降は、

echo サブディレクトリパス >> .git/info/sparse-checkout

とsparse-checkoutに追記する形でコマンド実行すればOK。
vimでファイル内に追記していくでもOKです。

最後に、

git pull origin main #ブランチ名は適宜変更

を実行してダウンロードすればOK。

■補足

sparse-checkoutでダウンロードするファイルを除外する際には、

vim .git/info/sparse-checkout

としてファイル編集にて、

!サブディレクトリ名

と頭にビックリマークを付与すればOK。

■最後に

今回はgithubリポジトリの一部サブディレクトリのみをダウンロードする方法についてまとめました。
どうやらgit上にpushされた情報は全て取り込んだ上でサブディレクトリのみをpullしているようです。
このため、それなりに更新頻度の高いリポジトリはpull時にダウンロード時間が少し長いようです。