LoginSignup
3

More than 5 years have passed since last update.

[Git] リポジトリ内の特定のブランチの特定のディレクトリのみcloneする

Last updated at Posted at 2016-10-10

正確にいえば clone ではないですが、やりたいこととしては同じだと思います。
巨大なリポジトリの中の一部のファイルだけを取得したい場合は以下のようにすれば良いようです

特定のブランチの特定のディレクトリを取得
$ git archive --remote=<repo_url> <branch> <path> | tar xvf -

Githubだとサポートしてない問題

ただ、問題点としてGithubだと git archive のリモートでの取得は対応していないようです。(Gitlabだと動作しましたが)
"git archive" and github

代わりに svn export は使えるとの情報はありました。
git export from github remote repository - Stack Overflow
GitHubから特定のディレクトリだけを直接ダウンロード - Qiita

例:vimのmasterのtoolsディレクトリを取得
$ svn export https://github.com/vim/vim/branches/master/tools tools
A    tools
A    tools/rename.bat
Exported revision 11703.

svn使っちゃうとちょっとあれですが、目的は果たせるということで。

備考:sparse-checkoutについて

検索するとsparse-checkoutとかがよく出てきますが、こちらは一度全ファイルをcloneしてるので、巨大なリポジトリの場合は結局一度は時間のかかるcloneを実施してしまってるので違いますね・・・。
2度目以降も、見えている範囲には無いだけで管理対象にはなっているので、別に早くなるわけではなさそうです。

Gitで他のリポジトリから一部のファイルのみをcloneする方法 - (DxD)∞
sparse-checkoutでGitのサブディレクトリだけを自動デプロイする | 株式会社グランフェアズ

参考

Cloning only a subdirectory with git - Stack Overflow
git-archive(1)

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
3