web-dev-qa-db-ja.com

GitHubリポジトリから単一のフォルダまたはディレクトリをダウンロードする

GitHubでホストされているリモートのGitリポジトリから特定のフォルダまたはディレクトリのみをダウンロードするにはどうすればよいですか?

GitHubレポジトリの例を次に示します。

[email protected]:foobar/Test.git

そのディレクトリ構造:

Test/
    foo/ 
       a.py
       b.py
    bar/
       c.py
       d.py

foo フォルダだけをダウンロードし、Testプロジェクト全体を複製したくはありません。

792
g_inherit

2016年9月の更新:コミュニティによって作成された、これを実行できるツールがいくつかあります。


Gitはこれをサポートしていませんが、GithubはSVNを介してサポートしています。 Subversionを使ってコードをチェックアウトする場合、Githubは本質的にレポジトリをバックエンドでgitからSubversionに変換してから、要求されたディレクトリを提供します。

この機能を使用して特定のフォルダをダウンロードする方法は次のとおりです。例として、人気のあるJavaScriptライブラリlodashを使用します。

  1. レポURLを取得します 。まず、GithubリポジトリのURLをクリップボードにコピーします。 github repo URL example

  2. SubversionのURLを変更します masterブランチから/docsのフォルダーをダウンロードしたいので、trunk/docsを追加します。完全なURLはhttps://github.com/lodash/lodash/trunk/docsです。なぜこのURLフォーマットを使用しなければならないのかについてのより詳細な説明については下記の私のメモを参照してください。

  3. フォルダをダウンロードします 。コマンドラインに行き、SVNでフォルダをつかみます。 svn checkout https://github.com/lodash/lodash/trunk/docs

Githubは、より大きなリポジトリを変換するのに30秒もかかるので、すぐに何のアクティビティも表示されないかもしれません。

フルURLフォーマットの説明:

  • masterブランチに興味があるなら、代わりにtrunkを使ってください。そのため、フルパスはtrunk/foldernameです。
  • fooブランチに興味があるなら、代わりにbranches/fooを使ってください。 フルパスはbranches/foo/foldernameのようになります
  • Protip:あなたが望むならダウンロードする前に利用可能なタグやブランチを見るためにsvn lsを使うことができます

それで全部です! Github より多くのSubversion機能をサポートしています 変更をコミットしたりプッシュしたりするためのサポートも含みます。

749
nick

この機能には2つの選択肢があります。

オプション1:ブラウザ拡張

Chrome ExtensionFirefoxアドオン

使用法:

  1. どのGitHubリポジトリページでも。 
  2. 必要なアイテムをダブルクリックするだけです。
  3. 右下のダウンロードボタンをクリックしてください。
  4. 進行状況ダッシュボードを参照して、ブラウザのトリガーのダウンロードを待ちます。
  5. Zipファイルを入手してください。

トークンを取得:

  1. ブラウザのGitZip Extensionアイコンをクリックしてください。
  2. 「トークンを取得」の横にある「通常」または「プライベート」リンクをクリックします。
  3. Github認証ページでGitZip権限を承認します。
  4. 冒頭のレポページに戻る。
  5. 使い続けます。

オプション2:Github gh-page

http://kinolien.github.io/gitzip GitHub API、およびJSZip、FileSaver.jsライブラリを使用する。

Step1:右上の欄にgithubのURLを入力してください。
ステップ2:直接Enterキーを押すか、Zipファイルをダウンロードするにはdownloadをクリックします。サブフォルダとファイルのリストを表示するにはsearchをクリックします。
ステップ3:「Download Zip File」または「Get File」ボタンをクリックしてファイルを取得します。

ほとんどの場合、Github Trees APIの制限により、フォルダに1,000を超えるファイルが含まれていることを除けば、問題なく動作します。 ( Github API#コンテンツ を参照)

あなたがGitHubアカウントを持っていて、このサイトで「トークンを取得する」リンクを使っているなら、それはまたプライベート/パブリックリポジトリをサポートし、レート制限をアップグレードすることができます。 

423
Kino

DownGit > URLを入力してください>ダウンロード!

これで、 直接ダウンロード または ダウンロードリンク を任意のGitHubパブリックディレクトリまたはファイル(特別大きなファイル)に対して DownGit から作成できます。これは簡単なデモンストレーションです -


DownGit


ダウンロードしたファイルのプロパティ - 詳細な使い方 を設定することもできます。

371
Minhas Kamal

svnがあれば、svn exportを使ってこれを行うことができます。

svn export https://github.com/foobar/Test.git/trunk/foo

URLの形式に注意してください。

  • ベースURLはhttps://github.com/です
  • 末尾に/trunkを追加

svn exportを実行する前に、まずディレクトリの内容を確認してください。

svn ls https://github.com/foobar/Test.git/trunk/foo
143
janos

Generic git Repoの場合:

履歴を使ってリポジトリのクローンを作成するのではなく、ファイルをダウンロードしたい場合は、git-archiveを使用してこれを実行できます。

git-archivegitリポジトリの圧縮されたZipまたはtarアーカイブを作成します。それを特別にするいくつかのこと:

  1. gitリポジトリ内のどのファイルまたはディレクトリをアーカイブするかを選択できます。
  2. .git/フォルダ、またはそれが実行されているリポジトリ内の追跡されていないファイルはアーカイブされません。
  3. 特定のブランチ、タグ、またはコミットをアーカイブできます。 gitで管理されているプロジェクトは、ユーザーがダウンロードできるように、プロジェクトのバージョン(ベータ版、リリース版、2.0など)のアーカイブを生成するためにこれをしばしば使用します。

Sshで接続しているリモートリポジトリからdocs/usageディレクトリのアーカイブを作成する例です。

# in terminal
$ git archive --format tar --remote ssh://server.org/path/to/git HEAD docs/usage > /tmp/usage_docs.tgz

このブログ記事gitドキュメント に詳しい情報があります。

GitHubリポジトリに関するメモ

GitHubはgit-archiveアクセスを許可していません 。 ☹️

60
RobW

GitHubFolderDownloader というオープンソースプロジェクトを作成しました。リポジトリ全体を複製またはダウンロードすることなく、リポジトリの単一フォルダをダウンロードできます。

34
VahidN

他の答えと何の問題もありませんでしたが、私は初めてこのプロセスをさまよう人たちのためのステップバイステップの指示を共有したいと思いました。

Githubリポジトリから単一のフォルダをダウンロードする方法(Mac OS X):

〜ターミナルを開くには、スポットライトをクリックしてターミナルと入力し、Enterキーを押します。

  1. MacではおそらくすでにSVNを持っているでしょう(ただオープン端末をテストして type "svn" または "which svn" 〜引用符なしで)
  2. Githubの場合:リポジトリ内の特定のフォルダ名をクリックして(リポジトリではなく)gitフォルダへのGithubパスを見つけます。
  3. ブラウザのアドレスバーからパスをコピーする
  4. ターミナルを開く そしてタイプ: svn export
  5. 次にアドレスを貼り付けます(例:)。https://github.com/mingsai/Sample-Code/tree/master/HeadsUpUI
  6. 単語を置き換えます。 tree/master  
  7. wordで: trunk
  8. ファイルの保存先フォルダを入力します(この例では、現在のユーザーのDownloadsフォルダの中にターゲットフォルダを保存します)。
  9. ここでスペースは単なるスペースバーではなくWord (space)〜/ダウンロード/ HeadsUpUI
  10. 最後のterminalコマンドはフォルダをダウンロードするための完全なコマンドを示しています(アドレスをステップ5と比較してください) svn export https://github.com/mingsai/Sample-Code/trunk/HeadsUpUI 〜/ダウンロード/ HeadsUpUI

ところで - あなたがWindowsか他のプラットホームにあるなら、あなたは でSubversion(svn)のバイナリダウンロードを見つけることができます - http://Subversion.Apache.org

〜フォルダを単にダウンロードするのではなくチェックアウトしたい場合は、SVNヘルプを使用してみてください(tldr:replace export with checkout

更新

中断されたダウンロード/チェックアウトの再開に関するコメントについてsvn cleanupに続けてsvn updateを実行してみます。追加オプションについてはSOを検索してください。

28
Tommie C.

それはいけません;各サブディレクトリを個別にチェックアウトできるSubversionとは異なり、Gitはリポジトリ全体で動作します。

きめ細かいアクセスが必要なプロジェクトでは、サブモジュールを使用できます。各サブモジュールは別々のGitプロジェクトであるため、個別にクローンを作成できます。

Gitフロントエンド(例:GitHubのウェブインターフェース、またはgitweb)があなたに与えられたフォルダーを抽出するためのインターフェースを提供することを選ぶことができると考えられます、しかし私の知る限り彼らはそれをしませんしたがって、フォルダに含まれるファイルが多すぎない場合は、それが選択肢になります。

編集 - GitHubは実際にはSVNを介したアクセスを提供しています。これを行う方法についての最新の説明は https://github.com/blog/1438-improved-svn-here-to-stay-old-svn-going-away を参照してください。

15
michel-slm

"ダウンロード" フォルダではなく "クローン" it(開発用)にしたくない場合は、最新バージョンの copy を入手する最も簡単な方法です。リポジトリ全体(そしてその中のフォルダ/ファイル)の複製は、リポジトリ全体を複製したり、gitをインストールしたりする必要はありませんが、Zipアーカイブをダウンロードすることです(リポジトリ、フォーク、ブランチ、コミットなど)。 GitHub上の目的のリポジトリ/ fork/branch/commit(例えば、特定のコミット後のファイルのコピーの場合はhttp(s)://github.com/<user>/<repo>/commit/<Sha1>)に移動し、右上近くのDownloadsボタンを選択します。

このアーカイブフォーマットにはgit-repoマジックは含まれていません。追跡されたファイル自体(追跡されている場合はおそらくいくつかの.gitignoreファイルが含まれますが、無視してかまいません:p)。手を加えずに手動で再ダウンロードする必要があります。また、Gitリポジトリとして使用できなくなります。

それがこの場合にあなたが探しているものであるかどうかわからないが(やはり、「ダウンロード」/「ビュー」と「「クローン」/開発)、それでもなお有用でありえます...

13
johnny

特定のフォルダに取り組んでいる人は誰でも、その特定のフォルダ自体を複製する必要がありますので、以下の手順に従ってください。

ステップ1:ディレクトリを作成して下さい。

ステップ2:Gitリポジトリを初期化する(git init

手順3:疎チェックアウトを有効にする(git config core.sparsecheckout true

ステップ4:どのディレクトリが欲しいかGitに伝えます(echo 2015/brand/May(作業したいフォルダを参照)>> .git/info/sparse-checkout

ステップ5:リモコンを追加する(git remote add -f Origin https://jafartke.com/mkt-imdev/DVM.git

最後のステップ6:ファイルを取得する(git pull Origin master

12
Mohammed Jafar

1.このリンクをクリックしてください http://kinolien.github.io/gitzip/
2.ダウンロードしたいGithubフォルダのリンクを貼り付けます。
3.検索をクリックすると、ダウンロードするすべてのファイルが表示されます。
注: - 検索にトークンキーを入力する必要はありません;)..単純にしてください(y)

11
M Younus

別の具体例:

URLから「iOS Pro Geo」フォルダをダウンロードしたい

https://github.com/alokc83/APRESS-Books-Source-Code-/ ツリー/マスター /%20Pro%20iOS%20Geo

そして私はそうすることができます

svn checkout https://github.com/alokc83/APRESS-Books-Source-Code-/trunk/%20Pro%20iOS%20Geo

トランク パス内

編集:( Tommie Cのコメントによる)

はい、 checkout の代わりに export を使用すると、余分なgitリポジトリファイルなしでクリーンコピーが作成されます。

svn export https://github.com/alokc83/APRESS-Books-Source-Code-/trunk/%20Pro%20iOS%20Geo

編集済み: もしtree/masterがurlにないのならばそれをforkしてくださいそしてそれはforkされたurlの中にあるでしょう。 

8
zeeawan

SVNがGitより優れている数少ない場所の1つです。

結局、私たちは3つの選択肢に引き寄せました。

  1. GitHubからデータを取得するにはwgetを使用します(生ファイルビューを使用)。
  2. 上流のプロジェクトに必要なデータサブセットをビルド成果物として公開させる。
  3. 完全なチェックアウトをあきらめて使用します。それは最初のビルドで大ヒットしますが、あなたがたくさんのトラフィックを得ない限り、それは次のビルドでそれほど面倒ではありません。
6

上記の答えを増幅するために、実際のGitHubリポジトリからローカルディレクトリへの実際の例は、

svn ls https://github.com/rdcarp/playing-cards/trunk/PumpkinSoup.PlayingCards.Interfaces

svn export https://github.com/rdcarp/playing-cards/trunk/PumpkinSoup.PlayingCards.Interfaces  /temp/SvnExport/Washburn

時々具体的な例が提案された代用を明確にするのを助けます。

4
John Washburn

ディレクトリツリーを簡単にダウンロードすることができます。

git archive --remote [email protected]:foobar/Test.git HEAD:foo | tar xf -

しかし、それをチェックアウトし、コミットを実行してプッシュバックできるようにするのであれば、できません。

4
araqnid

私はLinuxを使っているので、これを〜/ .bashrcに配置します。

git-dowloadfolder(){
a="$1"
svn checkout ${a/tree\/master/trunk}

}

それからシェルをリフレッシュします。 

source ~/.bashrc 

それからgit-downloadfolder blablablaと一緒に使ってください:D

4
user1088530

これを行うことができるgithubdlというPython3 pipパッケージがあります。

export GIT_TOKEN=1234567890123456789012345678901234567890123
pip install githubdl
githubdl -u http://github.com/foobar/test -d foo

プロジェクトページは ここ

*免責事項:私はこのパッケージを書きました。

4

あなたがunixコマンドに慣れているなら、特別な依存関係やWebアプリケーションは必要ありません。あなたはtarballとしてレポをダウンロードしてあなたが必要なものだけを展開することができます。

例(fontawesomeのサブディレクトリからwoff2ファイル):

curl -L https://api.github.com/repos/FortAwesome/Font-Awesome/tarball | tar xz --wildcards "*/web-fonts-with-css/webfonts/*.woff2" --strip-components=3
  • リンク形式の詳細: https://developer.github.com/v3/repos/contents/#get-archive-link (Zipファイルまたは特定のブランチ/参照の取得方法を含む)
  • パスの先頭部分(*/)を任意のディレクトリと一致するようにします。 Githubはコミットリファレンスを名前に含むラッパーディレクトリを作成しますので、それを知ることはできません。
  • おそらく--strip-componentsをパス内のスラッシュの数(/)と同じにしたい(前の引数)。

これはtarball全体をダウンロードするでしょう。これを回避する必要がある場合、またはGitHubサーバーに親切にしたい場合は、他の回答に記載されているSVN方法を使用してください。

4
Albin

私の状況では、答えは役に立たなかった。 Windows用に開発している場合は、svnがない可能性があります。多くの場合、ユーザーがGitをインストールしていることや、他の理由でリポジトリ全体をダウンロードすることを期待することはできません。 Willem van Ketwichやaztackなど、この質問に答えた人々の一部は、このタスクを達成するためのツールを作成しました。ただし、使用している言語用にツールが記述されていない場合、またはサードパーティのライブラリをインストールしたくない場合、これらは機能しません。

ただし、はるかに簡単な方法があります。 GitHubには、単一のファイルまたはディレクトリのコンテンツ全体をダウンロードできるAPIがあります GETリクエストを使用 。ディレクトリ内のすべてのファイルを列挙するJSONオブジェクトを返すhttps://api.github.com/repos/:owner/:repo_name/contents/:pathを使用して、ディレクトリにアクセスできます。列挙には、ファイルの未加工コンテンツへのリンク、download_urlパラメーターが含まれます。その後、そのURLを使用してファイルをダウンロードできます。

これは、GET要求を行う機能を必要とする2ステップのプロセスですが、これは、ほぼすべての言語、あらゆるプラットフォームで実装できます。ファイルまたはディレクトリを取得するために使用できます。

3
Calvin

ルートアクセス権もgit、svnなども持たないCentOS 7サーバーで作業しているため(必要ではありません!)、githubフォルダーをダウンロードするpythonスクリプトを作成しました: https ://github.com/andrrrl/github-folder-downloader

使い方は簡単です。GitHubプロジェクトから関連部分をコピーするだけです。プロジェクトが https://github.com/MaxCDN/php-maxcdn/ であり、ソースファイルがあるフォルダーが必要だとしますのみである場合、次のようなことをする必要があります。

$ python gdownload.py "/MaxCDN/php-maxcdn/tree/master/src" /my/target/dir/
(ターゲットフォルダーが存在しない場合は作成されます)

lxml ライブラリが必要です。easy_install lxmlでインストールできます
rootアクセス権がない場合(私のような)、.pydistutils.pyファイルを$HOME dirに作成して、次のコンテンツを含めることができます:[install] user=1 And easy_install lxml動作します(参照: https://stackoverflow.com/a/33464597/591257 )。

3
aesede

私たちのチームはこれを行うためのbashスクリプトを書きました。なぜなら、私たちは必要最低限​​のサーバーにSVNをインストールする必要がないからです。

https://github.com/ojbc/docker/blob/master/Java8-karaf3/files/git-download.sh

これはgithub APIを使用し、次のようにコマンドラインから実行できます。

git-download.sh https://api.github.com/repos/ojbc/main/contents/shared/ojb-certs
2
Yogesh Chawla

Git 2.19のgit clone --filter

このオプションは、実際にはサーバーから不要なオブジェクトを取得するのをスキップします。

git clone --depth 1 --no-checkout --filter=blob:none \
  "file://$(pwd)/server_repo" local_repo
cd local_repo
git checkout master -- mydir/

サーバーは次のように構成されている必要があります。

git config --local uploadpack.allowfilter 1
git config --local uploadpack.allowanysha1inwant 1

V2.19.0ではこの機能をサポートするためにGitリモートプロトコルが拡張されましたが、現時点ではサーバーのサポートはありません。しかし、それはすでに現地でテストすることができます。

私はこれをより詳細にカバーしました: どのようにGitリポジトリだけのサブディレクトリをクローンするのですか?

このためにNode.jsを使ってツールを作成しました。それをチェックしてください Repo Dirをダウンロードしてください

npm i -g dl-repo-dirを付けてインストールすると、コマンドrepoがグローバルに利用可能になります。

リポジトリ内のディレクトリをダウンロードして名前を変更する

repo download aztack/download-repo-dir lib src/lib/new-name

リポジトリをダウンロードする

repo download aztack/download-repo-dir '' src/lib/download-repo-dir

与えられたタグを持つプライベートgitlabリポジトリからダウンロード

export GITLAB_API_PRIVATE_TOKEN=YOUR_TOKEN_HERE

repo download gitlab:mygitlab.com:topgroup/subgroup/repo#v1.0.0 dir src/lib/new-name

そして、すべての情報を保存するためのrepo.jsonファイルがあります。

新しいプロジェクトでは、repo.jsonコマンドを使用して、存在するrepo initでプロジェクトを初期化できます。

1
aztack

プログラム的にそれを行う必要があり、SVNに頼りたくない場合は、GitHub APIを使用してすべてのコンテンツを再帰的にダウンロードできます。

インスピレーションのために、ここに私のRuby要旨です: https://Gist.github.com/cvengros/b2a7e82f66519d423b6f

1
pcv

GitHubからディレクトリをエクスポートするには、ディレクトリのURLの "/ tree/master /"を "/ trunk /"に置き換えます。

たとえば、次のURLからディレクトリをエクスポートします。

https://github.com/liferay/liferay-plugins/tree/master/portlets/sample-hibernate-portlet

次のコマンドを実行してください。

svn export https://github.com/liferay/liferay-plugins/trunk/portlets/sample-hibernate-portlet
1
Mohsen Abasi

この関数を使用してください、最初の引数はフォルダへのURLです、2番目はフォルダがダウンロードされる場所です:

function github-dir() {
    svn export "$(sed 's/tree\/master/trunk/' <<< "$1")" "$2"  
}
0
HappyFace

PythonとSVNを使用して特定のGitHubディレクトリをダウンロードしたい場合は、以下のコードを使用します。

import validators
from svn.remote import RemoteClient

def download_folder(url):
    if 'tree/master' in url:
        url = url.replace('tree/master', 'trunk')

    r = RemoteClient(url)
    r.export('output')


if __== '__main__':
    url = input('Enter folder URL: ')
    if not validators.url(url):
        print('Invalid url')
    else:
        download_folder(url)

このチュートリアルの他のGitHub検索とダウンロードのヒントについての詳細をチェックすることができます。 https://python.gotrained.com/search-github-api/

0
GoTrained

これに対する直接的な答えは、まず以下のリンクからsvnをカメすることです。

https://tortoisesvn.net/downloads.html

インストール中にCLIオプションをオンにして、コマンドラインインターフェイスから使用できるようにします。

git hubサブディレクトリのリンクをコピーします。

https://github.com/tensorflow/models/tree/master/research/deeplab

木/マスターをトランクに置き換える

https://github.com/tensorflow/models/trunk/research/deeplab

そして、やります

svn checkout https://github.com/tensorflow/models/trunk/research/deeplab

ファイルは現在のディレクトリのdeeplabフォルダにダウンロードされます。

0
Khan