繁体   English   中英

具有 go 个依赖包的可重现版本

[英]Reproducible releases with go dependent packages

我正在阅读“如何编写 Go 代码”教程,我不禁想知道如何建立稳定的工作流程。

自然地,我的代码将处于源代码控制之下,比如 Git。现在我希望能够执行以下操作:

  • 构建我的项目的可执行文件 - 并确保对于给定的 Git 版本,可执行文件将构建相同的版本。
  • 为我的项目运行持续构建,以便在每次提交时激活。 我需要确保连续构建所做的任何事情都可以在我的工作站上重现。
  • 创建我的项目的版本。 我需要知道,如果我从我的代码的相同 git 版本再次执行此操作,则可以重新创建一个版本。

Go 为它提供了“go get”工具——但这就是我感到困惑的地方。 应该支持这个的工具,“go get”,设置依赖包的源代码控制 repo。 这给了我以下问题:

  1. 我无法将依赖包置于我自己的源代码管理之下。 这意味着如果我和我的合作者之间,或者我和我的持续构建系统之间存在任何环境差异,我们将很难找出这些差异。
  2. 如果 .network 出现故障,我将无法从头开始构建我的代码。 或者,换句话说,我的持续构建系统每次构建发布时都必须访问所有这些外部服务器。 这可能很脆弱,甚至不是我愿意让外界知道的事情。
  3. Go 定义了将 package 版本与基本语言的版本同步的约定,但不能保证 package 作者将遵循该约定。 如果他们不这样做,一个干净的工作区将选择一个可能被破坏的任意版本。
  4. 如果我依赖的项目被放弃,我可能会失去构建程序的能力。

我可以通过手动导入依赖项目的代码而不使用“go get”来解决这些问题——但是,我避免使用专门为该用途设计和推广的语言的工具。

有什么建议么? 我错过了什么吗?

go 得到刚刚使用分布式版本控制系统的源代码库的使用。 它将使用 repo 的本地副本。 我将尝试在这里解决您的每一个问题。

  1. 如果需要,您当然可以在本地仓库中进行修改并在那里提交。
  2. go get 使用它首先构建的本地存储库,除非您明确告诉它更新。
  3. go get 不会吹走存储库,它仍然会在那里。 由于 go 了解的所有源代码控制系统都是分布式源代码控制系统,因此您没有理由不能自己保持项目的分支。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM