如何使用命令行将GitHub存储库下载为.zip文件

我正在尝试在Ubuntu的命令行中从GitHub下载一个.zip文件。我正在使用wget命令在远程Ubuntu系统上进行操作。
我运行wget <link>,其中<link>是我想要下载的文件的地址栏链接。它以archive.zip?ref=master结尾。
现在,当我执行该命令时,它下载的是一个text/html类型的文件,而不是我想要的.zip文件。
请告诉我如何获取作为wget参数的链接。目前,我只是复制按钮的链接地址(使用右键单击)并将其写入wget参数中。

你能告诉我你正在粘贴的确切命令吗? - kashish
1你的URL真的以.zip结尾吗? - kashish
@kashish 不,URL并不以.zip结尾。我正在尝试从GitHub下载一个项目,它有一个提供zip和其他选项的下载按钮。所以,我正在从那里尝试下载。它以archive.zip?ref=master结尾。 - UbuntuCoder
要下载一个 GitHub 项目,你可以使用 git clone <projectlink.git> - kashish
2如果我没记错的话,可以使用以下地址将存储库下载为Zip文件:https://github.com/{user}/{repo}/archive/{branch}.zip - Alex Chermenin
@AlexChermenin 这是真的,但只有在浏览器中打开它而不使用wget(请参见我的答案)。 - derHugo
@derHugo,使用wget + url和在浏览器中打开url有什么区别? - Alex Chermenin
我猜你没有读到我下面的回答……在浏览器上,你可能会被重定向到另一个URL……但是使用wget命令,这种情况不会发生,而是会获取URL指向的文件。 - derHugo
@derHugo 当wget收到302响应并继续使用新地址下载时,一切都没问题。https://unix.stackexchange.com/a/74338 - Alex Chermenin
因为在这种情况下,使用SourceForge时会立即重定向。Github在构建zip文件后才会重定向。wget无论以后是否有重定向,都只是下载实际文件,不等待。 - derHugo
@derHugo 你试过了吗?我尝试了几个不同的存储库和分支,每次都得到了正确的结果。我做错了什么吗? - Alex Chermenin
是的,我得到的只有:正在解析 github.com (github.com)... 192.30.253.112, 192.30.253.113 正在连接到 github.com (github.com)|192.30.253.112|:443... 已连接。 发送 HTTP 请求,正在等待响应... 404 Not Found 2017-07-27 14:40:20 错误 404: Not Found。另外,wget不知道您的凭据,所以您必须将它们作为文本提供,这并不好。 - derHugo
4个回答

只要使用正确的URL,它是有效的。

对于GitHub存储库,可以在https://github.com/<user>/<repo>/archive/<branch>.zip找到一个压缩文件,因此您可以通过以下方式下载:

wget https://github.com/<user>/<repo>/archive/<branch>.zip

这将下载给定分支的压缩存储库。请注意,您也可以用提交哈希替换分支。

使用cURL

curl -L https://github.com/<user>/<repo>/archive/<branch>.zip

cURL的-L标志会跟随重定向 - 这是wget的默认设置。
下载.tgz而不是.zip 您也可以使用以下命令下载一个tarball:
wget https://github.com/<user>/<repo>/archive/<branch>.tar.gz

2curl -L -O <url> 在 MacOS 上可行;(发布此信息是因为它与 Unix 相关)感谢您添加关于 curl 的信息;当我在搜索 MacOS 上的等效命令时,我就找到了这里,尽管安装它并不难,但 wget 不是默认安装的(我的使用情况限制了我不能安装)。建议您添加 -O 选项,以避免“二进制输出可能破坏您的终端”。 - Phil Gibbins

根据我看到的评论,你实际上在谈论GitHub。

这样做行不通,因为:

在GitHub上下载项目会导致GitHub服务器首先将您的项目打包成zip文件,然后将您转发到一个临时链接,在该链接中您可以获取您的zip文件..

此链接仅在一定时间内有效,然后GitHub将从其服务器上删除您的zip文件。

所以使用wget只能得到将在生成zip文件后立即转发您的HTML页面。

建议使用

git clone http://github.com/<yourRepoLink> <optional local path where to store>

要下载git仓库...如果出于某些原因(例如转移给他人),您仍然可以在克隆完成后打包成zip文件。


2克隆后,如果仍需要zip文件,请执行git archive -o output.zip - Ferrybig
1git clone 功能正常,但有些情况下没有必要安装 git 只为了下载代码库。 - Robin Métral

2021 更新 使用 wget 从 GitHub 下载并解压

还会展开和删除存档。只需编辑 REPLACE_ 值,然后复制/粘贴即可

zip

GH_USER=REPLACE_WITH_USER \
GH_REPO=REPLACE_WITH_REPO \
GH_BRANCH=REPLACE_WITH_BRANCH \
wget https://github.com/${GH_USER}/${GH_REPO}/archive/refs/tags/${GH_BRANCH}.zip \
-O "${GH_REPO}-${GH_BRANCH}.zip" && \ 
unzip ./"${GH_REPO}-${GH_BRANCH}.zip" && \
rm ./"${GH_REPO}-${GH_BRANCH}.zip"

tgz
GH_USER=REPLACE_WITH_USER \
GH_REPO=REPLACE_WITH_REPO \
GH_BRANCH=REPLACE_WITH_BRANCH \
wget https://github.com/${GH_USER}/${GH_REPO}/archive/refs/tags/${GH_BRANCH}.tar.gz \
-O "${GH_REPO}-${GH_BRANCH}.tar.gz" && \
tar -xzvf ./"${GH_REPO}-${GH_BRANCH}.tar.gz" && \
rm ./"${GH_REPO}-${GH_BRANCH}.tar.gz"

我刚刚做了这件事,但请确保你使用的链接是以*.zip结尾的正确链接,就像@Robin Métral上面说的那样。
我具体的步骤如下:
  1. 打开GitHub仓库。
  2. 右键点击下载Zip链接,并复制URL。
  3. 在终端中使用复制的URL和wget命令。
我相信GitHub服务器会接受wget请求,并将其视为与浏览器请求相同。