如何从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文件夹,而不是克隆整个测试项目。
当前回答
我找到的最简单的方法是如何仅克隆Git存储库的子目录?
我在gitclone命令中添加了-b<branch>--singlebranch以下载特定的分支。所以我使用的命令是:
git clone --depth 1 --single-branch -b <branch> --filter=blob:none --sparse <url>
git sparse-checkout set <directory>
其他回答
git稀疏校验
Git 2.25.0包含了一个新的实验性Git稀疏签出命令,它使现有功能更易于使用,同时还为大型存储库带来了一些重要的性能优势。(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
最值得注意的是
--稀疏仅将git存储库的顶级目录文件签入工作副本git稀疏签出add t增量添加/签出git的t子文件夹
其他要素
git稀疏签出init做了一些准备以启用部分签出--filter=blob:none通过只下载必要的git对象来优化数据获取(查看部分克隆功能以了解更多信息)--cone还通过应用更受限制的文件包含模式来提高性能
GitHub状态
GitHub仍在内部评估这一功能,尽管它在少数几个存储库上启用了[…]。随着该功能的稳定和成熟,我们将不断更新其进展。(文档)
这是SVN优于Git的少数几个地方之一。
最终,我们倾向于三种选择:
使用wget从GitHub获取数据(使用原始文件视图)。让上游项目将所需的数据子集发布为构建工件。放弃并使用全额结账。它在第一个版本中大受欢迎,但除非您获得大量流量,否则在接下来的版本中不会太麻烦。
试试看。
https://github.com/twfb/git-directory-download
usage: gitd [-h] [-u URL] [-r] [-p] [--proxy PROXY]
optional arguments:
-h, --help show this help message and exit
-u URL, --url URL github url, split by ",", example: "https://x, http://y"
-r, --raw download from raw url
-p, --parse download by parsing html
--proxy PROXY proxy config, example "socks5://127.0.0.1:7891"
Example:
1. download by raw url: gitd -u "https://github.com/twfb/git-directory-download"
2. download by raw url: gitd -r -u "https://github.com/twfb/git-directory-download"
3. dowmload by parsing: gitd -p -u "https://github.com/twfb/git-directory-download"
4. download by raw url with proxy: gitd -r -u "https://github.com/twfb/git-directory-download" --proxy "socks5://127.0.0.1:7891"
我找到的最简单的方法是如何仅克隆Git存储库的子目录?
我在gitclone命令中添加了-b<branch>--singlebranch以下载特定的分支。所以我使用的命令是:
git clone --depth 1 --single-branch -b <branch> --filter=blob:none --sparse <url>
git sparse-checkout set <directory>
此功能有两个选项:
选项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帐户并在该站点中使用“获取令牌”链接,它还可以支持私有/公共回购并升级费率限制。