从GitHub repo DownGit下载单个文件夹或目录
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从GitHub repo DownGit下载单个文件夹或目录相关的知识,希望对你有一定的参考价值。
如何从GitHub上托管的远程Git仓库中仅下载特定文件夹或目录?
举个例子说GitHub repo住在这里:
git@github.com:foobar/Test.git
其目录结构:
Test/
foo/
a.py
b.py
bar/
c.py
d.py
我只想下载foo文件夹而不是克隆整个Test项目。
2016年9月更新:社区创建了一些可以为您执行此操作的工具:
- GitZip(对Kino的信用 - upvote他的回答right here!)
- DownGit(对Minhas Kamal的信用 - upvote他的回答right here!)
Git不支持这个,但Github通过SVN做。如果你用subversion核实你的代码,Github基本上会在后端将repo从git转换为subversion,然后提供请求的目录。
以下是使用此功能下载特定文件夹的方法。我将使用流行的javascript库lodash
作为示例。
- 获取repo URL。首先,将Github仓库的URL复制到剪贴板。
- 修改subversion的URL。我想从
/docs
分支下载master
的文件夹,所以我将追加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 supports more subversion features也包括对提交和推动变更的支持。
如果你真的只是想“下载”文件夹而不是“克隆”它(用于开发),那么最简单的方法就是获取最新版本的存储库(以及其中的文件夹/文件)的副本,无需克隆整个存储库甚至首先安装git,就是通过在GitHub上访问所需的存储库/ fork / branch / commit来下载zip存档(对于任何存储库,分支,分支,提交等) (例如,http(s)://github.com/<user>/<repo>/commit/<Sha1>
获取特定提交后的文件副本)并选择右上角附近的Downloads
按钮。
这种存档格式不包含任何git-repo魔法,只包含跟踪文件本身(如果跟踪它们可能还有一些.gitignore文件,但你可以忽略它们:p) - 这意味着如果代码发生了变化,你想要保持最佳状态,您必须手动重新下载它,这也意味着您将无法将其用作git存储库...
不确定在这种情况下你是否正在寻找(再次,“下载”/查看vs“克隆”/开发),但它仍然有用......
1.点击此链接http://kinolien.github.io/gitzip/ 2.要下载的Github文件夹的粘贴链接。 3.点击搜索,它将显示所有要下载的文件。 注意: - 使用搜索不需要输入令牌密钥;)..保持简单(y)
另一个具体例子:
就像我想从网址下载'ios Pro Geo'文件夹
https://github.com/alokc83/APRESS-Books-Source-Code-/tree /主/%20Pro%20iOS%20Geo
我可以通过这样做
svn checkout https://github.com/alokc83/APRESS-Books-Source-Code-/trunk/%20Pro%20iOS%20Geo
注意路径中的主干
编辑:(根据Tommie C的评论)
是的,使用导出而不是checkout将提供一个干净的副本,而无需额外的git存储库文件。
svn export https://github.com/alokc83/APRESS-Books-Source-Code-/trunk/%20Pro%20iOS%20Geo
编辑:如果树/主人不在网址,然后叉它,它将在分叉网址。
这是SVN比Git更好的少数几个地方之一。
最后,我们倾向于三种选择:
- 使用wget从GitHub获取数据(使用原始文件视图)。
- 让上游项目将所需的数据子集发布为构建工件。
- 放弃并使用完整的结账。它在第一次构建时受到很大影响,但除非你获得大量流量,否则在以下版本中不会太麻烦。
有一个名为githubdl
的Python3 pip包可以做到这一点*:
export GIT_TOKEN=1234567890123456789012345678901234567890123
pip install githubdl
githubdl -u http://github.com/foobar/test -d foo
项目页面是here
*免责声明:我写了这个包。
您可以简单地下载目录树:
git archive --remote git@github.com:foobar/Test.git HEAD:foo | tar xf -
但是如果你想要检查它,并且能够做出提交并将它们推回去,那么你不能这样做。
如果您对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
与路径(前一个参数)中的斜杠(/
)的数量相同。
这将下载整个tarball。如果必须避免这种情况,或者您希望对GitHub服务器感到满意,请使用其他答案中提到的SVN方法。
只是为了放大上面的答案,从真正的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
有时,一个具体的例子有助于澄清提出的替代。
我使用linux,把它放在〜/ .bashrc中,称为甚至:D $ HOME / .bashrc
git-dowloadfolder(){
a="$1"
svn checkout ${a/tree/master/trunk}
}
然后刷新shell
source ~/.bashrc
然后使用它与git-downloadfolder blablabla:D
我们的团队编写了一个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
此功能有两个选项:
Option 1: Browser Extensions
用法:
- 在任何GitHub repos页面中。
- 只需双击所需项目的空白部分即可。
- 单击右下角的下载按钮。
- 查看进度仪表板并等待浏览器触发器下载。
- 获取ZIP文件。
获取令牌:
- 单击浏览器上的GitZip Extension图标。
- 点击“Get Token”旁边的“Normal”或“Private”链接。
- 在Github auth页面上授权GitZip权限。
- 回到开头的回购页面。
- 继续使用。
Option 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#Contents)
它还可以支持私人/公共回购和升级速率限制,如果您有GitHub帐户并在此站点中使用“获取令牌”链接。
我使用CentOS 7服务器,我没有root访问权限,也没有git,svn等(也不想!)所以制作了一个python脚本来下载任何github文件夹:https://github.com/andr 以上是关于从GitHub repo DownGit下载单个文件夹或目录的主要内容,如果未能解决你的问题,请参考以下文章 如何下载GitHub一部分文件(一部分目录某个文件夹某个文件) 从 dist 下载 laravel/spark-aurelius 失败:“https://api.github.com/repos/laravel/spark-aurelius/zipball