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


1106

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

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

git@github.com:foobar/Test.git

そのディレクトリ構造:

Test/
├── foo/ 
│   ├── a.py
│   └── b.py   
└── bar/
    ├── c.py
    └── d.py

fooフォルダのみをダウンロードし、Testプロジェクト全体のクローンを作成したくない。


4
-私は、この使用してSVNチェックアウトのためのシェルスクリプトを書いたgithub.com/Decad/github-downloader
デクランクック

391
これに「公式の」Webインターフェースソリューションがない理由を誰かが私に説明できますか?実装するのは簡単な機能のようですが、非常に便利です。
アレクサンダー-モニカを復活させる

3
KinoLienのgitzipを使用してChrome拡張機能を開発しました。github.com/charany1/GHSDD
charany1

3
@janosの回答を参照してください。svnの代替案が最適で、認証なし、登録なし、制限なし、プラグインなし
stackdave 2017年

5
私はこれのために軽量のソリューションを作成し(download-directory.github.io)、それはRefined GitHubに
fregante

回答:


1034

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


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

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

  1. ダウンロードするフォルダに移動します。ブランチ/testからダウンロードしましょうmastergithub repo URLの例

  2. subversionのURLを変更します。交換してくださいtree/mastertrunk

    https://github.com/lodash/lodash/tree/master/test

    https://github.com/lodash/lodash/trunk/test

  3. フォルダをダウンロードします。コマンドラインに移動し、SVNでフォルダーを取得します。

svn checkout https://github.com/lodash/lodash/trunk/test

Githubは大きなリポジトリを変換するのに最大30秒かかるため、すぐにアクティビティが表示されない場合があります。しばらくお待ちください。

完全なURL形式の説明:

  • masterブランチに興味がある場合は、trunk代わりに使用してください。したがって、完全なパスはtrunk/foldername
  • fooブランチに興味がある場合は、branches/foo代わりに使用してください。フルパスは次のようになりますbranches/foo/foldername
  • Protip:svn ls必要に応じて、ダウンロード前に使用可能なタグとブランチを確認するために使用できます

それで全部です!Github 、変更のコミットとプッシュのサポートを含む、より多くのsubversion機能もサポートしています。


162
恐ろしい、単に置き換えるtree/mastertrunk、あなたは、特定のフォルダを取得することができます。
セルジオミヒェルス

6
@ user1146881と@SérgioMichelsに感謝tree/mastertrunkます。この情報は回答に追加する必要があります。
baptx 2013

8
svn exportSubversionの作業コピーが欲しくないので、これを使用するように変更しました。次に、結果のフォルダーをGitに追加しました。(どういうわけかディレクトリツリーの大きな部分を失ったので、フォークしたレポからエクスポートしました。)
Grault

5
@ num3ric-返信が遅くなり申し訳ありませんが、「trunk」を「branches / yourbranch」に置き換えることができるはずです
ニック

2
@ElijahLynn編集ありがとうございます。その情報を含めるべきでした!2つのこと-私はあなたの編集を受け入れましたが、私自身の一部をロールバックしました(とにかくこれを行うことを意味していました、それはあまりにも面倒に感じました)。さらに、私はあなたのbranchパスをに変更しました。branchesこれは正しいと思います。そうでない場合は、先に進んで元に戻します。
ニック

567

この機能の2つのオプション:

オプション1:GitZipブラウザー拡張機能

Chrome拡張機能Firefoxアドオン

使用法:

  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ライブラリを使用)。

ステップ1:右上のフィールドにgithub urlを入力します。
ステップ2:Enterキーを押すか、ダウンロードzipを直接ダウンロードするか、[検索]をクリックしてサブフォルダーとファイルのリストを表示します。
ステップ3:「Download Zip File」または「Get File」ボタンをクリックしてファイルを取得します。

ほとんどの場合、Github Trees APIの制限により、フォルダーに1,000を超えるファイルが含まれていることを除いて、正常に機能します。(Github API#Contentsを参照

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


5
これは素晴らしいですが、需要があなたのレート制限を超えてしまい、それが機能しなくなっているので、とても素晴らしいようです;-) GitHub oAuthでログインできることは素晴らしいことです。認証されたリクエストであるため、レート制限
hobailey

3
@hobaileyこれで、アクセストークンを取得してレート制限を上げることができ、プライベートリポジトリにもアクセスできます。
キノジュン

1
@MYounas Github API Docの OAuth、Trees、Blobsの章について参照してくださいまた、gitzip実装にはJSZip、FileSaver.js jsライブラリを使用します。
キノ

1
これを行うクロム拡張機能に興味がありますか?
goldylucks 2017年

4
これは実際のgithub Webサイトに追加する必要があり、非常に便利です。
2017年

508

移動DownGit >あなたのURL>ダウンロードしてください!

これで、DownGitから GitHubのパブリックディレクトリまたはファイル(特に大きなファイル)を直接ダウンロードまたはダウンロードリンクを作成できます。ここに簡単なデモがあります


DownGit


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


2
Bro、私はあなたが作成したDownGitのようなプロジェクトを作成する方法を意味します。
Muhammad Younus

12
基本的な方法は次のとおりです。1.ディレクトリリンクを取得する(angular-routeを使用)、2。GitHub APIに移動する、3。ディレクトリを検索してすべてのファイルをダウンロードする、4。zipファイルを作成する(jszipを使用した) &ファイルとして保存します(これにはファイルセーバーを使用します)。明確に理解するために、私のプロジェクトを見てみることをお勧めします。
Minhas Kamal

1
詳細な手順については、Broxに感謝します。チュートリアルやリンクを提案してもらえれば、とても感謝しています。
Muhammad Younus

5
これはクールですが、それは(wgetのような)自動化ツールとの仕事をしません
リング

1
上のこのハングdownloaded 25 of 25 files私はこのURLからダウンロードしようとすると:github.com/dssg/hitchhikers-guide/tree/master/curriculum/...
Wassadamo

164

をお持ちの場合はsvnsvn 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

これはまだ機能しますか?これをTortiseSVNで試してみたところ、権限エラーが発生し、資格情報の提供を求められました。
john

2
@johnこれは手遅れになるには遅すぎると確信していますが、GitHubアカウントで2要素認証を有効にしていますか?もしそうなら、私あなたがパスワードのために事前に生成されたキーを使用する必要があることをどこかで読んだと思います(GitHub設定で見つける必要があります)。
ニック、2015年

1
URLのフォーマットについては、.git拡張機能を維持できます。完全なプロジェクトリンクを使用して、最初svn lsにプロジェクトの完全パスを続けて使用できます。例:svn ls https://github.com/RobTillaart/Arduino.git。1つのフォルダーのみをエクスポートするには/trunk、のように、その後に目的のパスを追加するだけsvn export https://github.com/RobTillaart/Arduino.git/trunk/libraries/DHTlibです。プロジェクトパスをそのまま維持する方が簡単です。
jgrocha 2016

@jgrocha 2013年にそのように機能したかどうかはわかりませんが、現在は機能しているため、投稿を更新しました
janos

1
例:でコンテンツをダウンロードするにはhttps://github.com/miguelgrinberg/python-socketio/tree/master/examples/wsgi、を実行しsvn export https://github.com/miguelgrinberg/python-socketio.git/trunk/examples/wsgiます。と呼ばれるディレクトリwsgiが現在の作業ディレクトリの下に作成されます。ソースファイルのみ。いいえ.git、subversion関連のファイルはありません。
Rockallite 2017年

74

Generic git Repoの場合:

履歴のあるリポジトリを複製せずにファイルをダウンロードする場合は、を使用してこれを行うことができますgit-archive

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

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

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

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

詳細については、このブログ投稿gitドキュメントをご覧ください。

GitHubリポジトリに関する注意:

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


2
git archive --format tar形式はtar.gzではなく、tarです。
出羽

これが最良の答えでなければなりません
フェリペ・コスタ

2
これが最良の答えだと思いますが、git archiveコマンドはhttpsプロトコルでは機能しないことに注意してください。
bitfox

@yukihaneはtar.gzからtarへの拡張を編集しました。うまくいけば、OPがこれを搭載しています
mihai

36

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


GitHubからフォルダーをダウンロードするだけでよい場合は、うまく機能します。必要なフォルダーをダウンロードするには、Githubトークンのみが必要です。賛成票が増えると、この回答に目立つようになります。
Alex Essilfie 2015年

34

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

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

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

  1. MacではすでにSVNを持っている可能性があります(ターミナルを開いてテストし、「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. 言葉で:トランク
  8. ファイルの宛先フォルダーを入力します(この例では、現在のユーザーのダウンロードフォルダー内にターゲットフォルダーを保存しています)
  9. ここでは、スペースは単なるスペースバーであり、(スペース)という単語ではありません〜/ Downloads / HeadsUpUI
  10. 最後のターミナルコマンドは、フォルダーをダウンロードするための完全なコマンドを示しています(アドレスをステップ5と比較してくださいsvn export https://github.com/mingsai/Sample-Code/trunk/HeadsUpUI〜/ Downloads / HeadsUpUI

ところで、Windowsまたはその他のプラットフォームを使用している場合は、http: //subversion.apache.orgでsubversion(svn)のバイナリダウンロードを見つけることができます。

〜フォルダを単にダウンロードするのではなくチェックアウトしたい場合は、svnヘルプを使用してみてください(tldr:exportcheckoutに置き換えてください)

更新

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


1
特定のフォルダーから多くのファイルをダウンロードする必要があり、ダウンロードの途中でこのエラーが発生しました:svn:E175002:REPORT of '/ bgmartins / scripts-parlamento /!svn / vcc / default':200 OK(github.com)どうすればダウンロードを再開できますか?
ミゲル

私のために働いた。すごいです。
ヒースラフター

24

特定のフォルダーで作業している人は誰でも、その特定のフォルダー自体を複製する必要があります。これを行うには、スパースチェックアウトを使用して以下の手順に従ってください。

  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


残念ながら、このコメントは十分な賛成票を獲得できませんでした。提供されているソリューションは、githubリポジトリだけでなく、すべてのgitリポジトリに適用されるようです。
Kalyan

9
しかし、これは実際には望まれていたことを行いません。それでもリポジトリ全体のクローンが作成され、一部のフォルダはチェックアウトされません。
Chris


このエラーが表示されます。スパースチェックアウトで作業ディレクトリにエントリが残りません。
オレンジキャタピラー

20

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

よりきめ細かなアクセスが必要なプロジェクトの場合、サブモジュールを使用できます。各サブモジュールは個別のGitプロジェクトであるため、個別に複製できます。

Gitフロントエンド(GitHubのWebインターフェース、gitwebなど)が特定のフォルダーを抽出するためのインターフェースを提供することを選択できると考えられますが、私の知る限り、それらはそれを行いません(ただし、個別のファイルをダウンロードできます) 、したがって、フォルダに含まれているファイルが多すぎない場合、それはオプションです)

編集 -GitHubは実際にはSVN経由のアクセスを提供しており、これにより(コメントどおり)これを行うことができます。これを行う方法の最新の手順については、https://github.com/blog/1438-improved-svn-here-to-stay-old-svn-going-awayを参照してください


github API経由で何かありますか?
g_inherit 2011

14

(開発のために)フォルダーを「ダウンロード」し「複製」したくない場合は、リポジトリの最新バージョンのコピー(つまり、その中のフォルダー/ファイル)を取得する最も簡単な方法は、リポジトリ全体のクローンを作成する必要もなく、最初にgitをインストールする必要もなく、GitHubの目的のリポジトリ/ fork / branch / commitに移動して、zipアーカイブ(任意のリポジトリ、フォーク、ブランチ、コミットなど)をダウンロードします。 (たとえばhttp(s)://github.com/<user>/<repo>/commit/<Sha1>、特定のコミット後のファイルのコピーの場合)Downloads、右上のボタンを選択します。

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

それがこの場合に探しているものであるかどうかはわかりませんが(ここでも、「ダウンロード」/「表示」対「クローン」/開発))にもかかわらず、それは役立つ場合があります...


9
ダウンロードリンクが表示されない場合は、メインのリポジトリページ(子ディレクトリではない)にいることを確認してください。リポジトリ全体のzipしかダウンロードできないようです。また、このgithubヘルプページが役立つ場合があります。
JD Smith

2
簡単なポイントアンドクリックアクセス。以前のリリースを簡単に入手できます。ダウンロードしたzipから目的のフォルダーを簡単に取り出すことができます。ありがとうございました。
アンディトーマス

1
ダウンロード元となる汎用URL tar.gzhttps://github.com/${owner}/${repo}/archive/${hash}.tar.gz
Krisztian 2017

11

2019年のまとめ

これを手動またはプログラムで実行するかどうかに応じて、これを処理するさまざまな方法があります。

以下に要約する4つのオプションがあります。そして、より実践的な説明を好む人のために、YouTubeビデオをまとめました:GitHubから個別のファイルとフォルダーをダウンロードします

また、(フォルダーではなく)GitHubから単一のファイルをダウンロードする必要がある人のために、StackOverflowに同様の回答を投稿しました。


1. GitHubユーザーインターフェイス

  • リポジトリのホームページにダウンロードボタンがあります。もちろん、これによりリポジトリ全体がダウンロードされます。その後、ダウンロードを解凍し、必要な特定のフォルダを手動でドラッグする必要があります。

2.サードパーティツール

  • これを処理できるさまざまなブラウザー拡張機能とWebアプリがあり、その1つがDownGitです。GitHub URLをフォルダー(例:)に貼り付け、[ https://github.com/babel/babel-eslint/tree/master/libダウンロード]ボタンを押すだけです。

3. Subversion

  • GitHubはgit-archive(特定のフォルダーをダウンロードできるgit機能)をサポートしていません。ただし、GitHubはさまざまなSubversion機能をサポートしており、そのうちの1つをこの目的に使用できます。Subversionはバージョン管理システム(gitの代替)です。Subversionをインストールする必要があります。ダウンロードするフォルダーのGitHub URLを取得します。ただし、このURLを変更する必要があります。リポジトリへのリンクの後に「トランク」という単語が続き、ネストされたフォルダへのパスが必要です。つまり、上記で説明したのと同じフォルダリンクの例を使用して、「tree / master」を「trunk」に置き換えます。最後に、ターミナルを開いて、コンテンツをダウンロードするディレクトリに移動し、次のコマンドを入力します(URLを作成したURLに置き換えます)。svn export https://github.com/babel/babel-eslint/trunk/lib、Enterキーを押します。

4. GitHub API

  • これは、このタスクをプログラムで実行する場合に必要なソリューションです。そしてこれは実際にはDownGitが内部で使用しているものです。GitHubのREST APIを使用し、コンテンツエンドポイントへのGETリクエストを実行するスクリプトを記述します。エンドポイントは次のように構成できますhttps://api.github.com/repos/:owner/:repo/contents/:path。プレースホルダーを置き換えた後のエンドポイントの例は次のとおりです。https://api.github.com/repos/babel/babel-eslint/contents/lib。これにより、そのフォルダーに存在するすべてのコンテンツのJSONデータが得られます。データには、コンテンツがフォルダーかファイルかどうか、ファイルの場合はダウンロードURL、フォルダーの場合はAPIエンドポイント(そのフォルダーのデータを取得できるようにする)など、必要なものがすべて含まれています。このデータを使用して、スクリプトはターゲットフォルダー内のすべてのコンテンツを再帰的に調べ、ネストされたフォルダー用のフォルダーを作成し、各フォルダーのすべてのファイルをダウンロードできます。チェックアウトDownGitのコードをインスピレーションを得るため。

9

別の具体的な例:

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

https://github.com/alokc83/APRESS-Books-Source-Code-/ tree / master /%20Pro%20iOS%20Geo

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

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

パスのトランクに注意してください

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

はい、チェックアウトの 代わりにエクスポートを使用すると、余分なgitリポジトリファイルなしでクリーンなコピーが得られます。

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

編集:ツリー/マスターがURLに存在しない場合、それをフォークすると、フォークされたURLに存在します。


2
チェックアウトではなくフォルダのコピーをダウンロードするだけの場合は、チェックアウトをエクスポートに変更するだけです。
Tommie C.

回答ありがとうございます。ブランチをダイビングできますか?feature1ブランチのaaaフォルダをダウンロードしたいとしましょう
hsafarya

7

これgithubdlを行うことができると呼ばれるPython3 pipパッケージがあります*:

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

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

*免責事項:このパッケージを作成しました。


6

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

最終的に、3つのオプションに引き寄せられました。

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

4
まあ、それはGit vs Subversionではなく、GitHubフラットアウトがgit-archiveを許可しないことです。(理由を知りたいです。)
Rob Howard

6

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は、名前にcommit refが含まれるラッパーディレクトリを作成するため、認識できません。
  • おそらく、パス(前の引数)--strip-componentsのスラッシュ(/)の量と同じにする必要があります。

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


5

ディレクトリツリーの簡単なダウンロードを行うことができます:

git archive --remote git@github.com:foobar/Test.git HEAD:foo | tar xf -

しかし、それをチェックアウトして、コミットを実行してプッシュバックできるようにするつもりなら、それはできません。


1
無効なコマンド: 'git-upload-archive' foobar / Test.git '' sshを使用してgit:// URLのクローンを作成しているようです。core.gitProxy構成オプションとGIT_PROXY_COMMAND環境変数が設定されていないことを確認してください。fatal:リモートエンドが予期せずハングアップtar:これはtarアーカイブのようには見えませんtar:以前のエラーが原因でエラーステータスで終了します
g_inherit

@g_inheritこの問題を再現できます。これは正しい方向かもしれませんが、この答えは無効です。
UliKöhler2014年

多くの反対票にもかかわらず、これは私のために働いた唯一のアドバイスです。
bhaskarc 14

5

上記の答えを増幅するために、実際の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

時々、具体例が提案された代替を明確にするのに役立ちます。


5

答えはどれも私の状況では役に立ちませんでした。Windows向けに開発している場合は、svnがない可能性があります。多くの状況では、ユーザーがGitをインストールすることを期待できないか、他の理由でリポジトリ全体をダウンロードしたくない場合があります。ウィレムファンケッチウィッチやアザックなど、この質問に答えた人々の何人かは、この仕事を達成するためのツールを作りました。ただし、ツールが使用している言語用に作成されていない場合、またはサードパーティのライブラリをインストールしたくない場合、これらは機能しません。

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

これは、GETリクエストを作成する機能を必要とする2つのステップのプロセスですが、これは、ほとんどすべての言語、任意のプラットフォームで実装できます。ファイルまたはディレクトリを取得するために使用できます。



4

私はlinuxを使用しているので、これを〜/ .bashrcに配置し、:D $ HOME / .bashrcと呼びます。

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

}

次にシェルを更新します

source ~/.bashrc 

次にgit-downloadfolder blablabla:Dで使用します


3

私は、rootアクセスもgit、svnなども持っていない(またはしたくない!)CentOS 7サーバーを使用しているため、Pythonスクリプトを作成してgithubフォルダーをダウンロードしました: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 easy_install lxmlなりますちょうど仕事(参照:https://stackoverflow.com/a/を33464597/591257)。


3

あとわずか5ステップ

1)ここからSVNをダウンロードします
2)CMDを開き、以下のようにSVN binディレクトリに移動します。

cd %ProgramFiles%\SlikSvn\bin

3)レッツ・私は、このダウンロードへのWANと仮定したディレクトリURL に置き換え今)4を して )5今、同じディレクトリにダウンロードフォルダに、この最後のコマンドを発射。
https://github.com/ZeBobo5/Vlc.DotNet/tree/develop/src/Samples

tree/develop
or
tree/master
trunk

svn export https://github.com/ZeBobo5/Vlc.DotNet/trunk/src/Samples


これはプライベートリポジトリでは機能しないようです
Sundeep Pidugu

ええ、プライベートリポジトリでは機能しません。プライベートリポジトリのダウンロードにはGITをお勧めします。
ムハンマドアリ

2

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

2

これに対する簡単な答えは、リンクをたどって最初に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チェックアウトhttps://github.com/tensorflow/models/trunk/research/deeplab

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


2

次のようにgit svnを使用できます。

git svn clone https://github.com/lodash/lodash/trunk/test

これにより、特にWindowsユーザーの場合、svnを設定する手間を省くことができます。


ありがとうございました。Windowsで動作することを保証できます。ただし、gcloudでは機能しません。それはgitを言います: 'svn'はコマンドではありません
JOSEPH Blessingh

sudo apt install git-svnWSLで実行する場合は必須です。
Jammy Dodger

1

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

インスピレーションを得るために、これがルビーの要旨です:https : //gist.github.com/cvengros/b2a7e82f66519d423b6f


1

この関数を使用します。最初の引数はフォルダーのURL、2番目はフォルダーのダウンロード先です。

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

1

git clone --filter Git 2.19から

このオプションは実際にはサーバーからの不要なオブジェクトのフェッチをスキップします:

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

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

これについては、Gitリポジトリのサブディレクトリのみを複製するにはどうすればよいですか?


1
興味深いと賛成。この2.19機能については別の場所で言及したに違いない。
VonC

@VonC私はあなたにこれを一度打ち負かしたと思います:stackoverflow.com/questions/2466735/…そして私はリリースXDの後でそれを見ただけです!私はもちろん2.22リリースの少し後で今日グーグルでした、すべての答えはもちろんもちろん更新されました;-)常に別のセミデュプリケートが常に残っていることを私を楽しませることは決してありません、そして私は1年後にそれを見つけることになります少し異なるクエリ。私はgitであなたを倒すつもりはありません。haha
Ciro Santilli冠状病毒审查六四事件法轮功

さて、良い仕事を続けてください:すべてのコミュニティはこの小さなサイドの競争の恩恵を受けるでしょう(そして、私はその時に他の回答を
賛成

@VonC冗談はもちろん、私もあなたの作品に賛成票を投じます。XD
Ciro Santilli冠状病毒审查六四事件法轮功

1

どういうわけか、svn私にとってソリューションは機能しません。svn他に何もする必要がないので、それを作ることに時間を費やすのは意味がありませんでした。そこで、私はすでに持っているツールを使用して簡単なソリューションを探しました。このスクリプトは、curlおよびのみを使用awkして、GitHubディレクトリにあるすべてのファイルをダウンロードします"/:user:repo/contents/:path"

GitHub REST API "GET /repos/:user:repo/contents/:path"コマンドへの呼び出しの返された本文は "download_url"、ディレクトリ内の各ファイルのリンクを含むオブジェクトを返します。

このコマンドラインスクリプトは、REST APIを使用して呼び出し、curlAWKを介して結果を送信します。AWKは、「download_url」行を除くすべての行を除外し、リンクから引用符とコンマを消去してから、curlへの別の呼び出しを使用してリンクをダウンロードします。

curl -s https://api.github.com/repos/:user/:repo/contents/:path | awk \
     '/download_url/ { gsub("\"|,", "", $2); system("curl -O "$2"); }'

1

git sparse-checkout

Git 2.25.0にgit sparse-checkout、既存の機能を使いやすくする新しい実験的なコマンドと、大規模なリポジトリのいくつかの重要なパフォーマンス上の利点が含まれています。(GitHubブログ

現在のバージョンの例:

git clone --filter=blob:none --sparse https://github.com/git/git.git
cd git
git sparse-checkout init --cone
git sparse-checkout add t

最も注目すべきは

  • --sparsegitリポジトリの最上位ディレクトリファイルのみを作業コピーにチェックアウトします
  • git sparse-checkout add ttサブフォルダを徐々に追加/チェックアウトするgit

その他の要素

  • git sparse-checkout init 部分的なチェックアウトを可能にするためにいくつかの準備をします
  • --filter=blob:none必要なgitオブジェクトのみをダウンロードして、データのフェッチを最適化します(詳細については、部分的なクローン機能をご覧ください)
  • --cone また、より制限されたファイル包含パターンを適用することにより、パフォーマンスをスピードアップします

GitHubのステータス

GitHubは、選択されたいくつかのリポジトリで有効になっている間も、この機能を内部で評価しています[...]。機能が安定して成熟するにつれて、進捗状況を随時更新していきます。(ドキュメント


賛成。そのコマンドをstackoverflow.com/a/59515426/6309で、クローンパターンセットを使用して提示しました。
VonC
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.