如何从Github下载文件夹?

72

11
可能是 Download a single folder or directory from a GitHub repo 的重复问题。 - Helen
3
前往DownGit > 输入GitHub文件夹URL > 下载 (无需命令、工具,简单易行!) - Minhas Kamal
2
GitHub的用户界面太差了,应该加入下载文件夹选项。 - JGFMK
@MinhasKamal,你应该把这个作为回答发布。那是一个非常有用且易于使用的工具。 - julealgon
13个回答

54

您能够从GitHub下载一个文件/文件夹

只需要使用:svn export <repo>/trunk/<folder>

例如:svn export https://github.com/lodash/lodash/trunk/docs

注意:您可以首先在终端中列出文件夹的内容,使用命令:svn ls <repo>/trunk/folder

(是的,在2016年,您似乎仍然需要SVN才能简单地下载一些GitHub文件)


4
除了非master分支需要使用<repo>/branches/<branch_name>/<folder>之外,其他都完美无误。 - coreyward
2
<repo>/tags/<tag_name>/<folder> 似乎也可以工作。 - skube
不错,谢谢。虽然我还没有找到如何使其适用于特定的Commit-ID。例如,在MSYS2环境下的较旧版本的clang:https://github.com/msys2/MINGW-packages/tree/aed89db4b0698dd4eaf3dc2ffd1c9541a61cc424/mingw-w64-clang - saulius2
1
SVN是什么鬼东西?xD - Ap0st0l

35
您可以使用 Github Contents API 获取存档链接,然后使用 tar 命令检索指定文件夹。

命令行:

curl https://codeload.github.com/[owner]/[repo]/tar.gz/master | \ tar -xz --strip=2 [repo]-master/[folder_path]


例如,
如果您想要从zeit/next.js下载examples/with-apollo/文件夹,您可以输入以下内容:

curl https://codeload.github.com/zeit/next.js/tar.gz/master | \
  tar -xz --strip=2 next.js-master/examples/with-apollo

4
好的!此外,使用 WGET 和常规的 GitHub 存档 URL 都是可选的:wget -O - https://github.com/zeit/next.js/archive/master.tar.gz | tar -xz --strip=2 "next.js-master/examples/with-apollo" - Noam Manos
1
zip 也可以使用。wget -c https://github.com/user/project/archive/master.zip - Nick Dong
4
这个选项很糟糕。如果你只需要图片,它会先下载整个仓库,然后再裁剪。最好还是手动单独下载15张图片,这样会更方便。 - JGFMK
@JGFMK:也许不是垃圾解决方案,但可能只是不够优雅的解决方案,对于某些情况可能也无效(例如你提到的从数百张图片中下载几张的情况)。 - saulius2

24

使用GitZip在线工具。它可以将GitHub存储库的子目录作为zip文件下载。无需使用git命令!


4
为什么需要对我所有公共仓库进行写访问权限?这不是一个安全风险吗? - Jared Thirsk
@JaredThirsk,但是它并没有。你能告诉我们在你的情况下是什么时候发生的吗? - gdrt
当我点击获取令牌:正常时,Github会询问:“此应用程序将能够读取和写入所有公共存储库数据。这包括以下内容:- 代码,...” - Jared Thirsk
@JaredThirsk,如果存储库不是公共的,您应该提供API访问令牌。如果它是公共的,只需提供存储库URL并单击下载按钮即可。 - gdrt
@ gdrt 好的,我明白了。如果在进入该页面时没有默认展开弹出窗口,以及消息“我们建议先获取令牌,然后执行您的操作”,那就太好了。 - Jared Thirsk
1
很少能找到如此简单的解决方案来实现你想要做的事情。这真的帮了我很大忙。谢谢! - ZeroKelvin

12

如何从GitHub repo中下载特定文件夹

以下是一个合适的解决方案,来自于这篇帖子:

  • 创建一个目录

     mkdir github-project-name 
     cd github-project-name
    
  • 建立一个Git仓库

  •  git init
     git remote add origin <URL-link of the repo>
    
  • 配置您的 git 仓库,只下载特定目录

  •  git config core.sparseCheckout true # enable this
    
    设置您想要下载的文件夹,例如,您只希望从 https://github.com/project-tree/master/doc 下载 doc 目录。
     echo "/absolute/path/to/folder" > .git/info/sparse-checkout 
    

    例如,如果您只想从主仓库 https://github.com/project-tree/master/doc 下载 doc 目录,则您的命令是 echo "doc" > .git/info/sparse-checkout

    按照通常的方式下载您的仓库。

     git pull origin master
    

最佳答案!然而,我认为在“git remote add origin”中不应该有“-f”,因为“-f”表示立即从服务器获取,这应该被避免,因为只需要“稀疏”路径! - Robert
太棒了的回答! - canmustu
4
就我的情况而言,我可以从 git pull origin 的详细输出中看到,这样做会下载整个代码库;但仅保留在 .git/info/sparse-checkout 中指定的文件夹。使用 https://downgit.github.io/ 可以帮助我完成此操作。 - Naveen Reddy Marthala

11

有一个名为 Download ZIP 的按钮。如果您想进行稀疏检出,网站上有许多解决方案可供选择,例如这里


2
下载所有内容并压缩成zip文件,然后解压缩,删除不需要的内容,重新压缩并使用scp命令将其传输到目标位置。 - Monica Heddneck
或者直接下载整个代码库,并浏览您想要的文件,无需安装或配置任何工具。(不过您的评论是重复的) - IamK
4
这不应该是被接受的答案。具体来说,“你无法下载一个文件夹或一个文件”的说法是错误的。请看下面的各种正确解决方案。 - colemars
谢谢您的建议,我会更新答案。我认为下面的解决方案不正确,它们只是起作用而已。您可以使用 git 从存储库下载子文件夹。无论如何,托管站点 github.com 没有提供不使用任何外部工具就能这样做的方法。 - IamK

3

Github的VSCode集成

如果您和我一样,想要从浏览器中下载github存储库中的文件夹,而不需要任何第三方工具,您可以使用Github的vs code扩展程序。

步骤 1 打开您想要在浏览器中下载的存储库的目录。

步骤 2 在URL栏中将.com替换为.dev。例如:https://github.com/lodash/lodash将变成https://github.dev/lodash/lodash

步骤 3 这将打开该Git存储库的VSCode界面。只需右键单击要下载的文件夹,然后选择“下载”选项即可。


值得一提的是,这种方法仅适用于基于Chrome/Chromium的浏览器。虽然Firefox“通常”支持GitHub Web IDE,但它不提供下载功能。 - user3159253

2
如果您想自动化这些步骤,这里的建议只能起到一定程度的作用。
我发现了一个叫做“fetch”的工具,对我来说效果非常好。您甚至可以指定版本。因此,它需要执行一步下载并设置为可执行文件,然后提取所需的文件夹:
curl -sSLfo ./fetch \
https://github.com/gruntwork-io/fetch/releases/download/v0.3.12/fetch_linux_amd64

chmod +x ./fetch

./fetch --repo="https://github.com/foo/bar" --tag="${VERSION}" --source-path="/baz" /tmp/baz

我的投票给matrik。这个fetch工具正是我在寻找的:https://github.com//gruntwork-io/fetch。它是一个命令行工具,不仅适用于OP的用例,而且还提供了许多其他有用的功能和开关,可以精确指定你需要的内容。 - nelsestu

1

还有一个不错的浏览器扩展,可以下载文件或文件夹


1

这可能不是最高效的解决方案,但我觉得很有趣!这个脚本可以只用bash下载github文件夹中的所有文件。

(我曾用它来下载postgresql教程中的文件,但在其他地方未进行过测试)

curl "https://github.com/postgres/postgres/tree/master/src/tutorial" > test.html
links=$(cat test.html | grep -o \[^\"\]\*/blob/\[^\"]\*)
echo $links
echo "Now as a list.."
as_list=($links)
for (( i=0; i<${#as_list[@]}; i++ ));do
    download_link=("https://raw.githubusercontent.com${as_list[$i]}")
    echo "completing link: "
    echo "${download_link///blob/""}"
    wget "${download_link///blob/""}"
done

说明:

(1) 第一行代码将目标文件夹下载为html格式,并保存为test.html

(2) 第二行代码提取页面上所有文件链接。这是通过观察到文件链接看起来像“/ postgres / postgres / blob / master / src / tutorial / .gitignore”在html中,我们可以通过查找'blob'并获取每侧最近引号“之间的所有文本来获得所有这些文本

(3) 我们将其转换为列表

(4) 完成任务的方法是观察到文件的原始文本版本的URL略有不同,例如对于URL“/ postgres / postgres / blob / master / src / tutorial / .gitignore”,文件的原始文本URL为“https://raw.githubusercontent.com/postgres/postgres/master/src/tutorial/.gitignore”。因此,为了处理数据,我们将“/ postgres / postgres / blob / master / src / tutorial / .gitignore”转换为“/ postgres / postgres / master / src / tutorial / .gitignore”,最终转换为“https://raw.githubusercontent.com/postgres/postgres/master/src/tutorial/.gitignore”

P.S. 如果我的bash脚本很笨拙 - 我是一个新的Linux用户


1

依赖关系:cURL7-Zip

curl {url for downloading zip file} | 7z a -tzip {project name}-{branch name}/{folder path in that branch}

for example:

curl https://github.com/hnvn/flutter_shimmer/archive/master.zip | 7z a -tzip flutter_shimmer-master/examples

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接