如何从GitHub下载特定提交sha的.zip文件?

139

我想从GitHub下载一个库的源码.zip文件,但我不想下载主分支,因为每次下载可能会得到不同的版本。

这个库没有标签可用,所以我不能用那个方法。

那么如何根据特定的提交 SHA 下载源代码 .zip 文件?


3
需要标记为PHP或Composer-PHP吗? - Cacovsky
我认为这对DevOps无效。 - Michael Blake
4个回答

276

您可以在下载 URL 中放置所需的 sha:

https://github.com/{username}/{projectname}/archive/{sha}.zip

通常情况下,如果您有一个有效的 URL,则可以将 "master" 替换为您想要的特定 sha。

在 Unix 上:

wget https://github.com/{username}/{projectname}/archive/{sha}.zip

请注意,如果这是私有存储库,则 wget 将无法工作,除非您也传递 OAuth 令牌。

以下是更多信息:

Having trouble downloading Git archive tarballs from Private Repo


7
没想到会用这种(酷)方式做它。本以为会使用Git命令;) - HenchHacker
1
请查看此链接 - 可能正在寻找这个 https://dev59.com/6mfWa4cB1Zd3GeqPiI-V#48503019 - Ravindra Gullapalli
你也可以使用短的sha! - wjandrea
1
即使我使用 wget -O 重命名存档 ZIP 文件,解压缩后仍然会得到一个又大又丑的 SHA1 目录名称。有没有什么方法可以避免这种情况? - QED

46

查看提交的代码时,请单击右上方的“浏览代码”按钮,然后单击“下载ZIP”。


1
现在他们有一个“克隆或下载”按钮,您可以通过它“下载ZIP”。 - SureshS
“克隆或下载”是新按钮,替换了旧的“克隆”和“下载”按钮。新按钮不会使用特定版本 - 请按照 Zeki 描述的方式操作。 - pal
3
这个方法在2017年2月对我有效。它以所选提交的时间戳下载了具有更改的代码库。 - ocean4dream
2023年,这个仍然有效,但是按钮现在被称为“代码”。从一个分支,点击“代码”会打开一个下拉菜单,其中包括“下载ZIP”链接。对于特定的提交,点击该提交,然后点击右上角的“浏览文件”,然后“代码”出现并提供一个指向该提交的ZIP文件的链接。 - someone

9

这个问题很古老,但是我想提到如果你想要一个补丁作为提交的一部分,而不是整个存储库在提交时的状态,可以使用以下命令:

$ wget http://github.com/username/repo/commit/sha1.patch
#                        ^^^^^^^^ ^^^^        ^^^^
#                        change   change      change
/commit.patch是重要的部分。
如果您想合并一个较长时间前被撤销的更改,因此在派生存储库中不存在,这将特别有用。

4

对于那些想要从特定提交(或分支)下载特定文件(或目录)的人:

git_user="user-name"
git_project="project-name"
commit_or_branch="sha-id or branch name"
dir_or_file="path/to/dir-or-file"

archive_url="https://github.com/${git_user}/${git_project}/archive/${commit_or_branch}.tar.gz"

wget -O - ${archive_url} | tar xz --strip=1 "${git_project}-${commit_or_branch}/${dir_or_file}"

下载tar.gz格式的归档文件的好处在于,您可以直接将wget管道传送到tar命令中,这样它将会即时解压缩gz文件

1
浪费的文件可以直接下载,子目录可以通过GitHub的SVN接口下载,请参见https://dev59.com/Tmw05IYBdhLWcg3wqzis - milahu
2
@MilaNautikus,你的使用svn的链接-首先需要安装SVN,而wget已经在大多数平台上可用。不要仅仅进行投票,发表一个有用的答案。 - Noam Manos

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