53790


github のプライベートレポジトリの、 master ブランチの `path/to/file`
の場所にあるファイルないしディレクトリを（そしてそれだけを）手元にダウンロードしたくなりました。

これはどうやったら実現できるでしょうか？


CC BY-SA 4.0
2019-03-28T14:54:55.107
53789
2019-03-29T01:31:23.043
754
question
git github
github のプライベートレポジトリから一部のファイルのみをダウンロードするには？


普通の git サーバーならば、 `git archive --format=tar --remote=$git_url master
path/to/file | tar -xf -` が使えるのですが、 github においてはこれが利用不可能です。

代わりに、`svn export` が利用できます。

[code]

    $ GITHUB_TOKEN=abcdefgh...  # https://github.com/settings/tokens より生成
    $ svn --username "${GITHUB_TOKEN}" --password '' export https://github.com/username/reponame/trunk/path/to/file export_dir
    
[/code]

ポイントは

  * `https://github.com/ユーザー名/プロジェクト名` が svn レポジトリとして利用可能
  * 認証は、 github token を認証のユーザー名に指定することで突破可能


CC BY-SA 4.0
2019-03-28T14:54:55.107
53790
2019-03-28T14:54:55.107
754
53789
answer


特定のファイル・サブディレクトリのみを取得する方法はいくつかあり、バージョン依存します。

### Git 2.19以降（2018/09リリース）

[`git clone`](https://git-scm.com/docs/git-clone)で`--filter`オプションが指定できます。

[code]

    git clone --depth 1 --no-checkout --filter=blob:none $REPO workdir
    cd workdir
    git checkout master -- path/to/file
    
[/code]

### Git 1.7以降（2012/02リリース）

[sparse checkout](https://git-scm.com/docs/git-config#Documentation/git-
config.txt-coresparseCheckout)が使えます。

[code]

    mkdir workdir
    cd workdir
    git init
    git remote add -f origin $REPO
    git config core.sparseCheckout true
    echo path/to/file >> .git/info/sparse-checkout
    git pull origin master
    
[/code]

* * *

[How do I clone a subdirectory only of a Git
repository?](https://stackoverflow.com/q/600079/4315484)を参考に書きました。`--depth
1`や`--no-checkout`、`--config`をうまく使えばsparse checkoutももう少し手際よく実現できるかも？

「github のプライベートレポジトリ」であることが質問にどのように影響するのかよくわかりませんでした。


CC BY-SA 4.0
2019-03-29T01:31:23.043
53791
2019-03-29T01:31:23.043
4236
53789
answer