{"meta":{"title":"不可变版本","intro":"了解不可变版本以及它们如何帮助维护软件供应链的完整性。","product":"安全性和代码质量","breadcrumbs":[{"href":"/zh/enterprise-cloud@latest/code-security","title":"安全性和代码质量"},{"href":"/zh/enterprise-cloud@latest/code-security/concepts","title":"Concepts"},{"href":"/zh/enterprise-cloud@latest/code-security/concepts/supply-chain-security","title":"供应链安全"},{"href":"/zh/enterprise-cloud@latest/code-security/concepts/supply-chain-security/immutable-releases","title":"不可变版本"}],"documentType":"article"},"body":"# 不可变版本\n\n了解不可变版本以及它们如何帮助维护软件供应链的完整性。\n\n**不可变版本**是指发布后资产和相关 Git 标签无法更改的版本。 这种版本的使用通过阻止供应链攻击来提高安全性。 攻击者无法：\n\n* 将漏洞或恶意软件注入当前项目版本。\n* 对可能会中断开发人员工作流的资产和标记进行更改。\n\n## 不可变版本保护的内容\n\n启用不可变版本时，将强制实施以下保护：\n\n* **无法移动 Git 标记**：发布不可变版本后，其关联的 Git 标记被锁定到特定提交，无法更改，且在发布存在时无法删除。 如果删除不可变版本，则可以删除标记，但不能重复使用相同的标记名称。\n* **无法修改或删除发布资产**：附加到发布的所有文件（如二进制文件和存档）均受到修改或删除的保护。\n\n此外，创建不可变版本会自动生成发布证明，该证明是包含发布标签、提交 SHA 和发布资产的加密可验证发布记录\\*\\*\\*\\*。 使用者可以使用此证明来确保它们使用的发布和项目与发布的 GitHub 版本完全匹配。\n\n> \\[!NOTE]\n> 不可变版本包括针对存储库复活攻击的保护。 即使删除存储库并创建具有相同名称的新存储库，也不能重复使用与原始存储库中不可变版本关联的标记。\n\n如果发布不可变，则发布页上的标题下方会显示 <svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-lock\" aria-label=\"lock icon\" role=\"img\"><path d=\"M4 4a4 4 0 0 1 8 0v2h.25c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 12.25 15h-8.5A1.75 1.75 0 0 1 2 13.25v-5.5C2 6.784 2.784 6 3.75 6H4Zm8.25 3.5h-8.5a.25.25 0 0 0-.25.25v5.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25ZM10.5 6V4a2.5 2.5 0 1 0-5 0v2Z\"></path></svg>**“不可变**”。\n\n## 发布不可变版本的最佳做法\n\n建议使用以下工作流发布不可变版本。\n\n1. 将版本创建为草稿。\n2. 将所有关联资产附加到草稿版本中。\n3. 发布草稿版本。\n\n这确保在版本变为不可变之前所有资产都已到位，避免了因不可变限制而需要绕行的问题。\n\n## 后续步骤\n\n要了解如何为仓库或组织启用不可变版本，请参阅 [阻止对版本进行更改](/zh/enterprise-cloud@latest/code-security/how-tos/secure-your-supply-chain/establish-provenance-and-integrity/prevent-release-changes)。\n\n要了解如何确保版本和本地资产未发生更改，请参阅 [验证版本的完整性](/zh/enterprise-cloud@latest/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/verify-release-integrity)。"}