如何为CI组织两个git回购

如何为CI组织两个git回购,git,go,module,continuous-integration,Git,Go,Module,Continuous Integration,我有一个git repo核心和项目repo,即使用核心作为依赖项。若我想更改核心模块的一些API及其在项目中的用法,我将在gitlab中创建两个单独的pull请求。但我们的持续集成系统在核心合并之前无法测试项目,若核心包含API变更。 我想要的是,项目测试将在核心的同一分支上进行的可能性。例如,如果我在project和core中创建了feature-42分支,那么项目测试将从core的feature-42分支开始 现在,我们有机会在go模块中移动,但很难始终在go.mod文件中指定直接提交散列。

我有一个git repo核心和项目repo,即使用核心作为依赖项。若我想更改核心模块的一些API及其在项目中的用法,我将在gitlab中创建两个单独的pull请求。但我们的持续集成系统在核心合并之前无法测试项目,若核心包含API变更。 我想要的是,项目测试将在核心的同一分支上进行的可能性。例如,如果我在project和core中创建了feature-42分支,那么项目测试将从core的feature-42分支开始

现在,我们有机会在go模块中移动,但很难始终在go.mod文件中指定直接提交散列。有许多可能会出错。 看起来我们应该使用monorepo,但考虑到我们没有非常合格的开发人员,我担心我们的项目可能会变成一个庞然大物

我们如何组织我们的持续整合

另外,我们不想在版本中使用标记,因为人们并行工作,并且很难始终保持非递减版本。

您的go.mod文件可以指定依赖项的显式提交-即使提交在分支上!-只要提交已实际发布到该存储库

所以,如果您在核心的feature-42分支上发布了一个特性,并希望在项目中使用它,那么您可以运行go-getcore@feature-42,您应该得到一个包含该功能的版本

go命令通常知道如何将分支名称解析为特定的提交,因此不需要显式地命名提交哈希。但是,go.mod文件将记录一个带有已解析哈希的文件

作为另一种选择,您可以将go mod edit-replace命令添加到CI系统中,让它显式地将所选版本的核心模块替换为有问题的分支


尽管如此,对于您来说,切换到monorepo可能会更简单,可能在repo根目录下有一个go.mod文件,以便在锁定步骤中对所有内容进行版本控制。根据我的经验,避免Go项目变成一个整体的最佳方法是使用,而不是使用单独的存储库。

有很多方法可以解决这个问题,这使得它过于宽泛,无法在这里充分回答。此外,它们都与围棋无关,这意味着如果你在谷歌上找到了任何语言的解决方案,你可以调整它以适应围棋。你应该做些调查。阅读关于不同方法的博客文章和论坛讨论,并选择一种您喜欢的方法。通常我会使用git子模块,但由于gopath和go组织的原因,这不是一种可行的方法,因此,我不同意您的看法。您可以将子模块安装在供应商的下面或链接到供应商的下面,所以你的不同意实际上是错误的。尽管我强烈反对子模块做这样的事情。上面的评论似乎混淆了Go模块和Git子模块。问题显然是关于前者,而不是后者。