从GitHub仓库下载单个文件夹或目录

g_i*_*rit 967 git directory file github repository

如何从GitHub上托管的远程Git仓库中仅下载特定文件夹或目录?

举个例子说GitHub repo住在这里:

git@github.com:foobar/Test.git
Run Code Online (Sandbox Code Playgroud)

其目录结构:

Test/
??? foo/ 
?   ??? a.py
?   ??? b.py   
??? bar/
    ??? c.py
    ??? d.py
Run Code Online (Sandbox Code Playgroud)

我只想下载foo文件夹而不是克隆整个Test项目.

nic*_*ick 914

2016年9月更新:社区创建了一些可以为您执行此操作的工具:


Git不支持这个,但Github通过SVN做.如果你用subversion结账你的代码,Github将在后端基本上将repo从git转换为subversion,然后提供所请求的目录.

以下是使用此功能下载特定文件夹的方法.我将使用流行的JavaScript库lodash作为示例.

  1. 获取repo URL.首先,将Github仓库的URL复制到剪贴板. github repo URL示例

  2. 修改subversion的URL.我想/testmaster分支机构下载文件夹,所以我会追加tree/master.现在是完整的URL trunk.请参阅下面的注释,以便更深入地解释我们必须使用此URL格式的原因.

  3. 下载文件夹.转到命令行并使用SVN获取文件夹. https://github.com/lodash/lodash/tree/master/test

您可能没有立即看到任何活动,因为Github需要30秒才能转换更大的存储库,所以请耐心等待.

完整的URL格式说明:

  • 如果您对https://github.com/lodash/lodash/trunk/test分支感兴趣,请master改用.所以完整的道路是trunk
  • 如果您对trunk/foldername分支感兴趣,请foo改用.完整路径看起来像branches/foo
  • Protip:branches/foo/foldername如果您愿意,可以在下载之前查看可用的标签和分支

就这样!Github也支持更多的subversion功能,包括支持提交和推送更改.

  • 太棒了,只需用`trunk`替换`tree/master`就可以得到特定的文件夹. (149认同)
  • 我修改它使用`svn export`,因为我不想要Subversion工作副本.然后我在Git中添加了生成的文件夹.(我不知何故丢失了我的目录树的一大块,所以我从我分叉的仓库中导出.) (7认同)
  • 谢谢@ user1146881和@SérgioMichels,你必须用`trunk`替换`tree/master`.应该在答案中添加此信息. (6认同)
  • GitHub 将于 **2024 年 1 月 8 日**终止对 SVN 的支持 https://github.blog/2023-01-20-sunsetting-subversion-support/ (5认同)
  • @ num3ric-对于迟到的回复感到抱歉,但你应该可以用"branches/yourbranch"替换"trunk" (4认同)
  • 截至 2020 年 10 月 28 日,如果您尝试使用“repo/branches/foo_branch/bar_folder”方法,您将收到状态 410,功能已消失。 (3认同)
  • 我正在使用 TortoiseSVN 的“导入”命令。我确信我以与答案中所示类似的格式提供了正确的 URL。我什至尝试使用视觉检查器并选择所需的文件夹(未输入 URL),结果是相同的。 (2认同)
  • @ElijahLynn感谢您的编辑,我应该包含该信息!虽然有两件事 - 我接受了你的编辑,但是回滚了我自己的一些(无论如何都意味着这样做,感觉太乱了).另外我把你的`branch`路径改为`branches`,我认为*是正确的; 如果没有,请继续将其更改回来. (2认同)
  • 截至 2020 年 6 月 18 日,效果仍然很好 - 使用 TortoiseSVN -> 导出功能(可右键单击任何文件资源管理器目录)在 Windows 10 上的给定分支中下载特定文件夹,使用此 URL:`https://github.com/TortoiseSVN。 com/$organization/$repo/branches/$branch/$directory` (2认同)
  • @Hugo 有一个更好的方法,不需要任何额外的工具。发布在这个答案/sf/answers/4951064611/ (2认同)

Kin*_*ino 497

此功能有两个选项:

选项1:浏览器扩展

Chrome扩展程序,Firefox插件

用法:

  1. 在任何GitHub repos页面中.
  2. 只需双击您需要的项目即可.
  3. 单击右下角的下载按钮.
  4. 查看进度仪表板并等待浏览器触发器下载.
  5. 获取ZIP文件.

获取令牌:

  1. 单击浏览器上的GitZip Extension图标.
  2. 点击"Get Token"旁边的"Normal"或"Private"链接.
  3. 在Github auth页面上授权GitZip权限.
  4. 回到开头的回购页面.
  5. 继续使用.

选项2:Github gh-page

http://kinolien.github.io/gitzip使用GitHub API和JSZip,FileSaver.js库.

步骤1:将github url输入到右上角的字段.
步骤2:按Enter键或直接单击下载下载zip或单击搜索查看子文件夹和文件列表.
步骤3:单击"下载Zip文件"或"获取文件"按钮以获取文件.

在大多数情况下,它工作正常,但该文件夹包含超过1,000个文件,因为Github Trees API限制.(指Github API#内容)

它还可以支持私人/公共回购和升级速率限制,如果您有GitHub帐户并在此站点中使用"获取令牌"链接.

  • 这太棒了,但看起来很棒,需求正在推动你超过你的速率限制因此它不再工作;-)能够使用GitHub oAuth登录会很棒 - 这将允许私人仓库支持,并且还会增加您的速率限制,因为它们是经过身份验证的请求 (5认同)
  • 这确实需要添加到实际的github网站,它非常有用. (3认同)
  • @hobailey现在,它可以获得访问令牌以提高速率限制,还可以访问私有存储库. (2认同)
  • 有人会对这样做的 chrome 扩展感兴趣吗? (2认同)

Min*_*mal 451

转到DownGit >输入您的URL>下载!

现在,您可以直接下载或为DownGit中的任何GitHub公共目录或文件(特别大的文件)创建DOWNLOAD LINK!这是一个简单的演示 -


DownGit


您还可以配置下载文件的属性详细用法.

  • 基本方法是 - 1.取目录链接(使用[angular-route](https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-route.min.js)),2 .转到[GitHub API](https://api.github.com),3.搜索目录并下载所有文件,4.用它创建一个zip文件(我用[jszip](https:// cdn.rawgit.com,/ Stuk/jszip/v3.0.0/dist/jszip.min.js))并将其保存为文件(使用[filesaver](https://fastcdn.org/FileSaver.js/1.1.20151003) /FileSaver.min.js)).为了清楚了解,我建议您查看[我的项目](https://github.com/MinhasKamal/DownGit). (10认同)
  • 这很酷但它不适用于自动化工具(如wget) (5认同)
  • DownGit 正是我所需要的:从存储库下载特定文件夹,而无需为此创建新的 git 目录(就像 subversion 方法所要求的那样)。非常感谢你做这个。 (4认同)
  • 感谢兄弟提供详细说明,如果您建议任何教程或链接,我非常感谢您。 (3认同)
  • 兄弟,我的意思是如何像你创建的DownGit一样创建项目. (2认同)

Sto*_*ica 156

如果有svn,您可以使用svn export这样做:

svn export https://github.com/foobar/Test.git/trunk/foo
Run Code Online (Sandbox Code Playgroud)

请注意URL格式:

  • 基本URL是 https://github.com/
  • /trunk 附在最后

在运行之前svn export,最好首先验证目录的内容:

svn ls https://github.com/foobar/Test.git/trunk/foo
Run Code Online (Sandbox Code Playgroud)

  • @john我确定现在为时已晚,无法提供太多帮助,但您是否在GitHub帐户上启用了双因素身份验证?如果是这样,我认为*我在某处读到了你必须使用预先生成的密码作为密码(你需要在GitHub设置中找到它). (2认同)

Avi*_*kur 86

在尝试了所有答案后,对我来说最好的解决方案是:

GitHub 的基于 Visual Studio Code 的编辑器。

优点:

  1. 不需要任何额外的工具,如SVN或 API 令牌。
  2. 内容大小没有限制
  3. 另存为目录或文件,而不是存档。

指示

  1. 转到任何存储库。(示例:https: //github.com/RespiraWorks/Ventilator/tree/master/software

  2. 在 URL 中按.或替换.com为,以在 GitHub 的内部编辑器中打开存储库.dev

  3. 资源管理器窗格(左侧或按Ctrl+ Shift+ E)中,右键单击所需的文件/文件夹,然后选择“下载”

  4. “选择文件夹”对话框中,选择磁盘上您希望所选文件/文件夹所在的目录。

笔记

我尝试了其他解决方案,例如接受的答案,但是,

  1. 我不想仅仅为了这个而安装和学习SVN。

  2. 其他工具,如Download DirectoryRefined GitHubGitZipDownGit要么需要 API 令牌,要么无法下载大型目录。

其他选项

  • @i30817 我找到了原因。检查代码后发现,此功能似乎使用了一个 API(https://developer.mozilla.org/en-US/docs/Web/API/Window/showDirectoryPicker),该 API 仅在 chrome/edge/chromium 86+ 和歌剧。如果您使用其他工具,则可能无法下载这些文件夹。 (12认同)
  • 这实际上不适用于目录(不再?)。微软似乎已将其削弱为仅“上传”到目录并仅下载文件。 (2认同)
  • 这么算下来,我用的是firefox。哦,好吧,我不再需要它,因为我的具体情况有另一个解决方案。 (2认同)
  • 2022 年 8 月有效 (2认同)

Rob*_*obW 70

对于Generic git Repo:

如果要下载文件,而不是使用历史记录克隆存储库,则可以执行此操作git-archive.

git-archive制作git存储库的压缩zip或tar存档.一些让它变得特别的东西:

  1. 您可以选择要归档的git存储库中的哪些文件或目录.
  2. 它不归档.git/文件夹,也不归档运行的存储库中的任何未跟踪文件.
  3. 您可以归档特定分支,标记或提交.使用git管理的项目通常使用它来生成项目版本(beta,release,2.0等)的归档,供用户下载.

docs/usage从您使用ssh连接到的远程仓库创建目录存档的示例:

# in terminal
$ git archive --format tar --remote ssh://server.org/path/to/git HEAD docs/usage > /tmp/usage_docs.tar
Run Code Online (Sandbox Code Playgroud)

有关此博客文章git文档的更多信息.

关于GitHub Repos的注意事项:

GitHub不允许git-archive访问.☹️

  • `git archive --format tar`格式不是tar.gz,而是tar。 (2认同)
  • 我认为这是最好的答案,但请注意git archive命令不适用于https协议。 (2认同)

Vah*_*idN 34

我创建了一个名为GitHubFolderDownloader的开源项目.它允许您下载存储库的单个文件夹,而无需克隆或下载整个存储库.


Tom*_* C. 33

其他答案没有错,但我只是想我会分享那些第一次在这个过程中徘徊的人的分步说明.

如何从github存储库(Mac OS X)下载单个文件夹:

〜要打开终端,只需单击聚光灯并键入终端然后按Enter键

  1. 在Mac上你可能已经有了SVN(只测试打开的终端并键入"svn""svn"〜没有引号)
  2. 在Github上:通过单击仓库中的特定文件夹名称找到Git文件夹(而不是仓库)的Github路径
  3. 从浏览器的地址栏复制路径
  4. 打开终端并输入:svn export
  5. 接下来粘贴地址(例如):https: //github.com/mingsai/Sample-Code/tree/master/HeadsUpUI
  6. 替换单词:tree/master
  7. 用词:trunk
  8. 键入文件的目标文件夹(在此示例中,我将目标文件夹存储在当前用户的Downloads文件夹中)
  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:更换出口结账)

更新

关于恢复中断下载/结账的评论.我会尝试运行svn cleanup然后svn update.请搜索SO以获取其他选项.


小智 24

无论谁正在处理特定文件夹,他需要克隆该特定文件夹本身,所以请按照以下步骤**---使用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)

  • 但这实际上并没有达到预期的效果.它仍然克隆整个存储库,它只是不检查一些文件夹. (9认同)

Muh*_*nus 22

1.单击此链接http://kinolien.github.io/gitzip/
2.要下载的Github文件夹的粘贴链接.
3.点击搜索,它将显示所有要下载的文件.
注意: - 使用搜索不需要输入令牌密钥;)..保持简单(y)

  • 它比上面的Minhas Kamal链接更完美 (2认同)

jab*_*tta 21

2019年总结

有多种方法可以处理此问题,具体取决于您是要手动还是以编程方式执行此操作。

下面总结了四个选项。对于那些更喜欢动手解释的人,我整理了一个 YouTube 视频:从 GitHub 下载单个文件和文件夹

另外,对于那些需要从 GitHub 下载单个文件(而不是文件夹)的人,我在 StackOverflow 上发布了类似的答案


1. GitHub 用户界面

  • 存储库主页上有一个下载按钮。当然,这会下载整个 repo,之后您需要解压缩下载,然后手动拖出您需要的特定文件夹。

2. 第三方工具

  • 有多种浏览器扩展和网络应用程序可以处理这个问题,DownGit就是其中之一。只需将 GitHub URL 粘贴到文件夹(例如https://github.com/babel/babel-eslint/tree/master/lib),然后按“下载”按钮。

3.颠覆

  • GitHub 不支持 git-archive(允许我们下载特定文件夹的 git 功能)。但是,GitHub 确实支持各种 Subversion 功能,我们可以为此目的使用其中之一。Subversion 是一个版本控制系统(git 的替代品)。您需要安装 Subversion。获取要下载的文件夹的 GitHub URL。不过,您需要修改此 URL。您需要指向存储库的链接,后跟单词“trunk”,并以嵌套文件夹的路径结尾。换句话说,使用我上面提到的相同文件夹链接示例,我们将用“trunk”替换“tree/master”。最后,打开一个终端,导航到你想要下载内容的目录,输入以下命令(用你构建的 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 的代码以获得灵感。


mic*_*slm 16

你不能; 与Subversion不同的是,每个子目录都可以单独检出,Git在整个存储库的基础上运行.

对于需要更细粒度访问的项目,您可以使用子模块 - 每个子模块都是一个单独的Git项目,因此可以单独克隆.

可以想象Git前端(例如GitHub的web界面,或gitweb)可以选择为您提供一个接口来提取给定的文件夹,但据我所知,他们都没有这样做(虽然他们确实让你下载单个文件,所以如果文件夹不包含太多文件,那么这是一个选项)

编辑 - GitHub实际上提供了通过SVN访问,这将允许你这样做(根据评论).有关如何执行此操作的最新说明,请参阅https://github.com/blog/1438-improved-svn-here-to-stay-old-svn-going-away

  • 您可以在Github上使用SVN http://stackoverflow.com/a/18194523/1176454 (3认同)

joh*_*nny 14

如果你真的只是想"下载"文件夹而不是"克隆"它(用于开发),那么最简单的方法就是获取最新版本的存储库(以及其中的文件夹/文件)的副本,无需克隆整个存储库甚至首先安装git,就是通过在GitHub上访问所需的存储库/ fork/branch/commit来下载zip存档(对于任何存储库,分支,分支,提交等) (例如,http(s)://github.com/<user>/<repo>/commit/<Sha1>对于特定提交后的文件副本)并选择Downloads右上角附近的按钮.

这种存档格式不包含任何git-repo魔法,只包含跟踪文件本身(如果跟踪它们可能还有一些.gitignore文件,但你可以忽略它们:p) - 这意味着如果代码发生了变化,你想要保持最佳状态,您必须手动重新下载它,这也意味着您将无法将其用作git存储库...

不确定在这种情况下你是否正在寻找(再次,"下载"/查看vs"克隆"/开发),但它仍然有用......

  • 如果您没有看到下载链接,请确保您位于主要仓库页面(而不是子目录).似乎您只能下载整个仓库的拉链.此外,[此github帮助页面](https://help.github.com/articles/downloading-files-from-the-command-line)可能很有用. (9认同)
  • 轻松点击访问.容易获得事先发布.轻松从下载的zip中拉出所需的文件夹.谢谢. (2认同)
  • 从 `tar.gz` 中下载的通用 URL:`https://github.com/${owner}/${repo}/archive/${hash}.tar.gz` (2认同)

Gee*_*eek 12

只需添加ss到 GitHub URL 的开头:( github.com -> ssgithub.com )

我构建了这个简单的网页来为您执行此操作,因此只需:

  1. 导航到 GitHub 上要下载的目录/文件
  2. 添加ss到地址栏中 URL 的开头

单击“下载”应仅压缩该目录的内容并将其下载到您的设备。

[演示视频]


zee*_*wan 9

另一个具体例子:

就像我想从网址下载'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
Run Code Online (Sandbox Code Playgroud)

注意路径中的主干

编辑:(根据Tommie C的评论)

是的,使用导出 而不是checkout将提供一个干净的副本,而无需额外的git存储库文件.

svn export https://github.com/alokc83/APRESS-Books-Source-Code-/trunk/%20Pro%20iOS%20Geo
Run Code Online (Sandbox Code Playgroud)

编辑:如果树/主人不在网址,然后叉它,它将在分叉网址.

  • 如果您只想下载文件夹的副本而不是结帐,只需要将结帐更改为导出. (2认同)

Cir*_*四事件 8

git clone --filter 从 git 2.19 现在可以在 GitHub 上使用

2020-09-18 测试,git 2.25.1。

此选项是与远程协议的更新一起添加的,它真正阻止了从服务器下载对象。

例如,仅克隆d1此存储库所需的对象:https : //github.com/cirosantilli/test-git-partial-clone我可以这样做:

git clone \
  --depth 1 \
  --filter=blob:none \
  --no-checkout \
  https://github.com/cirosantilli/test-git-partial-clone \
;
cd test-git-partial-clone
git checkout master -- d1
Run Code Online (Sandbox Code Playgroud)

我在以下位置更详细地介绍了这一点:Git:如何仅克隆 Git 存储库的子目录?


小智 8

您可以通过以下方式使用 git-svn。

第一,更换tree/mastertrunk 的话,安装git-svnsudo apt install git-svn

git svn clone https://github.com/lodash/lodash/trunk/test
Run Code Online (Sandbox Code Playgroud)

这样你就不必经历设置 svn 的痛苦,特别是对于 Windows 用户。

  • 通过 WSL 运行时需要 `sudo apt install git-svn`。 (4认同)

Cal*_*vin 7

没有一个答案对我的情况有帮助。如果您正在为 Windows 开发,您可能没有 svn。在许多情况下,您不能指望用户安装 Git,或者由于其他原因不想下载整个存储库。回答这个问题的一些人,例如 Willem van Ketwich 和 aztack,制作了工具来完成这项任务。但是,如果该工具不是为您使用的语言编写的,或者您不想安装第三方库,则这些都不起作用。

但是,还有一种更简单的方法。GitHub 有一个 API,允许您使用 GET 请求下载单个文件或整个目录的内容。您可以使用https://api.github.com/repos/:owner/:repo_name/contents/:path它访问一个目录,该目录返回一个枚举目录中所有文件的 JSON 对象。枚举中包含指向文件原始内容的链接,即download_url参数。然后可以使用该 URL 下载该文件。

这是一个需要能够发出 GET 请求的两步过程,但这几乎可以在任何平台上以任何语言实现。它可用于获取文件或目录。


小智 7

您可以将ghget与从地址栏复制的任何 URL 结合使用:

ghget https://github.com/fivethirtyeight/data/tree/master/airline-safety
Run Code Online (Sandbox Code Playgroud)

它是一个独立的可移植 shell 脚本,不使用 SVN(这对我来说在大型仓库中不起作用)。它也不使用 API,因此不需要令牌并且不受速率限制。

免责声明:我做到了。


Man*_*ava 6

这是SVN比Git更好的少数几个地方之一.

最后,我们倾向于三种选择:

  1. 使用wget从GitHub获取数据(使用原始文件视图).
  2. 让上游项目将所需的数据子集发布为构建工件.
  3. 放弃并使用完整的结账.它在第一次构建时受到很大影响,但除非你获得大量流量,否则在以下版本中不会太麻烦.

  • 好吧,它更少Git vs Subversion以及GitHub不允许使用git-archive.(我很想知道为什么.) (4认同)

Wil*_*ich 6

有一个名为Python3的pip包githubdl可以执行此操作*:

export GIT_TOKEN=1234567890123456789012345678901234567890123
pip install githubdl
githubdl -u http://github.com/foobar/test -d foo
Run Code Online (Sandbox Code Playgroud)

项目页面在这里

*免责声明:我写了这个程序包。


for*_*d04 6

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
Run Code Online (Sandbox Code Playgroud)

最为显着地

  • --sparse仅将git存储库的顶级目录文件检出到工作副本中
  • git sparse-checkout add t增量添加/检出的t子文件夹git

其他元素

  • git sparse-checkout init 做一些准备以启用部分结帐
  • --filter=blob:none通过仅下载必要的 git 对象来优化数据获取(查看部分克隆功能以获取更多信息)
  • --cone 还通过应用更受限制的文件包含模式来提高性能

GitHub 状态

GitHub 仍在内部评估此功能,同时它已在选定的几个存储库中启用 [...]。随着该功能的稳定和成熟,我们会及时向您通报其进展情况。(文档

  • 已投赞成票。我在 /sf/answers/4166079851/ 中介绍了该命令,并设置了克隆模式。 (2认同)

Mei*_*bay 6

这就是我用git v2.25.0做的,也用 v2.26.2 测试过。此技巧不适用于 v2.30.1

TLDR

git clone --no-checkout --filter=tree:0 https://github.com/opencv/opencv
cd opencv

# requires git 2.25.x to 2.26.2
git sparse-checkout set data/haarcascades
Run Code Online (Sandbox Code Playgroud)

您可以使用Docker来避免安装特定版本的 git

git clone --no-checkout --filter=tree:0 https://github.com/opencv/opencv
cd opencv

# requires git 2.25.x to 2.26.2
docker run --rm -it -v $PWD/:/code/ --workdir=/code/ alpine/git:v2.26.2 sparse-checkout set data/haarcascades
Run Code Online (Sandbox Code Playgroud)

完整解决方案

# bare minimum clone of opencv
$ git clone --no-checkout --filter=tree:0 https://github.com/opencv/opencv
...
Resolving deltas: 100% (529/529), done.

# Downloaded only ~7.3MB , takes ~3 seconds
# du = disk usage, -s = summary, -h = human-readable
$ du -sh opencv
7.3M    opencv/

# Set target dir
$ cd opencv
$ git sparse-checkout set data/haarcascades
...
Updating files: 100% (17/17), done.
# Takes ~10 seconds, depending on your specs

# View downloaded files
$ du -sh data/haarcascades/
9.4M    data/haarcascades/
$ ls data/haarcascades/
haarcascade_eye.xml                      haarcascade_frontalface_alt2.xml      haarcascade_licence_plate_rus_16stages.xml  haarcascade_smile.xml
haarcascade_eye_tree_eyeglasses.xml      haarcascade_frontalface_alt_tree.xml  haarcascade_lowerbody.xml                   haarcascade_upperbody.xml
haarcascade_frontalcatface.xml           haarcascade_frontalface_default.xml   haarcascade_profileface.xml
haarcascade_frontalcatface_extended.xml  haarcascade_fullbody.xml              haarcascade_righteye_2splits.xml
haarcascade_frontalface_alt.xml          haarcascade_lefteye_2splits.xml       haarcascade_russian_plate_number.xml
Run Code Online (Sandbox Code Playgroud)

参考

  • 为什么它不适用于“v2.30.1”? (2认同)

ara*_*nid 5

您可以简单下载目录树:

git archive --remote git@github.com:foobar/Test.git HEAD:foo | tar xf -
Run Code Online (Sandbox Code Playgroud)

但是,如果您打算将其签出,并且能够进行提交并将其推回原位,那么您就不能这样做。


Joh*_*urn 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
Run Code Online (Sandbox Code Playgroud)

有时,一个具体的例子有助于阐明所提出的替代方案。


use*_*530 5

我使用 linux 所以,把它放在 ~/.bashrc 中,甚至称为 :D $HOME/.bashrc

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

}
Run Code Online (Sandbox Code Playgroud)

然后刷新外壳

source ~/.bashrc 
Run Code Online (Sandbox Code Playgroud)

然后将它与 git-downloadfolder blablabla 一起使用:D


Alb*_*bin 5

如果您对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
Run Code Online (Sandbox Code Playgroud)
  • 有关链接格式的更多信息:https : //developer.github.com/v3/repos/contents/#get-archive-link (包括如何获取zip文件或特定的分支/引用)
  • 保留路径(*/)的开头部分以匹配任何目录。Github使用名称中的commit ref创建了一个包装器目录,因此无法知道。
  • 您可能希望与路径(上一个参数)中--strip-components的斜杠(/)数量相同。

这将下载整个tarball。如果必须避免这种情况,或者如果您想对GitHub服务器友好,请使用其他答案中提到的SVN方法。


Pin*_*one 5

无论出于何种原因,该svn解决方案对我不起作用,而且由于我不需要svn其他任何东西,因此花时间尝试制作它是没有意义的,因此我使用我已有的工具寻找了一个简单的解决方案。此脚本仅使用curlawk下载 GitHub 目录中描述为 的所有文件"/:user:repo/contents/:path"

GitHub REST API"GET /repos/:user:repo/contents/:path"命令调用的返回正文 返回一个对象,其中包含"download_url"目录中每个文件的链接。

此命令行脚本使用 REST API 调用该 REST API,curl并通过 AWK 发送结果,AWK 会过滤掉除“download_url”之外的所有行,删除链接中的引号和逗号,然后使用另一个 curl 调用下载链接。

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


Sor*_*ell 5

只需 5 步

  • 这里下载SVN
  • 打开CMD并进入SVN bin 目录,如: cd %ProgramFiles%\SlikSvn\bin
  • 假设我想下载这个目录 URL
    https://github.com/ZeBobo5/Vlc.DotNet/tree/develop/src/Samples
  • 替换 tree/developtree/master使用trunk
  • 现在触发最后一个命令以下载同一目录中的文件夹。
svn export https://github.com/ZeBobo5/Vlc.DotNet/trunk/src/Samples
Run Code Online (Sandbox Code Playgroud)