0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Git】特定ディレクトリだけをダウンロードする Git コマンド

0
Last updated at Posted at 2026-04-14

GitHub 上のリポジトリから、特定のディレクトリ以下のファイルをローカルにダウンロードしたい。

「すべてをそこに置いてきた」的なモノリシックなリポジトリにある、特定のディレクトリ(アセット)だけをダウンロードしたいだけなのに、クローンして、コピーして、削除するのに苦労してます。

1 ファイルなら、ブラウザから GitHub にアクセスして、対象ファイルを開いて "Copy raw file" ボタンでコピペピピックしてもいいのですが、いずれにせよ更新系の場合は面倒な作業です。

TL; DR (今北産業)

git の標準機能には sparse-checkout という「無駄なファイルを取得しないよう、特定ディレクトリだけをチェックアウトする仕組み」があり、リモートのリポジトリから指定ディレクトリのみローカルに持ち出すことができます。

git clone --filter=blob:none --no-checkout https://github.com/OWNER/REPO.git
cd REPO
git sparse-checkout init --cone
git sparse-checkout set path/to/dir
git checkout
  • --filter=blob:none
    → ファイル内容を必要になるまで取得しないオプション(partial clone)
  • sparse-checkout
    → 指定ディレクトリのみ展開するサブコマンド
  • path/to/dir
    → リポジトリ・ルートからみて対象となるディレクトリ

しかし「特定ディレクトリ以下をダウンロードしたいだけ」なのに、この長さは、いかんせん覚えられないのです。そこで、git のサブコマンドとして登録することにしました。

そんな機能があったことや、サブコマンドを作ってたことすら忘れそうなので、未来の自分のググラビリティ(備忘録)として。

Git External Subcommand

git には、パスの通ったディレクトリに git-<サブコマンド> 形式の実行可能ファイル名を見つけたら、そのまま渡して実行する機能があります。

つまり、git-foo というファイル名で、実行権限付きでパス内に設置しておけば、git foo として実行できるということです。

例えば、git foo --version の場合、実質的に git-foo --version を実行しているのと同じ扱いになります。

これは、git alias のように .gitconfig をいじる必要はなく、コマンドを設置するだけで済みます。

git sparse コマンド

以下は、各種ポカヨケだけでなく、リポジトリ・ルートにあるライセンスも含めてダウンロードする bash スクリプトです。

インストール

  1. 記事下部のスクリプトを git-sparse ファイルにコピペし、パスの通ったディレクトリに設置
    • Windows の場合は以下のコラムを参照
  2. スクリプトに実行権限を与える
    • chmod +x git-sparse
  3. 新規シェルで git-sparse -h でパスが通っているか確認する

Windows の場合は若干注意が必要です。

Windows 環境では git-sparse.sh のように、ファイル名に拡張子が必須になります(Git Bash, Git Bash + WSL2)

Git Bash のみで WSL2 環境を利用していない場合、git-sparse.sh を検知しないことがあります。

その場合は、git-sparse.sh に加え git-sparse.cmd のラッパーが必要です。

git-sparse.cmd
@echo off
bash "%~dp0\git-sparse.sh" %*

使い方

以下は、Qiita Markdown の spec ディレクトリをローカルにダウンロードする具体的な例です。空のディレクトリで作業してください。

シンプル

ディレクトリの指定のみ。ブランチ指定なし
git sparse https://github.com/increments/qiita-markdown.git qiita-markdown/spec ./foo

ブランチ指定

ブランチ指定あり(要フルパス)
git sparse https://github.com/increments/qiita-markdown.git https://github.com/increments/qiita-markdown/tree/0-stable/spec ./foo

スクリプト本体 @ Gist

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?