如何从GitHub上托管的远程Git repo中仅下载特定文件夹或目录?
举个GitHub repo的例子:
git@github.com:foobar/Test.git
其目录结构:
Test/
├── foo/
│ ├── a.py
│ └── b.py
└── bar/
├── c.py
└── d.py
我只想下载foo文件夹,而不是克隆整个测试项目。
如何从GitHub上托管的远程Git repo中仅下载特定文件夹或目录?
举个GitHub repo的例子:
git@github.com:foobar/Test.git
其目录结构:
Test/
├── foo/
│ ├── a.py
│ └── b.py
└── bar/
├── c.py
└── d.py
我只想下载foo文件夹,而不是克隆整个测试项目。
当前回答
有一个名为githubdl的Python3pip包可以做到这一点*:
export GIT_TOKEN=1234567890123456789012345678901234567890123
pip install githubdl
githubdl -u http://github.com/foobar/test -d foo
项目页面在此处
*免责声明:这个包裹是我写的。
其他回答
您可以将ghget与从地址栏复制的任何URL一起使用:
ghget https://github.com/fivethirtyeight/data/tree/master/airline-safety
这是一个独立的可移植shell脚本,不使用SVN(这对我来说在大型回购中不起作用)。它也不使用API,因此不需要令牌,也不受速率限制。
免责声明:我做到了。
此功能有两个选项:
选项1:GitZip浏览器扩展
Chrome扩展、Edge扩展、Firefox插件
用法:
浏览任何Github存储库页面。两种下载方式:选择项目:默认情况下,您可以双击项目或选中项目前面的复选框。单击页面右下角的下载按钮。在上下文菜单中:单击“GitZip下载”>“整个存储库”或“当前文件夹”。将鼠标光标移动到项目上,然后单击“GitZip下载”>“选定文件夹/文件”。完成2-1-1后,单击“GitZip下载”>“已检查项目”。查看进度仪表板并等待浏览器触发器下载。获取ZIP文件。
获取令牌:
单击浏览器上的GitZip Extension图标。单击“获取令牌”之外的“普通”或“专用”链接。在Github身份验证页面上授权GitZip权限。返回到开始的回购页面。继续使用。
选项2:Github gh页面
http://kinolien.github.io/gitzip通过使用GitHub API和JSZip、FileSaver.js库。
步骤1:在右上角的字段中输入github url。步骤2:按回车键或直接单击下载以下载zip,或单击搜索以查看子文件夹和文件的列表。步骤3:单击“下载Zip文件”或“获取文件”按钮获取文件。
在大多数情况下,它工作正常,除了文件夹包含1000多个文件,因为Github Trees API的限制。(参考Github API#内容)
此外,如果您拥有GitHub帐户并在该站点中使用“获取令牌”链接,它还可以支持私有/公共回购并升级费率限制。
您可以简单地下载目录树:
git archive --remote git@github.com:foobar/Test.git HEAD:foo | tar xf -
但如果你想检查一下,并且能够提交并将它们推回去,那么你就不能这样做。
如果要下载的目录是一个单独的库,最好创建其他git repo,然后使用git子模块函数。
当然,你必须是你想要的初始回购的所有者
这些答案对我的处境都没有帮助。如果您是为Windows开发的,您可能没有svn。在许多情况下,用户也不能指望安装Git,或者因为其他原因不想下载整个存储库。回答这个问题的一些人,如威廉·范·凯维奇和阿兹塔克,制作了完成这项任务的工具。然而,如果该工具不是为您所使用的语言编写的,或者您不想安装第三方库,这些都不起作用。
然而,有一种更简单的方法。GitHub有一个API,允许您使用GET请求下载单个文件或整个目录的内容。您可以使用https://api.github.com/repos/:owner/:repo_name/contents/:path返回枚举目录中所有文件的JSON对象。枚举中包含指向文件原始内容download_url参数的链接。然后可以使用该URL下载该文件。
这是一个两步的过程,需要能够发出GET请求,但这可以在任何平台上以几乎任何语言实现。它可以用于获取文件或目录。