如何从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文件夹,而不是克隆整个测试项目。
当前回答
转到DownGit>输入您的URL>下载!
您可以直接下载或从DownGit为任何GitHub公共目录或文件创建下载链接-
您还可以配置下载文件的财产-详细用法。
免责声明:我和提问者陷入了同样的问题,无法找到任何简单的解决方案。因此,我首先开发了这个工具供自己使用,然后为每个人打开它:)
其他回答
如果您熟悉unix命令,则不需要特殊的依赖项或web应用程序。您可以将回购文件下载为tarball,并只下载您需要的内容。
示例(font真棒中的子目录中的woff2文件):
curl -L https://api.github.com/repos/FortAwesome/Font-Awesome/tarball | tar xz --wildcards "*/web-fonts-with-css/webfonts/*.woff2" --strip-components=3
有关链接格式的详细信息:https://developer.github.com/v3/repos/contents/#get-存档链接(包括如何获取zip文件或特定分支/refs)保留路径的初始部分(*/)以匹配任何目录。Github创建了一个包装器目录,名称中包含commit ref,因此无法知道。您可能希望--strip组件与路径中斜杠(/)的数量相同(上一个参数)。
这将下载整个tarball。如果必须避免这种情况,或者如果您想对GitHub服务器友好,请使用其他答案中提到的SVN方法。
这是SVN优于Git的少数几个地方之一。
最终,我们倾向于三种选择:
使用wget从GitHub获取数据(使用原始文件视图)。让上游项目将所需的数据子集发布为构建工件。放弃并使用全额结账。它在第一个版本中大受欢迎,但除非您获得大量流量,否则在接下来的版本中不会太麻烦。
在要加载的目录中:
git init
git remote add origin -f repoUrl // folder url
touch .git/info/sparse-checkout
git pull origin master
只有4行代码
使用此函数,第一个参数是文件夹的url,第二个参数是下载文件夹的位置:
function github-dir() {
svn export "$(sed 's/tree\/master/trunk/' <<< "$1")" "$2"
}
如果你真的只想“下载”文件夹,而不想“克隆”它(用于开发),那么最简单的方法就是简单地获取存储库的最新版本的副本(以及其中的文件夹/文件),而无需首先克隆整个存储库,甚至安装git,下载zip存档(对于任何repo、fork、branch、commit等),方法是转到GitHub上所需的存储库/fork/branch/commit(例如,http://GitHub.com/<user>/<repo>/commit/<Sha1>,获取文件副本,如同在特定提交后一样),然后选择右上方的下载按钮。
这种存档格式不包含任何git repo魔法,只包含被跟踪的文件本身(如果它们被跟踪的话,可能还有几个.gitignore文件,但你可以忽略它们:p)-这意味着如果代码发生变化,并且你想保持在顶部,你必须手动重新下载它,这也意味着你不能将其用作git存储库。。。
不确定在这种情况下,这是否是您想要的(再次,“下载”/查看vs“克隆”/开发),但它仍然很有用。。。