如何处理多个 Git 存储库
How to Handle Multiple Git Repositories
我在两个不同的独立系统上工作,我们将代码存储在 BitBucket (Git) 上。这两个不同的系统位于 BitBucket 上的两个不同的存储库中。让我们称它们为 'system1' 和 'system2'。每个存储库都遵循 GitFlow 和 master/develop/release 分支方案。
我们还有一个单独的存储库,其中包含 'system1' 和 'system2' 都使用的共享库。还有另一个存储库,其中包含 'system1' 和 'system2' 也使用的所有与网络相关的软件。
'system1' 和 'system2' 存储库各有一个构建脚本。构建脚本期望每个存储库都被克隆到同一目录级别。因此,例如,像这样:
~/system1
~/system2
~/shared_library
~/networking
构建脚本使用 git describe
标记每个构建。它使用每个存储库中 git describe
的输出来创建构建。因此,举个例子,system1
的构建信息如下所示:
SYSTEM1: 10.1.1
SHARED_LIBRARY: 10.1.1
NETWORKING: 10.1.1
所有这些软件都被捆绑并安装到带有 SYSTEM1 标签的目标机器上。
我遇到的问题是,如果 networking
发生变化,那么 system1
的内部版本号不会反映出来。例如,假设对 networking
进行了一次提交。 运行 构建脚本现在看起来像这样:
SYSTEM1: 10.1.1
SHARED_LIBRARY: 10.1.1
NETWORKING: 10.1.1-1
安装后,它看起来仍然像版本 10.1.1,尽管它不是(因为网络已更改)。
基本上,我需要更改我的方案,以便某些其他存储库中的更改反映在 system1
的 git describe
输出中。
我不确定如何完成此操作。
作为开始,如果依赖(网络)版本已更新但依赖(system1)版本未更新,那么检查版本更新并失败的构建时测试怎么样?然后您至少可以自动检测并手动解决过时的依赖版本。在您的网络增加但 system1 没有增加的示例中,在这种状态下构建 system1 时,测试将失败,因此构建也会失败。根据您的需要,实施测试可能就像检查任何依赖项中是否存在任何 -<commits>
(例如 -1
)后缀一样简单。或者像检查您的工件存储库以获取最新构建的工件版本一样复杂。精确的逻辑很大程度上取决于您的环境。
然后,作为可选的下一步,您可以移动到完全自动增加版本。不是在 BitBucket 中手动标记,而是让构建系统(或者甚至只是手动启动但以其他方式自动提升脚本)增加版本而不是手动设置它们。这个自动化解决方案可以做一些事情,比如从依赖(网络)到依赖(system1)自动级联版本增量。您可能会使用此类系统自动进行标记,例如在成功的构建上。我已经看到成功使用了这种方法的一部分。
可能还有一种解决方案可以更多地利用 git,但是在您的构建系统中自动执行某些版本检查或增量的一个好处是它可能会减少您的管道对您的实施的依赖技术选择(例如 git、npm、特定语言等)。
我在两个不同的独立系统上工作,我们将代码存储在 BitBucket (Git) 上。这两个不同的系统位于 BitBucket 上的两个不同的存储库中。让我们称它们为 'system1' 和 'system2'。每个存储库都遵循 GitFlow 和 master/develop/release 分支方案。
我们还有一个单独的存储库,其中包含 'system1' 和 'system2' 都使用的共享库。还有另一个存储库,其中包含 'system1' 和 'system2' 也使用的所有与网络相关的软件。
'system1' 和 'system2' 存储库各有一个构建脚本。构建脚本期望每个存储库都被克隆到同一目录级别。因此,例如,像这样:
~/system1
~/system2
~/shared_library
~/networking
构建脚本使用 git describe
标记每个构建。它使用每个存储库中 git describe
的输出来创建构建。因此,举个例子,system1
的构建信息如下所示:
SYSTEM1: 10.1.1
SHARED_LIBRARY: 10.1.1
NETWORKING: 10.1.1
所有这些软件都被捆绑并安装到带有 SYSTEM1 标签的目标机器上。
我遇到的问题是,如果 networking
发生变化,那么 system1
的内部版本号不会反映出来。例如,假设对 networking
进行了一次提交。 运行 构建脚本现在看起来像这样:
SYSTEM1: 10.1.1
SHARED_LIBRARY: 10.1.1
NETWORKING: 10.1.1-1
安装后,它看起来仍然像版本 10.1.1,尽管它不是(因为网络已更改)。
基本上,我需要更改我的方案,以便某些其他存储库中的更改反映在 system1
的 git describe
输出中。
我不确定如何完成此操作。
作为开始,如果依赖(网络)版本已更新但依赖(system1)版本未更新,那么检查版本更新并失败的构建时测试怎么样?然后您至少可以自动检测并手动解决过时的依赖版本。在您的网络增加但 system1 没有增加的示例中,在这种状态下构建 system1 时,测试将失败,因此构建也会失败。根据您的需要,实施测试可能就像检查任何依赖项中是否存在任何 -<commits>
(例如 -1
)后缀一样简单。或者像检查您的工件存储库以获取最新构建的工件版本一样复杂。精确的逻辑很大程度上取决于您的环境。
然后,作为可选的下一步,您可以移动到完全自动增加版本。不是在 BitBucket 中手动标记,而是让构建系统(或者甚至只是手动启动但以其他方式自动提升脚本)增加版本而不是手动设置它们。这个自动化解决方案可以做一些事情,比如从依赖(网络)到依赖(system1)自动级联版本增量。您可能会使用此类系统自动进行标记,例如在成功的构建上。我已经看到成功使用了这种方法的一部分。
可能还有一种解决方案可以更多地利用 git,但是在您的构建系统中自动执行某些版本检查或增量的一个好处是它可能会减少您的管道对您的实施的依赖技术选择(例如 git、npm、特定语言等)。