GitHubでホストされているリモートのGitリポジトリから特定のフォルダまたはディレクトリのみをダウンロードするにはどうすればよいですか?
GitHubレポジトリの例を次に示します。
[email protected]:foobar/Test.git
そのディレクトリ構造:
Test/
foo/
a.py
b.py
bar/
c.py
d.py
foo フォルダだけをダウンロードし、Testプロジェクト全体を複製したくはありません。
2016年9月の更新:コミュニティによって作成された、これを実行できるツールがいくつかあります。
GitZip ( Kino - へのクレジット - / - 彼の答えを支持してください/ - ここで! )
DownGit ( Minhas Kamalへのクレジット - 彼の答えを支持してください ここに! )
Gitはこれをサポートしていませんが、GithubはSVNを介してサポートしています。 Subversionを使ってコードをチェックアウトする場合、Githubは本質的にレポジトリをバックエンドでgitからSubversionに変換してから、要求されたディレクトリを提供します。
この機能を使用して特定のフォルダをダウンロードする方法は次のとおりです。例として、人気のあるJavaScriptライブラリlodash
を使用します。
SubversionのURLを変更します 。 master
ブランチから/docs
のフォルダーをダウンロードしたいので、trunk/docs
を追加します。完全なURLはhttps://github.com/lodash/lodash/trunk/docs
です。なぜこのURLフォーマットを使用しなければならないのかについてのより詳細な説明については下記の私のメモを参照してください。
フォルダをダウンロードします 。コマンドラインに行き、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機能をサポートしています 変更をコミットしたりプッシュしたりするためのサポートも含みます。
使用法:
トークンを取得:
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アカウントを持っていて、このサイトで「トークンを取得する」リンクを使っているなら、それはまたプライベート/パブリックリポジトリをサポートし、レート制限をアップグレードすることができます。
svn
があれば、svn export
を使ってこれを行うことができます。
svn export https://github.com/foobar/Test.git/trunk/foo
URLの形式に注意してください。
https://github.com/
です/trunk
を追加svn export
を実行する前に、まずディレクトリの内容を確認してください。
svn ls https://github.com/foobar/Test.git/trunk/foo
履歴を使ってリポジトリのクローンを作成するのではなく、ファイルをダウンロードしたい場合は、git-archive
を使用してこれを実行できます。
git-archive
gitリポジトリの圧縮されたZipまたはtarアーカイブを作成します。それを特別にするいくつかのこと:
.git/
フォルダ、またはそれが実行されているリポジトリ内の追跡されていないファイルはアーカイブされません。Sshで接続しているリモートリポジトリからdocs/usage
ディレクトリのアーカイブを作成する例です。
# in terminal
$ git archive --format tar --remote ssh://server.org/path/to/git HEAD docs/usage > /tmp/usage_docs.tgz
このブログ記事 と gitドキュメント に詳しい情報があります。
GitHubFolderDownloader というオープンソースプロジェクトを作成しました。リポジトリ全体を複製またはダウンロードすることなく、リポジトリの単一フォルダをダウンロードできます。
他の答えと何の問題もありませんでしたが、私は初めてこのプロセスをさまよう人たちのためのステップバイステップの指示を共有したいと思いました。
〜ターミナルを開くには、スポットライトをクリックしてターミナルと入力し、Enterキーを押します。
ところで - あなたがWindowsか他のプラットホームにあるなら、あなたは でSubversion(svn)のバイナリダウンロードを見つけることができます - http://Subversion.Apache.org
〜フォルダを単にダウンロードするのではなくチェックアウトしたい場合は、SVNヘルプを使用してみてください(tldr:replace export with checkout )
更新
中断されたダウンロード/チェックアウトの再開に関するコメントについてsvn cleanup
に続けてsvn update
を実行してみます。追加オプションについてはSOを検索してください。
それはいけません;各サブディレクトリを個別にチェックアウトできるSubversionとは異なり、Gitはリポジトリ全体で動作します。
きめ細かいアクセスが必要なプロジェクトでは、サブモジュールを使用できます。各サブモジュールは別々のGitプロジェクトであるため、個別にクローンを作成できます。
Gitフロントエンド(例:GitHubのウェブインターフェース、またはgitweb)があなたに与えられたフォルダーを抽出するためのインターフェースを提供することを選ぶことができると考えられます、しかし私の知る限り彼らはそれをしませんしたがって、フォルダに含まれるファイルが多すぎない場合は、それが選択肢になります。
編集 - GitHubは実際にはSVNを介したアクセスを提供しています。これを行う方法についての最新の説明は https://github.com/blog/1438-improved-svn-here-to-stay-old-svn-going-away を参照してください。
"ダウンロード" フォルダではなく "クローン" it(開発用)にしたくない場合は、最新バージョンの copy を入手する最も簡単な方法です。リポジトリ全体(そしてその中のフォルダ/ファイル)の複製は、リポジトリ全体を複製したり、gitをインストールしたりする必要はありませんが、Zipアーカイブをダウンロードすることです(リポジトリ、フォーク、ブランチ、コミットなど)。 GitHub上の目的のリポジトリ/ fork/branch/commit(例えば、特定のコミット後のファイルのコピーの場合はhttp(s)://github.com/<user>/<repo>/commit/<Sha1>
)に移動し、右上近くのDownloads
ボタンを選択します。
このアーカイブフォーマットにはgit-repoマジックは含まれていません。追跡されたファイル自体(追跡されている場合はおそらくいくつかの.gitignoreファイルが含まれますが、無視してかまいません:p)。手を加えずに手動で再ダウンロードする必要があります。また、Gitリポジトリとして使用できなくなります。
それがこの場合にあなたが探しているものであるかどうかわからないが(やはり、「ダウンロード」/「ビュー」と「「クローン」/開発)、それでもなお有用でありえます...
特定のフォルダに取り組んでいる人は誰でも、その特定のフォルダ自体を複製する必要がありますので、以下の手順に従ってください。
ステップ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
)
1.このリンクをクリックしてください http://kinolien.github.io/gitzip/
2.ダウンロードしたいGithubフォルダのリンクを貼り付けます。
3.検索をクリックすると、ダウンロードするすべてのファイルが表示されます。
注: - 検索にトークンキーを入力する必要はありません;)..単純にしてください(y)
別の具体例:
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の中にあるでしょう。
SVNがGitより優れている数少ない場所の1つです。
結局、私たちは3つの選択肢に引き寄せました。
上記の答えを増幅するために、実際の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
時々具体的な例が提案された代用を明確にするのを助けます。
ディレクトリツリーを簡単にダウンロードすることができます。
git archive --remote [email protected]:foobar/Test.git HEAD:foo | tar xf -
しかし、それをチェックアウトし、コミットを実行してプッシュバックできるようにするのであれば、できません。
私はLinuxを使っているので、これを〜/ .bashrcに配置します。
git-dowloadfolder(){
a="$1"
svn checkout ${a/tree\/master/trunk}
}
それからシェルをリフレッシュします。
source ~/.bashrc
それからgit-downloadfolder blablablaと一緒に使ってください:D
これを行うことができるgithubdl
というPython3 pipパッケージがあります。
export GIT_TOKEN=1234567890123456789012345678901234567890123
pip install githubdl
githubdl -u http://github.com/foobar/test -d foo
プロジェクトページは ここ
*免責事項:私はこのパッケージを書きました。
あなたが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
*/
)を任意のディレクトリと一致するようにします。 Githubはコミットリファレンスを名前に含むラッパーディレクトリを作成しますので、それを知ることはできません。--strip-components
をパス内のスラッシュの数(/
)と同じにしたい(前の引数)。これはtarball全体をダウンロードするでしょう。これを回避する必要がある場合、またはGitHubサーバーに親切にしたい場合は、他の回答に記載されているSVN方法を使用してください。
私の状況では、答えは役に立たなかった。 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ステップのプロセスですが、これは、ほぼすべての言語、あらゆるプラットフォームで実装できます。ファイルまたはディレクトリを取得するために使用できます。
ルートアクセス権も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 )。
私たちのチームはこれを行うための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
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
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
でプロジェクトを初期化できます。
プログラム的にそれを行う必要があり、SVNに頼りたくない場合は、GitHub APIを使用してすべてのコンテンツを再帰的にダウンロードできます。
インスピレーションのために、ここに私のRuby要旨です: https://Gist.github.com/cvengros/b2a7e82f66519d423b6f
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
この関数を使用してください、最初の引数はフォルダへのURLです、2番目はフォルダがダウンロードされる場所です:
function github-dir() {
svn export "$(sed 's/tree\/master/trunk/' <<< "$1")" "$2"
}
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/
これに対する直接的な答えは、まず以下のリンクからsvnをカメすることです。
インストール中にCLIオプションをオンにして、コマンドラインインターフェイスから使用できるようにします。
git hubサブディレクトリのリンクをコピーします。
例
https://github.com/tensorflow/models/tree/master/research/deeplab
木/マスターをトランクに置き換える
そして、やります
svn checkout https://github.com/tensorflow/models/trunk/research/deeplab
ファイルは現在のディレクトリのdeeplabフォルダにダウンロードされます。