如何从GitHub上托管的远程Git仓库下载特定文件夹或目录?
举个例子说GitHub repo住在这里:
git@github.com:foobar/Test.git
其目录结构:
Test/ foo/ a.py b.py bar/ c.py d.py
我只想下载 foo 文件夹而不是克隆整个Test项目 .
使用此函数,第一个参数是文件夹的url,第二个参数是文件夹下载到的位置:
function github-dir() { svn export "$(sed 's/tree\/master/trunk/' <<< "$1")" "$2" }
无论谁正在处理特定文件夹,他需要克隆该特定文件夹本身,所以请按照以下步骤** ---使用SPARSE CHECKOUT --- **
第1步:创建目录 .
第2步:初始化Git存储库 . ( git init )
git init
第3步:启用稀疏检出 . ( git config core.sparsecheckout true )
git config core.sparsecheckout true
第4步:告诉Git你想要哪些目录(echo 2015 / brand / May(参考你想要处理的文件夹)>> .git/info/sparse-checkout )
.git/info/sparse-checkout
第5步:添加遥控器( git remote add -f origin https://jafartke.com/mkt-imdev/DVM.git )
git remote add -f origin https://jafartke.com/mkt-imdev/DVM.git
最后一步6:获取文件( git pull origin master )
git pull origin master
要从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
只是为了放大上面的答案,从真正的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
有时,一个具体的例子有助于澄清所提出的替代 .
我使用的是没有root访问权限的CentOS 7服务器,也没有git,svn等(也不想!)所以制作了一个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/(如果不存在,将创建目标文件夹)
$ python gdownload.py "/MaxCDN/php-maxcdn/tree/master/src" /my/target/dir/
它需要lxml库,可以用 easy_install lxml 安装如果您没有root访问权限(像我一样),您可以使用以下内容在 $HOME 目录中创建一个 .pydistutils.py 文件: [install] user=1 和 easy_install lxml 将正常工作(ref:https://stackoverflow.com/a/33464597/591257) .
easy_install lxml
$HOME
.pydistutils.py
[install] user=1
在我的情况下,没有一个答案有帮助 . 如果您正在为Windows开发,则可能没有svn . 在许多情况下,不能指望用户安装Git,或者由于其他原因不想下载整个存储库 . 回答这个问题的一些人,比如Willem van Ketwich和aztack,制作了完成这项任务的工具 . 但是,如果该工具不是针对您正在使用的语言编写的,或者您不想安装第三方库,则这些工具不起作用 .
但是,有一种更简单的方法 . GitHub有一个API,允许您下载单个文件或整个目录的内容using GET requests . 您可以使用 https://api.github.com/repos/:owner/:repo_name/contents/:path 访问目录,该目录返回枚举目录中所有文件的JSON对象 . 枚举中包含指向文件原始内容的链接 download_url 参数 . 然后可以使用该URL下载该文件 .
https://api.github.com/repos/:owner/:repo_name/contents/:path
download_url
这是一个两步过程,需要能够发出GET请求,但这可以在任何平台上以几乎任何语言实现 . 它可用于获取文件或目录 .
你不能;与Subversion不同,Git可以在整个存储库的基础上进行操作,其中每个子目录都可以单独检出 .
对于需要更细粒度访问的项目,可以使用子模块 - 每个子模块都是一个单独的Git项目,因此可以单独克隆 .
可以想象Git前端(例如GitHub的web界面或gitweb)可以选择为您提供一个接口来提取给定的文件夹,但据我所知,他们都没有这样做(尽管他们确实让你下载单个文件,所以如果文件夹中不包含太多文件,那么这是一个选项)
Edit - GitHub实际上提供了通过SVN的访问,这将允许你这样做(根据评论) . 有关如何执行此操作的最新说明,请参阅https://github.com/blog/1438-improved-svn-here-to-stay-old-svn-going-away
2016年9月更新:社区创建了一些可以为您执行此操作的工具:
GitZip(致Kino的信用 - upvote他的回答right here!)
DownGit(致信Minhas Kamal - upvote他的回答right here!)
Git不支持此功能,但Github通过SVN支持 . 如果你用subversion签出你的代码,Github将在后端基本上将repo从git转换为subversion,然后提供所请求的目录 .
这里's how you can use this feature to download a specific folder. I' ll使用流行的javascript库 lodash 作为示例 .
lodash
Get the repo URL . 首先,将Github仓库的URL复制到剪贴板 .
Modify the URL for subversion . 我想从 master 分支下载 /docs 的文件夹,所以我将追加 trunk/docs . 完整网址现在是 https://github.com/lodash/lodash/trunk/docs . 请参阅下面的注释,以更深入地解释我们必须使用此URL格式的原因 .
master
/docs
trunk/docs
https://github.com/lodash/lodash/trunk/docs
Download the folder . 转到命令行并使用SVN获取文件夹 . svn checkout https://github.com/lodash/lodash/trunk/docs
svn checkout https://github.com/lodash/lodash/trunk/docs
您可能没有立即看到任何活动,因为Github占用了转换更大的存储库到30秒,所以请耐心等待 .
完整的URL格式说明:如果您对master分支感兴趣,请改用trunk . 所以完整路径是trunk / foldername如果你对foo branch感兴趣,请使用branches / foo . 完整路径看起来像branches / foo / foldername Protip:如果你愿意,可以在下载之前使用svn ls查看可用的标签和分支
就这样! Github supports more subversion features也包括对提交和推送更改的支持 .
其他答案没有错,但我只是想我会分享那些第一次在这个过程中徘徊的人的分步说明 .
〜要打开终端,只需单击聚光灯并键入终端然后按Enter键
在Mac上,您可能已经拥有SVN(仅测试打开的终端并键入 "svn" 或 "which svn" ~不带引号)
在Github上:通过单击仓库中的特定文件夹名称,找到git文件夹(而不是仓库)的Github路径
从浏览器的地址栏复制路径
Open Terminal 并输入: svn export
下一次粘贴地址(例如): https://github.com/mingsai/Sample-Code/tree/master/HeadsUpUI
替换字: tree/master
,单词: trunk
键入文件的目标文件夹(在本例中,我将目标文件夹存储在当前用户的Downloads文件夹中)
这里的空格只是空格键而不是 (space) ~/Downloads/HeadsUpUI
final terminal命令显示下载文件夹的完整命令(将地址与步骤5进行比较) svn export https://github.com/mingsai/Sample-Code/trunk/HeadsUpUI ~/Downloads/HeadsUpUI
顺便说一句 - 如果你在Windows或其他平台上,你可以在http://subversion.apache.org找到subversion(svn)的二进制下载
〜如果你想签出文件夹而不是简单地下载它,请尝试使用svn help(tldr:用导出替换导出)
Update
关于恢复中断下载/结账的评论 . 我会尝试运行 svn cleanup ,然后是 svn update . 请搜索SO以获取其他选项 .
svn cleanup
svn update
我使用linux,把它放在〜/ .bashrc中,称为甚至:D $ HOME / .bashrc
git-dowloadfolder(){ a="$1" svn checkout ${a/tree\/master/trunk} }
然后刷新shell
source ~/.bashrc
然后使用它与git-downloadfolder blablabla:D
有一个名为 githubdl 的Python3 pip包可以做到这一点*:
githubdl
export GIT_TOKEN=1234567890123456789012345678901234567890123 pip install githubdl githubdl -u http://github.com/foobar/test -d foo
项目页面是here
*免责声明:我写了这个包 .
如果你真的只想 "download" 文件夹而不是 "clone" 它(用于开发),最简单的方法就是获得最新版本的存储库(因此其中包含文件夹/文件)的副本,而无需克隆整个repo甚至首先安装git,是通过转到GitHub上所需的repository / fork / branch / commit来下载一个zip存档(对于任何repo,fork,branch,commit等)(例如 http(s)://github.com/<user>/<repo>/commit/<Sha1> for在特定提交之后的文件副本)并选择右上角附近的 Downloads 按钮 .
http(s)://github.com/<user>/<repo>/commit/<Sha1>
Downloads
这种存档格式不包含任何git-repo魔法,只包含跟踪文件本身(如果跟踪它们可能还有一些.gitignore文件,但你可以忽略它们:p) - 这意味着如果代码发生变化而你想要保持最佳状态,您必须手动重新下载它,这也意味着您将无法将其用作git存储库...
不确定在这种情况下你是否正在寻找(再次,“下载”/查看vs“克隆”/开发),但它仍然有用......
现在,您可以 DIRECTLY DOWNLOAD 或从DownGit为任何GitHub公共目录或文件(特别是大文件)创建 DOWNLOAD LINK !这是一个简单的示范 -
您还可以配置下载文件的属性detailed usage .
我创建了一个名为GitHubFolderDownloader的开源项目 . 它允许您下载存储库的单个文件夹,而无需克隆或下载整个存储库 .
您可以简单地下载目录树:
git archive --remote git@github.com:foobar/Test.git HEAD:foo | tar xf -
但是如果你想要检查它,并且能够做出提交并将它们推回去,那么你不能这样做 .
我们的团队编写了一个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-archive 执行此操作 .
git-archive 生成git存储库的压缩zip或tar存档 . 一些让它变得特别的东西:
You can choose which files or directories in the git repository to archive.
它不归档 .git/ 文件夹,也不归档运行的存储库中任何未跟踪的文件 .
.git/
您可以归档特定分支,标记或提交 . 使用git管理的项目通常使用它来生成项目版本(beta,release,2.0等)的归档,供用户下载 .
从您使用ssh连接到的远程仓库创建 docs/usage 目录的存档的示例:
docs/usage
# in terminal $ git archive --format tar --remote ssh://server.org/path/to/git HEAD docs/usage > /tmp/usage_docs.tgz
this blog post和git documentation中的更多信息 .
GitHub doesn't allow git-archive access . ☹️
我写了一个工具Node.js就是为了这个 . 看看Download Repo Dir
使用 npm i -g dl-repo-dir 安装,命令 repo 将全局可用 .
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 命令使用exists repo.json 初始化项目 .
repo init
如果您对unix命令感到满意,则不需要特殊的依赖关系或Web应用程序 . 您可以将repo下载为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文件或特定分支/ refs)
保留路径的初始部分( */ )以匹配任何目录 . Github使用名称中的commit ref创建一个包装器目录,因此无法知道 .
*/
您可能希望 --strip-components 与路径(上一个参数)中的斜杠数量( / )相同 .
--strip-components
/
这将下载整个tarball . 如果必须避免这种情况,或者您希望对GitHub服务器感到满意,请使用其他答案中提到的SVN方法 .
如果您需要以编程方式执行此操作并且不想依赖SVN,则可以使用GitHub API以递归方式下载所有内容 .
为了灵感,这是我的红宝石要点:https://gist.github.com/cvengros/b2a7e82f66519d423b6f
如果您有 svn ,则可以使用 svn export 执行此操作:
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
另一个具体例子:
就像我想从网址下载'iOS Pro Geo'文件夹一样
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
注意路径中的 trunk
Edited: (as per Tommie C's comment)
是的,使用 export 而不是 checkout 将提供一个干净的副本,而无需额外的git存储库文件 .
svn export https://github.com/alokc83/APRESS-Books-Source-Code-/trunk/%20Pro%20iOS%20Geo
Edited: 如果树/ master不在url中那么叉它,它将在Forked url中 .
这是SVN优于Git的少数几个地方之一 .
最后,我们倾向于三种选择:
使用wget从GitHub获取数据(使用原始文件视图) .
让上游项目将所需的数据子集发布为构建工件 .
放弃并使用完整的结账 . 它在以下构建中没有太多麻烦 .
如果你要下载的directoy是一个独立的库,最好创建一个其他的git repo,然后使用git子模块函数 .
当然,您必须是您想要的初始回购的所有者
Chrome扩展程序,Firefox插件
用法:
在任何GitHub存储库页面中 .
只需双击您需要的项目 .
点击右下方的下载按钮 .
查看进度仪表板并等待浏览器触发器下载 .
获取ZIP文件 .
获取令牌:
点击浏览器上的GitZip Extension图标 .
除"Get Token"外,单击"Normal"或"Private"链接 .
在Github auth页面上授权GitZip权限 .
返回开头的回购页面 .
继续使用 .
http://kinolien.github.io/gitzip使用GitHub API和JSZip,FileSaver.js库 .
步骤1:将github url输入到右上角的字段 .步骤2:按Enter键或直接单击下载下载zip或单击搜索查看子文件夹和文件列表 .步骤3:单击"Download Zip File"或"Get File"按钮获取文件 .
在大多数情况下,它工作正常,但该文件夹包含超过1,000个文件,因为Github Trees API限制 . (指Github API#Contents)
如果您有GitHub帐户并在此站点中使用“获取令牌”链接,它还可以支持私人/公共回购和升级速率限制 .
1.点击此链接http://kinolien.github.io/gitzip/2.要下载的Github文件夹的粘贴链接 .3.点击搜索,它将显示所有要下载的文件 .注意: - 使用搜索不需要输入令牌密钥;)..保持简单(y)
26 回答
使用此函数,第一个参数是文件夹的url,第二个参数是文件夹下载到的位置:
无论谁正在处理特定文件夹,他需要克隆该特定文件夹本身,所以请按照以下步骤** ---使用SPARSE CHECKOUT --- **
第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导出目录,请将目录的url中的“/ tree / master /”替换为“/ trunk /” .
例如,要从以下URL导出目录:
运行以下命令:
只是为了放大上面的答案,从真正的GitHub存储库到本地目录的一个真实例子是:
有时,一个具体的例子有助于澄清所提出的替代 .
我使用的是没有root访问权限的CentOS 7服务器,也没有git,svn等(也不想!)所以制作了一个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访问权限(像我一样),您可以使用以下内容在
$HOME
目录中创建一个.pydistutils.py
文件:[install] user=1
和easy_install lxml
将正常工作(ref:https://stackoverflow.com/a/33464597/591257) .在我的情况下,没有一个答案有帮助 . 如果您正在为Windows开发,则可能没有svn . 在许多情况下,不能指望用户安装Git,或者由于其他原因不想下载整个存储库 . 回答这个问题的一些人,比如Willem van Ketwich和aztack,制作了完成这项任务的工具 . 但是,如果该工具不是针对您正在使用的语言编写的,或者您不想安装第三方库,则这些工具不起作用 .
但是,有一种更简单的方法 . GitHub有一个API,允许您下载单个文件或整个目录的内容using GET requests . 您可以使用
https://api.github.com/repos/:owner/:repo_name/contents/:path
访问目录,该目录返回枚举目录中所有文件的JSON对象 . 枚举中包含指向文件原始内容的链接download_url
参数 . 然后可以使用该URL下载该文件 .这是一个两步过程,需要能够发出GET请求,但这可以在任何平台上以几乎任何语言实现 . 它可用于获取文件或目录 .
你不能;与Subversion不同,Git可以在整个存储库的基础上进行操作,其中每个子目录都可以单独检出 .
对于需要更细粒度访问的项目,可以使用子模块 - 每个子模块都是一个单独的Git项目,因此可以单独克隆 .
可以想象Git前端(例如GitHub的web界面或gitweb)可以选择为您提供一个接口来提取给定的文件夹,但据我所知,他们都没有这样做(尽管他们确实让你下载单个文件,所以如果文件夹中不包含太多文件,那么这是一个选项)
Edit - GitHub实际上提供了通过SVN的访问,这将允许你这样做(根据评论) . 有关如何执行此操作的最新说明,请参阅https://github.com/blog/1438-improved-svn-here-to-stay-old-svn-going-away
2016年9月更新:社区创建了一些可以为您执行此操作的工具:
GitZip(致Kino的信用 - upvote他的回答right here!)
DownGit(致信Minhas Kamal - upvote他的回答right here!)
Git不支持此功能,但Github通过SVN支持 . 如果你用subversion签出你的代码,Github将在后端基本上将repo从git转换为subversion,然后提供所请求的目录 .
这里's how you can use this feature to download a specific folder. I' ll使用流行的javascript库
lodash
作为示例 .Get the repo URL . 首先,将Github仓库的URL复制到剪贴板 .
Modify the URL for subversion . 我想从
master
分支下载/docs
的文件夹,所以我将追加trunk/docs
. 完整网址现在是https://github.com/lodash/lodash/trunk/docs
. 请参阅下面的注释,以更深入地解释我们必须使用此URL格式的原因 .Download the folder . 转到命令行并使用SVN获取文件夹 .
svn checkout https://github.com/lodash/lodash/trunk/docs
您可能没有立即看到任何活动,因为Github占用了转换更大的存储库到30秒,所以请耐心等待 .
就这样! Github supports more subversion features也包括对提交和推送更改的支持 .
其他答案没有错,但我只是想我会分享那些第一次在这个过程中徘徊的人的分步说明 .
如何从github存储库(Mac OS X)下载单个文件夹:
在Mac上,您可能已经拥有SVN(仅测试打开的终端并键入 "svn" 或 "which svn" ~不带引号)
在Github上:通过单击仓库中的特定文件夹名称,找到git文件夹(而不是仓库)的Github路径
从浏览器的地址栏复制路径
Open Terminal 并输入: svn export
下一次粘贴地址(例如): https://github.com/mingsai/Sample-Code/tree/master/HeadsUpUI
替换字: tree/master
,单词: trunk
键入文件的目标文件夹(在本例中,我将目标文件夹存储在当前用户的Downloads文件夹中)
这里的空格只是空格键而不是 (space) ~/Downloads/HeadsUpUI
final terminal命令显示下载文件夹的完整命令(将地址与步骤5进行比较) svn export https://github.com/mingsai/Sample-Code/trunk/HeadsUpUI ~/Downloads/HeadsUpUI
顺便说一句 - 如果你在Windows或其他平台上,你可以在http://subversion.apache.org找到subversion(svn)的二进制下载
Update
关于恢复中断下载/结账的评论 . 我会尝试运行
svn cleanup
,然后是svn update
. 请搜索SO以获取其他选项 .我使用linux,把它放在〜/ .bashrc中,称为甚至:D $ HOME / .bashrc
然后刷新shell
然后使用它与git-downloadfolder blablabla:D
有一个名为
githubdl
的Python3 pip包可以做到这一点*:项目页面是here
*免责声明:我写了这个包 .
如果你真的只想 "download" 文件夹而不是 "clone" 它(用于开发),最简单的方法就是获得最新版本的存储库(因此其中包含文件夹/文件)的副本,而无需克隆整个repo甚至首先安装git,是通过转到GitHub上所需的repository / fork / branch / commit来下载一个zip存档(对于任何repo,fork,branch,commit等)(例如
http(s)://github.com/<user>/<repo>/commit/<Sha1>
for在特定提交之后的文件副本)并选择右上角附近的Downloads
按钮 .这种存档格式不包含任何git-repo魔法,只包含跟踪文件本身(如果跟踪它们可能还有一些.gitignore文件,但你可以忽略它们:p) - 这意味着如果代码发生变化而你想要保持最佳状态,您必须手动重新下载它,这也意味着您将无法将其用作git存储库...
不确定在这种情况下你是否正在寻找(再次,“下载”/查看vs“克隆”/开发),但它仍然有用......
转到DownGit>输入您的URL>下载!
现在,您可以 DIRECTLY DOWNLOAD 或从DownGit为任何GitHub公共目录或文件(特别是大文件)创建 DOWNLOAD LINK !这是一个简单的示范 -
您还可以配置下载文件的属性detailed usage .
我创建了一个名为GitHubFolderDownloader的开源项目 . 它允许您下载存储库的单个文件夹,而无需克隆或下载整个存储库 .
您可以简单地下载目录树:
但是如果你想要检查它,并且能够做出提交并将它们推回去,那么你不能这样做 .
我们的团队编写了一个bash脚本来执行此操作,因为我们不想在我们的裸骨服务器上安装SVN .
https://github.com/ojbc/docker/blob/master/java8-karaf3/files/git-download.sh
它使用github API,可以从命令行运行,如下所示:
对于Generic git Repo:
如果要下载文件,而不是使用历史记录克隆存储库,则可以使用 git-archive 执行此操作 .
git-archive 生成git存储库的压缩zip或tar存档 . 一些让它变得特别的东西:
You can choose which files or directories in the git repository to archive.
它不归档
.git/
文件夹,也不归档运行的存储库中任何未跟踪的文件 .您可以归档特定分支,标记或提交 . 使用git管理的项目通常使用它来生成项目版本(beta,release,2.0等)的归档,供用户下载 .
从您使用ssh连接到的远程仓库创建
docs/usage
目录的存档的示例:this blog post和git documentation中的更多信息 .
关于GitHub Repos的注意事项:
GitHub doesn't allow git-archive access . ☹️
我写了一个工具Node.js就是为了这个 . 看看Download 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 init
命令使用existsrepo.json
初始化项目 .如果您对unix命令感到满意,则不需要特殊的依赖关系或Web应用程序 . 您可以将repo下载为tarball并仅解压缩所需内容 .
示例(fontawesome中子目录中的woff2文件):
关于链接格式的更多信息:https://developer.github.com/v3/repos/contents/#get-archive-link(包括如何获取zip文件或特定分支/ refs)
保留路径的初始部分(
*/
)以匹配任何目录 . Github使用名称中的commit ref创建一个包装器目录,因此无法知道 .您可能希望
--strip-components
与路径(上一个参数)中的斜杠数量(/
)相同 .这将下载整个tarball . 如果必须避免这种情况,或者您希望对GitHub服务器感到满意,请使用其他答案中提到的SVN方法 .
如果您需要以编程方式执行此操作并且不想依赖SVN,则可以使用GitHub API以递归方式下载所有内容 .
为了灵感,这是我的红宝石要点:https://gist.github.com/cvengros/b2a7e82f66519d423b6f
如果您有
svn
,则可以使用svn export
执行此操作:请注意URL格式:
https://github.com/
最后附上
/trunk
在运行
svn export
之前,最好先验证目录的内容:另一个具体例子:
就像我想从网址下载'iOS Pro Geo'文件夹一样
https://github.com/alokc83/APRESS-Books-Source-Code-/ tree/master /%20Pro%20iOS%20Geo
我可以通过这样做
注意路径中的 trunk
Edited: (as per Tommie C's comment)
是的,使用 export 而不是 checkout 将提供一个干净的副本,而无需额外的git存储库文件 .
Edited: 如果树/ master不在url中那么叉它,它将在Forked url中 .
这是SVN优于Git的少数几个地方之一 .
最后,我们倾向于三种选择:
使用wget从GitHub获取数据(使用原始文件视图) .
让上游项目将所需的数据子集发布为构建工件 .
放弃并使用完整的结账 . 它在以下构建中没有太多麻烦 .
如果你要下载的directoy是一个独立的库,最好创建一个其他的git repo,然后使用git子模块函数 .
当然,您必须是您想要的初始回购的所有者
此功能有两个选项:
选项1:浏览器扩展
用法:
在任何GitHub存储库页面中 .
只需双击您需要的项目 .
点击右下方的下载按钮 .
查看进度仪表板并等待浏览器触发器下载 .
获取ZIP文件 .
获取令牌:
点击浏览器上的GitZip Extension图标 .
除"Get Token"外,单击"Normal"或"Private"链接 .
在Github auth页面上授权GitZip权限 .
返回开头的回购页面 .
继续使用 .
选项2:Github gh-page
步骤1:将github url输入到右上角的字段 .
步骤2:按Enter键或直接单击下载下载zip或单击搜索查看子文件夹和文件列表 .
步骤3:单击"Download Zip File"或"Get File"按钮获取文件 .
在大多数情况下,它工作正常,但该文件夹包含超过1,000个文件,因为Github Trees API限制 . (指Github API#Contents)
如果您有GitHub帐户并在此站点中使用“获取令牌”链接,它还可以支持私人/公共回购和升级速率限制 .
1.点击此链接http://kinolien.github.io/gitzip/
2.要下载的Github文件夹的粘贴链接 .
3.点击搜索,它将显示所有要下载的文件 .
注意: - 使用搜索不需要输入令牌密钥;)..保持简单(y)