如何从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文件夹,而不是克隆整个测试项目。
当前回答
使用此函数,第一个参数是文件夹的url,第二个参数是下载文件夹的位置:
function github-dir() {
svn export "$(sed 's/tree\/master/trunk/' <<< "$1")" "$2"
}
其他回答
这些答案对我的处境都没有帮助。如果您是为Windows开发的,您可能没有svn。在许多情况下,用户也不能指望安装Git,或者因为其他原因不想下载整个存储库。回答这个问题的一些人,如威廉·范·凯维奇和阿兹塔克,制作了完成这项任务的工具。然而,如果该工具不是为您所使用的语言编写的,或者您不想安装第三方库,这些都不起作用。
然而,有一种更简单的方法。GitHub有一个API,允许您使用GET请求下载单个文件或整个目录的内容。您可以使用https://api.github.com/repos/:owner/:repo_name/contents/:path返回枚举目录中所有文件的JSON对象。枚举中包含指向文件原始内容download_url参数的链接。然后可以使用该URL下载该文件。
这是一个两步的过程,需要能够发出GET请求,但这可以在任何平台上以几乎任何语言实现。它可以用于获取文件或目录。
如果您有svn,可以使用svn导出来执行以下操作:
svn export https://github.com/foobar/Test.git/trunk/foo
请注意URL格式:
基本URL为https://github.com//末尾附加的树干
在运行svn导出之前,最好先使用以下命令验证目录的内容:
svn ls https://github.com/foobar/Test.git/trunk/foo
使用此函数,第一个参数是文件夹的url,第二个参数是下载文件夹的位置:
function github-dir() {
svn export "$(sed 's/tree\/master/trunk/' <<< "$1")" "$2"
}
只需5步
从这里下载SVN。打开CMD并转到SVN bin目录,如:cd%ProgramFiles%\SlikSvn\bin假设我想下载这个目录URLhttps://github.com/ZeBobo5/Vlc.DotNet/tree/develop/src/Samples代替树/开发或树干的树/主现在启动最后一个命令以下载同一目录中的文件夹。
svn export https://github.com/ZeBobo5/Vlc.DotNet/trunk/src/Samples
要从GitHub导出目录,请将目录url中的“/tree/master/”替换为“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