# 下载源代码存档

可以在存储库中下载代码的快照。

## 源代码存档概述

你可以从 GitHub 下载任何分支、标记或特定提交的快照。 这些快照由 [`git archive` 命令](https://git-scm.com/docs/git-archive)生成，有两种格式：tarball 或 zipball。 快照不包含整个存储库历史记录。 如果需要完整的历史记录，可以克隆存储库。 有关详细信息，请参阅“[克隆仓库](/zh/repositories/creating-and-managing-repositories/cloning-a-repository)”。

## 下载源代码存档

可以通过三种方式下载源代码存档。

### 从存储库视图下载源代码存档

1. 在 GitHub 上，导航到存储库的主页面。
2. 在文件列表上方，单击“<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-code" aria-label="code" role="img"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg> Code”\*\*\*\*。

   ![存储库登陆页面上的文件列表的屏幕截图。 “代码”按钮以深橙色轮廓突出显示。](/assets/images/help/repository/code-button.png)
3. 单击“<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-file-zip" aria-label="file-zip" role="img"><path d="M3.5 1.75v11.5c0 .09.048.173.126.217a.75.75 0 0 1-.752 1.298A1.748 1.748 0 0 1 2 13.25V1.75C2 .784 2.784 0 3.75 0h5.586c.464 0 .909.185 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 12.25 15h-.5a.75.75 0 0 1 0-1.5h.5a.25.25 0 0 0 .25-.25V4.664a.25.25 0 0 0-.073-.177L9.513 1.573a.25.25 0 0 0-.177-.073H7.25a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5h-3a.25.25 0 0 0-.25.25Zm3.75 8.75h.5c.966 0 1.75.784 1.75 1.75v3a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1-.75-.75v-3c0-.966.784-1.75 1.75-1.75ZM6 5.25a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 6 5.25Zm.75 2.25h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM8 6.75A.75.75 0 0 1 8.75 6h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 8 6.75ZM8.75 3h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM8 9.75A.75.75 0 0 1 8.75 9h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 8 9.75Zm-1 2.5v2.25h1v-2.25a.25.25 0 0 0-.25-.25h-.5a.25.25 0 0 0-.25.25Z"></path></svg> Download ZIP”\*\*\*\*。

### 从版本下载源代码存档

1. 在 GitHub 上，导航到存储库的主页面。
2. 在文件列表右侧，单击“发布”。

   ![存储库的主页的屏幕截图。 标记为“版本”的链接以橙色边框突出显示。](/assets/images/help/releases/release-link.png)
3. 向下滚动到版本的“资产”部分。
4. 若要下载源代码，请单击“<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-file-zip" aria-label="file-zip" role="img"><path d="M3.5 1.75v11.5c0 .09.048.173.126.217a.75.75 0 0 1-.752 1.298A1.748 1.748 0 0 1 2 13.25V1.75C2 .784 2.784 0 3.75 0h5.586c.464 0 .909.185 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 12.25 15h-.5a.75.75 0 0 1 0-1.5h.5a.25.25 0 0 0 .25-.25V4.664a.25.25 0 0 0-.073-.177L9.513 1.573a.25.25 0 0 0-.177-.073H7.25a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5h-3a.25.25 0 0 0-.25.25Zm3.75 8.75h.5c.966 0 1.75.784 1.75 1.75v3a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1-.75-.75v-3c0-.966.784-1.75 1.75-1.75ZM6 5.25a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 6 5.25Zm.75 2.25h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM8 6.75A.75.75 0 0 1 8.75 6h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 8 6.75ZM8.75 3h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM8 9.75A.75.75 0 0 1 8.75 9h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 8 9.75Zm-1 2.5v2.25h1v-2.25a.25.25 0 0 0-.25-.25h-.5a.25.25 0 0 0-.25.25Z"></path></svg> Source code (zip)”或“<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-file-zip" aria-label="file-zip" role="img"><path d="M3.5 1.75v11.5c0 .09.048.173.126.217a.75.75 0 0 1-.752 1.298A1.748 1.748 0 0 1 2 13.25V1.75C2 .784 2.784 0 3.75 0h5.586c.464 0 .909.185 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 12.25 15h-.5a.75.75 0 0 1 0-1.5h.5a.25.25 0 0 0 .25-.25V4.664a.25.25 0 0 0-.073-.177L9.513 1.573a.25.25 0 0 0-.177-.073H7.25a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5h-3a.25.25 0 0 0-.25.25Zm3.75 8.75h.5c.966 0 1.75.784 1.75 1.75v3a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1-.75-.75v-3c0-.966.784-1.75 1.75-1.75ZM6 5.25a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 6 5.25Zm.75 2.25h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM8 6.75A.75.75 0 0 1 8.75 6h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 8 6.75ZM8.75 3h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM8 9.75A.75.75 0 0 1 8.75 9h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 8 9.75Zm-1 2.5v2.25h1v-2.25a.25.25 0 0 0-.25-.25h-.5a.25.25 0 0 0-.25.25Z"></path></svg> Source code (tar.gz)”。\*\*\*\*\*\*\*\*

### 从标记下载源代码存档

1. 在 GitHub 上，导航到存储库的主页面。
2. 在文件列表右侧，单击“发布”。

   ![存储库的主页的屏幕截图。 标记为“版本”的链接以橙色边框突出显示。](/assets/images/help/releases/release-link.png)
3. 在“发布”页面顶部，点击“标签”。
4. 若要下载源代码，请单击“<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-file-zip" aria-label="file-zip" role="img"><path d="M3.5 1.75v11.5c0 .09.048.173.126.217a.75.75 0 0 1-.752 1.298A1.748 1.748 0 0 1 2 13.25V1.75C2 .784 2.784 0 3.75 0h5.586c.464 0 .909.185 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 12.25 15h-.5a.75.75 0 0 1 0-1.5h.5a.25.25 0 0 0 .25-.25V4.664a.25.25 0 0 0-.073-.177L9.513 1.573a.25.25 0 0 0-.177-.073H7.25a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5h-3a.25.25 0 0 0-.25.25Zm3.75 8.75h.5c.966 0 1.75.784 1.75 1.75v3a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1-.75-.75v-3c0-.966.784-1.75 1.75-1.75ZM6 5.25a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 6 5.25Zm.75 2.25h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM8 6.75A.75.75 0 0 1 8.75 6h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 8 6.75ZM8.75 3h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM8 9.75A.75.75 0 0 1 8.75 9h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 8 9.75Zm-1 2.5v2.25h1v-2.25a.25.25 0 0 0-.25-.25h-.5a.25.25 0 0 0-.25.25Z"></path></svg> zip”或“<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-file-zip" aria-label="file-zip" role="img"><path d="M3.5 1.75v11.5c0 .09.048.173.126.217a.75.75 0 0 1-.752 1.298A1.748 1.748 0 0 1 2 13.25V1.75C2 .784 2.784 0 3.75 0h5.586c.464 0 .909.185 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 12.25 15h-.5a.75.75 0 0 1 0-1.5h.5a.25.25 0 0 0 .25-.25V4.664a.25.25 0 0 0-.073-.177L9.513 1.573a.25.25 0 0 0-.177-.073H7.25a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5h-3a.25.25 0 0 0-.25.25Zm3.75 8.75h.5c.966 0 1.75.784 1.75 1.75v3a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1-.75-.75v-3c0-.966.784-1.75 1.75-1.75ZM6 5.25a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 6 5.25Zm.75 2.25h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM8 6.75A.75.75 0 0 1 8.75 6h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 8 6.75ZM8.75 3h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM8 9.75A.75.75 0 0 1 8.75 9h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 8 9.75Zm-1 2.5v2.25h1v-2.25a.25.25 0 0 0-.25-.25h-.5a.25.25 0 0 0-.25.25Z"></path></svg> tar.gz”。\*\*\*\*\*\*\*\*

   ![存储库的“标记”页面的屏幕截图。 zip 和 tar.gz 选项均以深橙色框突出显示。](/assets/images/help/repository/tags-download-zip-targz.png)

## 源代码存档链接网址

每个存储库的特定 URL 都提供源代码存档。 例如，来看看 `github/codeql` 存储库。 下载分支、标记或特定提交 ID 有不同的 URL。

| 存档类型                                                                                                                                        | 示例                   | URL |
| ------------------------------------------------------------------------------------------------------------------------------------------- | -------------------- | --- |
| 分支                                                                                                                                          | `main`               |     |
| \[                                                                                                                                          |                      |     |
| <https://github.com/github/codeql/archive/refs/>                                                                                            |                      |     |
| **heads/main**.tar.gz]\(<https://github.com/github/codeql/archive/refs/heads/main.tar.gz>)                                                  |                      |     |
| 标记                                                                                                                                          | `codeql-cli/v2.12.0` |     |
| \[                                                                                                                                          |                      |     |
| <https://github.com/github/codeql/archive/refs/>                                                                                            |                      |     |
| **tags/codeql-cli/v2.12.0**.zip]\(<https://github.com/github/codeql/archive/refs/tags/codeql-cli/v2.12.0.zip>)                              |                      |     |
| 提交                                                                                                                                          | `aef66c4`            |     |
| \[                                                                                                                                          |                      |     |
| <https://github.com/github/codeql/archive/>                                                                                                 |                      |     |
| **aef66c462abe817e33aad91d97aa782a1e2ad2c7**.zip]\(<https://github.com/github/codeql/archive/aef66c462abe817e33aad91d97aa782a1e2ad2c7.zip>) |                      |     |

> \[!NOTE]
> 可以在上述 URL 中分别使用 `.zip` 或 `.tar.gz` 来请求 zipball 或 tarball。

## 源代码存档的稳定性

源代码存档是根据请求生成的，缓存一段时间，然后被删除。 如果将来有人再次请求相同的存档，它就会被重新生成。 请务必了解 GitHub 对源代码存档所做的保证。

* 如果提交 ID 仍位于存储库中且存储库的名称未更改，则提交 ID 的存档在请求时始终具有相同的文件内容。
* 由于分支和标记可以移动到不同的提交 ID，因此将来下载的存档内容可能与以前下载的同一分支或标记的存档内容有所不同。 假设分支或标记仍然指向相同的提交 ID，那么，它将具有相同的文件内容。
* 用于生成 zipball 或 tarball 的确切压缩设置可能会随时间而发生更改。 如果分支或标记保持不变，提取的内容也不会更改，但外部压缩存档的字节布局可能会不同。 GitHub 将在更改压缩设置之前至少提前六个月发出通知。
* 存储库的名称是存档中的目录结构的一部分。 因此，如果存储库名称更改，根目录名称也会更改。

如果你依赖于源代码存档的稳定性来实现可重现性（用来确保始终在存档内获取相同的文件），我们建议使用[存档 REST API](/zh/rest/repos/contents#download-a-repository-archive-tar) 与 `:ref` 的提交 ID。 使用提交 ID 可确保始终在存档内获得相同的文件内容，并且不受存储库重写标记或移动分支头的影响。

如果你依赖于存档的稳定性来确保安全（例如：确保不会尝试解压缩恶意制作的文件），我们建议使用版本而不是源下载。 有关详细信息，请参阅“[关于发行版](/zh/repositories/releasing-projects-on-github/about-releases)”。

你可以使用类似于[此第三方 GitHub 操作](https://github.com/softprops/action-gh-release)的方法，创建这些文件并在发布流程中进行推送。 之后可以使用[发布资产 REST API](/zh/rest/releases/assets#get-a-release-asset) 来检索它们。