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


1104

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

假设示例GitHub存储库位于此处:

git@github.com:foobar/Test.git

其目录结构:

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

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


4
我为此使用svn checkout为此编写了一个shell脚本-github.com/Decad/github-downloader
Declan Cook

390
有人可以向我解释为什么没有针对此的“官方” Web界面解决方案吗?它看起来像是一个微不足道的功能,但是非常有用。
亚历山大-恢复莫妮卡

3
我使用KinoLien的gitzip开发了chrome扩展程序。github.com/charany1/GHSDD
charany1 '16

3
看到@janos答案svn替代方法是最好的,没有auth,没有注册,没有限制,没有插件
stackdave 17-10-11

5
我为此做了一个轻量级的解决方案(download-directory.github.io),它已集成到精致的GitHub中
fregante

Answers:


1033

2016年9月更新:社区创建了一些工具可以为您做到这一点:


Git不支持此功能,但是Github通过SVN支持。如果您使用subversion签出代码,Github实际上将在后端将仓库从git转换为subversion,然后提供所请求的目录。

使用此功能下载特定文件夹的方法如下。我将以流行的javascript库lodash为例。

  1. 导航到要下载的文件夹。让我们/test从下载master分支。 github repo URL example

  2. 修改要颠覆的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
  • 提示:您可以根据svn ls需要在下载之前查看可用的标签和分支

就这样!Github还支持更多的Subversion功能,包括对提交和推送更改的支持。


162
太棒了,只需替换tree/mastertrunk,您就可以获取特定的文件夹。
塞尔吉奥米歇尔斯

6
感谢@ user1146881和@SérgioMichels,您必须替换tree/mastertrunk。此信息应在答案中添加。
baptx

8
我将其修改为使用svn export,因为我不想使用Subversion工作副本。然后,将生成的文件夹添加到Git中。(我不知何故丢失了我的目录树的很大一部分,所以我从分叉的存储库中导出了。)
Grault

5
@ num3ric-非常抱歉,您的回复很晚,但是您应该可以将“ trunk”替换为“ branchches / yourbranch”
尼克

2
@ElijahLynn感谢您的编辑,我应该已经包含了该信息!不过有两件事-我接受了您的编辑,但是回滚了我自己的一些内容(无论如何意味着这样做,感觉太乱了)。另外,我将您的branch路径更改为branches,我认为是正确的;如果不是,请继续将其更改。
尼克

566

此功能有两个选项:

选项1:GitZip浏览器扩展

Chrome扩展程序Firefox插件

用法:

  1. 在任何GitHub存储库页面中。
  2. 只需双击所需项目的空白部分。
  3. 点击右下角的下载按钮。
  4. 查看进度仪表板,然后等待浏览器触发器下载。
  5. 获取ZIP文件。

获取令牌:

  1. 单击浏览器上的GitZip Extension图标。
  2. 点击“获取令牌”旁边的“普通”或“私人”链接。
  3. 在Github身份验证页面上授权GitZip权限。
  4. 回到开始的回购页面。
  5. 继续使用。

选项2:Github gh页

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

步骤1:在右上角的字段中输入github网址。
步骤2:按Enter键或单击“下载”以直接下载zip或单击“搜索”以查看子文件夹和文件的列表。
步骤3:点击“下载Zip文件”或“获取文件”按钮以获取文件。

在大多数情况下,它都可以正常工作,但由于Github Trees API的限制,该文件夹包含1,000个以上的文件。(参考Github API#Contents

如果您拥有GitHub帐户并在此站点中使用“获取令牌”链接,它还可以支持私有/公共存储库并升级速率限制。


5
太棒了,但是看起来太棒了,需求使您超出了速率限制,因此它不再起作用;-)能够使用GitHub oAuth登录非常棒-这将允许私有回购支持,并且可以创建您的速率限制,因为它们将通过身份验证的请求
hobailey '16

3
@hobailey现在,它可以获取访问令牌以增加速率限制,还可以访问私有存储库。
奇诺

1
@MYounas请参阅Github API文档中有关OAuth,树,斑点的章节,也将JSZip,FileSaver.js js库用于gitzip实现。
基诺

1
有人会对这样做的chrome扩展感兴趣吗?
goldylucks

4
这确实需要添加到实际的github网站上,它非常有用。
轧辊

508

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

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


DownGit


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


2
兄弟,我的意思是如何创建像DownGit这样的项目。
穆罕默德·尤努斯

12
基本方法是-1 .取得目录链接(使用angular-route),2.转到GitHub API,3.搜索目录并下载所有文件,4.用它创建一个zip文件(我使用过jszip)并将其另存为文件(为此使用了filesaver)。为了清楚理解,我建议看一下我的项目
Minhas Kamal

1
thanx Bro提供了详细的说明,如果您建议任何教程或链接,我非常感谢。
穆罕默德·尤努斯

5
这很酷,但不适用于自动化工具(例如wget)

1
downloaded 25 of 25 files当我尝试从此URL下载时,此消息挂起: github.com/dssg/hitchhikers-guide/tree/master/curriculum/…–
Wassadamo

164

如果有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

这仍然有效吗?在TortiseSVN上进行了尝试,但出现权限错误,要求我提供凭据。
约翰

2
@john我确定这为时已晚,不会有太大帮助,但是您是否在GitHub帐户上启用了2因子身份验证?如果是这样,我我读过某个地方,您必须使用一个预先生成的密钥作为密码(您需要在GitHub设置中找到该密码)。
尼克,

1
关于URL格式,您可以保留.git扩展名。您可以使用完整的项目链接,并先使用,svn ls后跟项目完整路径。范例:svn ls https://github.com/RobTillaart/Arduino.git。要仅导出一个文件夹,只需添加/trunk后跟所需的路径,例如svn export https://github.com/RobTillaart/Arduino.git/trunk/libraries/DHTlib。保持项目路径完整无缺。
jgrocha '16

@jgrocha我不确定它在2013年是否能正常工作,但现在可以了,所以谢谢,更新了帖子
janos 2016年

1
例如:要下载内容https://github.com/miguelgrinberg/python-socketio/tree/master/examples/wsgi,请运行svn export https://github.com/miguelgrinberg/python-socketio.git/trunk/examples/wsgiwsgi将在当前工作目录下创建一个名为的目录。只有源文件,没有别的。否.git,没有与Subversion相关的文件。
Rockallite

74

对于通用git Repo:

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

git-archive制作git存储库的压缩zip或tar存档。一些使它特别的东西:

  1. 您可以选择git存储库中要归档的文件或目录。
  2. 它不会存档.git/文件夹或运行它的存储库中的任何未跟踪文件。
  3. 您可以存档特定的分支,标记或提交。用git管理的项目经常使用它来生成项目版本的存档(测试版,发行版,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

更多信息,请参见本博客文章git文档

关于GitHub Repos的注意事项:

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


2
git archive --format tar格式不是tar.gz,而是tar。
出羽和之

这应该是最好的答案
Felipe Costa

2
我认为这是最好的答案,但请注意git archive命令不适用于https协议。
bitfox

@yukihane编辑了从tar.gz到tar的扩展名,希望OP可以使用它
mihai

36

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


如果只需要从GitHub下载文件夹,则效果很好。它只需要一个Github令牌即可下载所需的文件夹。更多的投票可以使这个答案更加突出。
Alex Essilfie 2015年

34

其他答案没什么问题,但我只是想与那些第一次在此过程中徘徊的人分享逐步说明。

如何从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. 词:树干
  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:将输出替换为checkout

更新资料

关于恢复中断的下载/签出的评论。我会先尝试跑步,svn cleanup然后再尝试svn update。请在SO中搜索其他选项。


1
我必须从特定文件夹下载许多文件,并且在下载过程中出现此错误:svn:E175002:'/ bgmartins / scripts-parlamento /!svn / vcc / default'的报告:200 OK(github.com)您如何恢复下载?
Miguel

为我工作。棒极了。
Heath Raftery

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


遗憾的是,此评论未获得足够的支持。看起来提供的解决方案适用于所有git存储库,而不仅是github存储库。
Kalyan

9
但是,这实际上并没有实现所需的功能。它仍然会克隆整个存储库,只是不检出某些文件夹。
克里斯(Chris


我收到此错误:稀疏签出在工作目录上没有任何条目。
orangecaterpillar

20

你不能; 与Subversion不同,在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

如果您确实只想“下载”该文件夹而不是“克隆该文件夹(以进行开发),那么最简单的方法就是简单地获取该存储库的最新版本(以及其中的一个文件夹/文件)的副本,无需克隆整个repo甚至无需首先安装git,只需通过转到GitHub上所需的存储库/ fork / branch / commit,即可下载zip归档文件(适用于任何repo,fork,branch,commit等)。 (例如,http(s)://github.com/<user>/<repo>/commit/<Sha1>获取特定提交后的文件副本),然后选择Downloads右上角附近的按钮。

这种存档格式不包含任何git-repo魔术,仅包含被跟踪的文件本身(如果被跟踪,则可能包含几个.gitignore文件,但是您可以忽略那些:p)-这意味着如果代码更改并且您想要保持最重要的位置,您将必须手动重新下载它,这也意味着您将无法将其用作git存储库...

不确定在这种情况下这是否就是您要寻找的内容(再次是“下载” /视图与“克隆” /开发),但是它仍然很有用...


9
如果没有看到下载链接,请确保您位于主存储库页面(而不是子目录)上。似乎您只能下载整个存储库的zip。另外,此github帮助页面可能会很有用。
JD史密斯

2
轻松的点击访问。容易获得先前的版本。轻松从下载的zip文件中拉出所需的文件夹。谢谢。
安迪·托马斯

1
可从tar.gz以下位置下载的通用URL :https://github.com/${owner}/${repo}/archive/${hash}.tar.gz
Krisztian

11

2019年总结

有多种处理方法,具体取决于您要手动还是以编程方式进行。

下面总结了四个选项。对于那些希望获得更实际操作说明的人,我整理了一个YouTube视频:从GitHub下载单个文件和文件夹

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


1. GitHub用户界面

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

2.第三方工具

  • 有多种浏览器扩展程序和Web应用程序可以处理此问题,其中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”,并以嵌套文件夹的路径结尾。换句话说,使用我上面提到的相同的文件夹链接示例,我们将“ 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”文件夹

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的评论)

是的,使用export 而不是checkout可以得到干净的副本,而无需额外的git存储库文件。

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

编辑:如果树/母版不在URL中,则将其分叉,它将在分叉URL中。


2
如果您只想下载文件夹的副本而不是签出,则只需将签出更改为导出即可。
Tommie C.

谢谢您的回答,我们可以开设分支机构吗?假设我要下载feature1分支的aaa文件夹
hsafarya,2016年

7

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

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

项目页面在这里

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


6

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

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

  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环境变量。致命的:远端意外挂起tar:看起来不像tar存档tar:由于先前的错误而以失败状态退出
g_inherit 2011年

@g_inherit我可以重现此问题。尽管这可能是正确的方向,但此答案无效。
UliKöhler2014年

尽管有很多反对票,但这是唯一对我有用的建议。
bhaskarc 2014年

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或由于其他原因而不想下载整个存储库。回答了这个问题的一些人,例如Willem van Ketwich和Aztack,为完成这项任务提供了工具。但是,如果该工具不是针对您使用的语言编写的,或者您不想安装第三方库,则这些工具将无效。

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

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



4

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

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

}

然后用刷新外壳

source ~/.bashrc 

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


3

我使用的CentOS 7服务器没有root访问权限,也没有git,svn等(也不想!),因此制作了一个python脚本来下载任何github文件夹:https : //github.com/andrrrl/github -文件夹下载器

用法很简单,只需从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目录中创建一个包含以下内容的文件: [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)假设我婉下载此目录网址 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下载私人仓库。
Muhammad Ali

2

要从GitHub导出目录,请将目录网址中的“ / 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-svn通过WSL运行时需要。
Jammy Dodger


1

使用此功能,第一个参数是文件夹的URL,第二个参数是将文件夹下载到的位置:

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

v2.19.0中对Git远程协议进行了扩展以支持此功能,但当时不支持服务器。但是它已经可以在本地测试。

我已经在以下文章中进行了详细介绍:如何仅克隆Git存储库的子目录?


1
有趣并且被赞成。我想我必须在其他地方提到过此2.19功能。
VonC

@VonC我想我一次击败了它:stackoverflow.com/questions/2466735/…而且我只在发布XD之后看过它!我今天当然是在Google搜索2.22发布后稍作搜索了,当然所有答案都已经更新了;-)它永远不会使我感到困惑,总是还有另一半重复出现,一年后我终于找到了稍有不同的查询。我不打算在git上打败你,太用力了,但是请注意死灵法师的数量!哈哈
Ciro Santilli冠状病毒审查六四事件法轮功

好吧,继续保持良好的工作状态:整个社区都将从这场小小的竞争中受益(我当时也赞成您的其他回答)
VonC

@VonC开玩笑,当然,我也很喜欢您的东西。我现在只需要找到一种方法即可将这些积分兑换成货币XD
Ciro Santilli冠状病毒审查六四事件法轮功

1

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

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

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

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

最为显着地

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

其他要素

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

GitHub状态

GitHub在某些选择的存储库上启用了该功能后,仍在内部对其进行评估。[...] 随着功能的稳定和成熟,我们将不断向您更新其进度。(docs


已投票。我在stackoverflow.com/a/59515426/6309中介绍了该命令,并设置了克隆模式。
VonC
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.