13
14

More than 5 years have passed since last update.

git archive を用いて clone せずに特定のディレクトリだけを取得する(そして SHA-IDで取得したいときとか)

Last updated at Posted at 2016-02-09

git archiveを用いると、 clone せずに特定のディレクトリを取得できる。

詳細は git-archive のコマンドを用いると、対象レポジトリを clone せずとも、特定の branch の特定のディレクトリだけを取得することができる。

git archive --remote=git@github.com:UserName/repo-name.git \
    master:subdir/foo | tar -x

上記コマンドを実行すると、対象リモートレポジトリの、 masterブランチのsubdir/fooディレクトリの中身を取得して、現在のディレクトリに展開してくれる。

デフォルトだと、ブランチやタグなど ref名でしか取得できない

masterv1.5.0 などといった、ブランチやタグであるならば、上記のコマンドによってレポジトリのサブディレクトリを clone することなく取得できる。もっと具体的にいうと、 ref としての名前が付いているリビジョンであるならば、 clone することなく取得できる。

普通に考えると、ancestry references を利用して master^:subdirとか、任意SHA-IDを指定した、 8fa4963ad7c43053767cca04eb42202c08ecebb1:subdirとかで取得できると期待するのだけれども、残念ながらそうはなっていない。

その理由と回避方法

なんでそうなるかについては、 git-upload-archive に記述がある。簡単にいうと、それを許してしまうとサーバー側の処理が大変になってしまうから、だと。

なので、サーバー側で uploadArchive.allowUnreachable の config を設定してやると、任意 SHA-ID 指定ができるようにはなるよ、とかいてある。ただし、その場合はそのリビジョンが、正当なものであるかの検証(つまり、どこかしらのブランチ・タグから歴史をたどって到達可能か)はスキップされるよ、とのこと。

13
14
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
13
14