14
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Organization

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

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 指定ができるようにはなるよ、とかいてある。ただし、その場合はそのリビジョンが、正当なものであるかの検証(つまり、どこかしらのブランチ・タグから歴史をたどって到達可能か)はスキップされるよ、とのこと。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
14
Help us understand the problem. What are the problem?