【发布时间】:2012-11-18 03:54:19
【问题描述】:
我想下载一个 .zip,其中包含托管在 github 上的库的源代码,但我不想要 master,因为每次下载时我都可能下载不同的版本。
这个特定的库没有标签,所以我不能使用它。
那么如何下载特定提交 sha 的 source.zip?
【问题讨论】:
-
这个不需要用php或者composer-php来标记吧?
我想下载一个 .zip,其中包含托管在 github 上的库的源代码,但我不想要 master,因为每次下载时我都可能下载不同的版本。
这个特定的库没有标签,所以我不能使用它。
那么如何下载特定提交 sha 的 source.zip?
【问题讨论】:
你可以把你想要的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
【讨论】:
wget -O 重命名存档 ZIP 文件,解压缩后我也会得到一个丑陋的 SHA1 目录名。有什么办法可以避免这种情况?
查看提交代码时,点击右上角的“Browse Code”按钮,然后点击“Download ZIP”。
【讨论】:
这是一个老问题,但想提一下,如果您只想将提交作为一个补丁,而不是提交时的整个 repo,您可以使用:
$ wget http://github.com/username/repo/commit/sha1.patch
# ^^^^^^^^ ^^^^ ^^^^
# change change change
/commit 和 .patch 部分是重要部分。
如果您想合并前一段时间被撤销的更改,因此这在分叉的存储库中不存在时特别有用。
【讨论】:
对于那些来这里寻找从特定提交(或分支)下载特定文件(或目录)的方法的人:
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飞。
【讨论】:
svn 的链接- 需要先安装SVN,而wget 已经在大多数平台上可用。与其投反对票,不如发布一个有用的答案。