如何从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文件夹,而不是克隆整个测试项目。
当前回答
在尝试了所有答案后,对我来说最好的解决方案是:
GitHub基于vscode的编辑器。
赞成的意见:
不需要任何额外的工具,如svn或API令牌。内容大小无限制另存为目录或文件,而不是存档。
说明书
转到任何回购。(例如。https://github.com/RespiraWorks/Ventilator/tree/master/software)按或者在URL中将.com替换为.dev,以在GitHub的内部编辑器中打开repo在资源管理器窗格(左侧或按Ctrl+Shift+E)中,右键单击所需的文件/文件夹并选择下载。在“选择文件夹”对话框中,选择磁盘上希望所选文件/文件夹存在的目录。
Note
我尝试了其他解决方案,如接受的答案,
不要只为此安装和学习svn。其他工具,如Download Directory、Refined GitHub、GitZip和DownGit,要么需要API令牌,要么无法下载大型目录。
其他选项
带有远程存储库扩展名的VSCode,用于打开存储库并下载文件/文件夹。
其他回答
我们的团队为此编写了一个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
此功能有两个选项:
选项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帐户并在该站点中使用“获取令牌”链接,它还可以支持私有/公共回购并升级费率限制。
这是SVN优于Git的少数几个地方之一。
最终,我们倾向于三种选择:
使用wget从GitHub获取数据(使用原始文件视图)。让上游项目将所需的数据子集发布为构建工件。放弃并使用全额结账。它在第一个版本中大受欢迎,但除非您获得大量流量,否则在接下来的版本中不会太麻烦。
2021 4月更新:社区创建的一些工具可以为您做到这一点:
下载目录(Credits to fregante)它还作为Github web UI中的一个按钮集成到了出色的精致Github chrome扩展中。GitZip(归功于Kino-请在此处查看他的答案)DownGit(归功于Minhas Kamal-见此处的答案)
注意:如果您试图下载大量文件,可能需要向这些工具提供令牌以避免速率限制。
原始(手动)方法:git本机不支持检出单个目录,但Github可以通过SVN实现这一点。如果您使用subversion签出代码,Github将在后端将repo从git转换为subversion,然后提供所请求的目录。
以下是如何使用此功能下载特定文件夹。我将使用流行的javascript库lodash作为示例。
导航到要下载的文件夹。让我们从master分支下载/测试。修改subversion的URL。用树干替换树/主树。https://github.com/lodash/lodash/tree/master/test ➜https://github.com/lodash/lodash/trunk/test下载文件夹。转到命令行,用SVN抓取文件夹。
svn checkout https://github.com/lodash/lodash/trunk/test
您可能不会立即看到任何活动,因为Github转换更大的存储库需要30秒,所以请耐心等待。
完整的URL格式说明:如果您对master分支感兴趣,请改用trunk。所以完整路径是trunk/foldername如果您对foo分支感兴趣,请改用branches/foo。这个完整路径看起来像branches/foo/foldernameProtip:如果您愿意,可以在下载之前使用svnls查看可用的标记和分支
这就是全部!Github还支持更多的subversion特性,包括提交和推送更改的支持。
如果您想使用Python和SVN下载特定的GitHub目录,请使用以下代码:
import validators
from svn.remote import RemoteClient
def download_folder(url):
if 'tree/master' in url:
url = url.replace('tree/master', 'trunk')
r = RemoteClient(url)
r.export('output')
if __name__ == '__main__':
url = input('Enter folder URL: ')
if not validators.url(url):
print('Invalid url')
else:
download_folder(url)
您可以在本教程中查看有关此代码和其他GitHub搜索和下载提示的更多详细信息:https://python.gotrained.com/search-github-api/