【问题标题】:Best Git strategy for testing different client and server versions测试不同客户端和服务器版本的最佳 Git 策略
【发布时间】:2012-10-30 02:58:15
【问题描述】:

我希望能够为 Java 客户端/服务器运行集成测试(使用嵌入式码头)。此外,我希望能够在集成测试期间混合匹配不同的服务器和客户端源代码版本。

我想知道完成此任务的最佳 git 或 maven 版本策略是什么:

  1. 客户端和服务端使用同一个 git 存储库,很难检查各种服务器版本的代码并针对各种客户端版本的代码进行测试。

  2. 使用单独的 git 存储库(带有客户端 src 和集成测试的第一个存储库,带有服务器 src 的第二个存储库) - 它还需要检出两个存储库以运行集成测试,并假设它们之间的相对路径。

  3. 仅针对 maven 版本的服务器 WAR 测试客户端 src 代码,可能会导致开发人员针对与签出的服务器源代码不匹配的服务器 WAR 运行测试的诚实错误。

    李>

【问题讨论】:

  • 你知道 git bisect 命令吗?
  • 如何使用 git bisect 命令运行特定的服务器版本和特定的客户端版本?

标签: git testing maven versioning


【解决方案1】:

我建议保持过程简单,因为您已经有足够的变量在进行,而不会引入潜在的 git 管理问题。为此,我会避免使用子模块。相反,我会为开发人员提供明确的分支/标签配对,以测试您的测试矩阵中的客户端和服务器存储库。

使用标签,以便您以后可以更轻松地在矩阵中重复使用和重复相同的测试,尤其是在第一轮修复错误之后。

简而言之,我推荐您的解决方案 #2。相对路径假设优于子模块引入的潜在混淆。

【讨论】:

    【解决方案2】:

    我将指出第三个挑战:集成测试可能存在错误,因此您可能希望独立控制测试版本。

    我使用 git 的子模块功能来协调多个存储库。创建一个新的存储库,其中将包含对客户端存储库和服务器存储库的引用。你也可以在这个父仓库中放置一个基本的测试驱动程序。

    当新的开发者加入团队时,他们可以克隆这个父仓库,然后运行git submodule update --init 来克隆客户端和服务器子模块。这样他们就可以像其他人一样设置任何相对路径。

    但是,我不喜欢让客户端 repo 假设服务器位于../server/。所以我处理这个问题的方法是让父 repo 将任何需要的路径传递给子模块。例如,您可以在运行的父 repo 中有一个 test.sh

    make -C client SERVER_PATH=$(pwd)/server test
    

    在您的情况下,您还可以将所有测试代码放在父仓库中。然后它可以安全地假设子模块的相对路径。

    这种安排的一个有趣的好处是:您可以创建记录特定版本组合的 git 提交,因为在子模块中签出的版本会在您提交到父 ​​repo 时记录。您可以使用它为已通过测试的版本组合创建分支或标签集合。

    【讨论】:

    • git 子模块如何与 git 新手公平?恐怕这会给开发人员增加太多的复杂性。对于 90% 的开发人员来说,它是一次性设置(他们只是想假设每个子存储库都是一个单独的存储库),还是他们应该知道子模块?
    • 我与其他四名开发人员组成的团队一起完成了这项工作,从那以后,其他人来来去去。在大多数情况下,它是一次性设置:一旦他们运行git submodule update --init,他们就不必再考虑它了。必须使用我在上面构建的构建系统的开发人员遇到了更多麻烦,但您不必走那么远。 :-)(我已经发表了题为“为什么你不应该让我设计你的构建系统”的演讲,但收件人还是复制了我的设计......)
    • 您是如何克服子模块被提交而不是分支名称跟踪的问题的?运行“git submodule update”命令的流程是什么?
    • 至少对我们来说,通过提交跟踪子模块是一项功能,因为它准确记录了我们一起测试的版本。没有人喜欢子模块更新导致的“分离 HEAD”状态。我编写了一个脚本来为 HEAD 创建一个临时分支,将其重新设置在 master 上,checkout master,快进到 temp 分支,然后删除 temp 分支。这涵盖了我们遇到的最常见的事故,但即使这样也并不经常发生。
    猜你喜欢
    • 1970-01-01
    • 2015-02-28
    • 2015-06-25
    • 2011-09-06
    • 1970-01-01
    • 2012-09-15
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多