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

我如何只从GitHub上托pipe的远程Git仓库下载特定的文件夹或目录?

说GitHub回购在这里的例子:

git@github.com:foobar/Test.git 

其目录结构:

 Test/ foo/ a.py b.py bar/ c.py d.py 

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

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

  • GitZip (积分到Kino – upvote他的答案就在这里!

  • DownGit (对Minhas Kamal的信贷 – upvote他的答案就在这里!


Git不支持这个,但Github通过SVN。 如果你使用subversion检出你的代码,Github基本上会把git的repo转换成后台的subversion,然后提供请求的目录。

以下是如何使用此function下载特定的文件夹。 我将使用stream行的JavaScript库lodash作为例子。

  1. 获取回购url 。 首先,将Github仓库的URL复制到剪贴板。 github回购网址的例子

  2. 修改Subversion的URL 。 我想从master分支下载/docs的文件夹,所以我会追加trunk/docs 。 完整的URL现在是https://github.com/lodash/lodash/trunk/docs 。 请参阅下面的注释,了解我们为什么必须使用此URL格式的更深入的解释。

  3. 下载文件夹 。 转到命令行并用SVN抓取文件夹。 svn checkout https://github.com/lodash/lodash/trunk/docs

你可能不会立即看到任何活动,因为Github需要花费30秒来转换更大的存储库,所以要耐心等待。

完整的url格式说明:

  • 如果您对master分支感兴趣,请改用trunk 。 所以完整path是trunk/foldername
  • 如果您对foo分支感兴趣,请改用branches/foo 。 完整path看起来像branches/foo/foldername
  • Protip:如果你愿意,你可以在下载之前使用svn ls来查看可用的标签和分支

就这样! Github也支持更多的颠覆function ,包括支持提交和推送更改。

这个function的两个选项:

选项1:Chrome扩展程序

扩展名:github的GitZip

用法:

  1. 在任何GitHub公共回购页面。
  2. 只需双击你需要的项目。
  3. 点击右下angular的下载button。
  4. 查看进度仪表板并等待浏览器触发器下载。
  5. 获取ZIP文件。

获取令牌:

  1. 点击浏览器上的GitZip Extension图标。
  2. 点击“获取令牌”链接。
  3. 在Github授权页面授权GitZip权限。
  4. 回到开始的回购页面。
  5. 继续使用。

选项2:Github gh-page

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

第1步:inputgithub url到右上angular的字段。
第二步:直接按回车或点击下载下载zip,或点击search查看子文件夹和文件列表。
第三步:点击“下载压缩文件”或“获取文件”button获取文件。

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

如果您有GitHub帐户并使用本站的“获取令牌”链接,它也可以支持私人/公共回购和升级速率限制。


提示:令牌同步

如果你是一个gitip的页面用户,并且在网站上也有令牌; 现在,您可以安装github Chrome Extension的GitZip,并在安装后再次访问gh-page网站,它会自动同步令牌。

现在您可以直接下载或创build任何GitHub公共目录或DownGit文件下载链接!

我希望做类似的 – 我不仅要下载整个目录 ,还要创build一个直接的下载链接 但是,我发现什么都不能满足我的需要。 所以,我必须自己做 – DownGit


DownGit ,input你的url,然后下载。 这是一个简单的演示 –

DownGit


您也可以configuration下载文件的属性详细用法 。

如果你有svn ,你可以使用svn export来做到这一点:

 svn export https://github.com/foobar/Test.git/trunk/foo 

注意URL格式:

  • 基本的URL是https://github.com/
  • /trunk结尾附加

在运行svn export之前,先用以下方法validation目录的内容:

 svn ls https://github.com/foobar/Test.git/trunk/foo 

对于一个通用的git回购:

如果你想下载文件,不要用历史logging克隆版本库,你可以用git-archive来做到这一点。

git-archive使git仓库的压缩zip或tar归档。 有些事情使它变得特别:

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

从ssh连接到远程仓库创builddocs/usage目录的档案的例子:

 # in terminal $ git archive --format tar --remote ssh://server.org/path/to/git HEAD docs/usage > /tmp/usage_docs.tgz 

更多信息在这个博客文章和git文档 。

关于GitHub Repos的说明:

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

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

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

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

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

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

其他的答案没有错,但我只是想我会分享第一次在这个过程中stream浪的人的分步说明。

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

〜打开terminal只需点击聚光灯,inputterminal,然后按回车

  1. 在Mac上,你可能已经有了SVN(testing只是打开terminal,input“svn”“which svn” 〜没有引号)
  2. 在Github上:通过点击回购库中的特定文件夹名称,findGitHub文件夹path(而不是回购站点)
  3. 从浏览器的地址栏中复制path
  4. 打开terminal并input: svn export
  5. 接下来粘贴地址(例如): https//github.com/mingsai/Sample-Code/tree/master/HeadsUpUI
  6. replace词语: 树/主
  7. 用词: 树干
  8. 键入文件的目标文件夹(在本例中,我将目标文件夹存储在当前用户的Downloads文件夹内)
  9. 这里的空格只是空格而不是单词(空格)〜/ Downloads / HeadsUpUI
  10. 最终的terminal命令显示下载文件夹的完整命令(比较地址到步骤5) svn export https://github.com/mingsai/Sample-Code/trunk/HeadsUpUI〜/ Downloads / HeadsUpUI

顺便说一句 – 如果你在Windows或其他平台上,你可以在http://subversion.apache.orgfindsubversion(svn)的二进制下载;

〜如果你想结账的文件夹,而不是简单地下载它尝试使用svn的帮助(tldr:replace出口结帐

1.点击这个链接http://kinolien.github.io/gitzip/
2.你要下载的Github文件夹的粘贴链接。
3.点击search它会显示所有文件下载。
注意: – 使用search没有必要input令牌密钥;)..保持简单(y)

如果你真的只是想“下载”文件夹,而不是“克隆” (用于开发),最简单的方法是简单地获取最新版本的存储库(以及其中的文件夹/文件)的副本 ,而不需要克隆整个回购,甚至首先安装git,就是通过在GitHub上转到所需的存储库/ fork / branch / commit来下载zip存档(用于任何回购,分支,分支,提交等) (例如http(s)://github.com/<user>/<repo>/commit/<Sha1>获取特定提交后的文件副本),然后select右上angular附近的Downloadsbutton。

这个档案格式不包含任何git-repo的魔法,只是跟踪的文件本身(如果被跟踪的话可能还有一些.gitignore文件,但是你可以忽略这些:p) – 这意味着如果代码改变了,你想要留在上面,你将不得不手动重新下载它,这也意味着你将无法使用它作为一个混帐存储库…

不知道这是什么,你在这种情况下寻找(再次,“下载”/查看与“克隆”/开发),但它可以是有用的,但…

无论谁正在处理特定的文件夹,他需要克隆特定的文件夹本身,所以请按照以下步骤** —使用SPARSE CHECKOUT — **

第1步:创build一个目录。

第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

这是SVN比GIT更好的地方之一。

最后,我们已经吸引了三个select:

  1. 使用wget从github抓取数据(使用原始文件视图)
  2. 有上游项目发布所需的数据子集作为构build工件
  3. 放弃并使用全面结帐。 在第一个版本中,它受到很大打击,但是除非你获得了很多stream量,否则在下面的版本中没有太多的麻烦。

另一个具体例子:

就像我想从url下载“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 

注意path中的树干

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

是的,使用导出而不是结帐会给一个干净的副本,没有额外的git存储库文件。

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

编辑:如果树/主没有在url然后叉,它将在那里叉路url。

为了扩大上面的答案,从真正的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 

有时一个具体的例子有助于澄清所提出的替代。

我们的团队编写了一个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 

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

用法很简单,只需从github项目复制相关部分,假设该项目是https://github.com/MaxCDN/php-maxcdn/ ,并且您想要一个文件夹只有一些源文件,那么您需要做一些事情:

$ python gdownload.py "/MaxCDN/php-maxcdn/tree/master/src" /my/target/dir/
(如果不存在,将创build目标文件夹)

它需要lxml库,可以用easy_install lxml来安装
如果你没有root访问权限(像我一样),你可以创build一个.pydistutils.py文件到你的$HOME目录中,内容如下: [install] user=1 easy_install lxml将会正常工作(ref: https:// stackoverflow .com / a / 33464597/591257 )。

如果您需要以编程方式执行,而您不想依赖SVN,则可以使用GitHub API以recursion方式下载所有内容。

为了获得灵感,这里是我的ruby的要点: https : //gist.github.com/cvengros/b2a7e82f66519d423b6f

你可以做一个简单的下载目录树:

 git archive --remote git@github.com:foobar/Test.git HEAD:foo | tar xf - 

但是如果你的意思是检查出来,并且能够做出承诺并推回来,那么你不能这样做。

如果你想下载的directoy是一个独立的库,最好创build一个其他的git仓库,然后使用git submodule函数。

当然,你必须成为你想要的初始回购的所有者

要从GitHub中导出目录,请将目录的URL中的“/ tree / master /”replace为“/ 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 

我使用linux,把它放在〜/ .bashrc中,叫做even:D $ HOME / .bashrc

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

然后刷新shell

 source ~/.bashrc 

然后用它与git-downloadfolder blablabla:D