Git 开发与发布分支最佳实践

2024-01-06

我从每个冲刺开始就一直在监控两个分支 -Release and Master.

Master分支是开发人员创建新分支(特定于任务)、实施更改并创建合并到主分支中的拉取请求的地方。

Release分支是特定于冲刺的,始终可提交给生产。我们只合并致力于以下的分支Master并经核实QA进入发布分支。

当我们提交时,这种方法最适合我们Release定期实施和验证特定功能,因此我们确切地知道下一个版本会发生什么。

这个问题是继续避免将主分支合并到开发分支中 https://stackoverflow.com/questions/29335603/avoid-merging-master-into-development-branch and git 合并仅分支特定提交 https://stackoverflow.com/questions/28742412/git-merging-only-branch-specific-commits

我想在一行中

“确保只有经过 QA 验证的开发分支才能进入下一个候选版本。”

我考虑过使用之前讨论中的以下工作流程选项;

git pull --rebase master taskA
//Work on taskA branch, do multiple commits, and also execute this command multiple times whenever required;
At time of Rebasing taskA to Master
git checkout taskA
git rebase -i origin/Master // Remove any commits that are not belongs to taskA.
git checkout origin/master
git merge taskA

此工作流程将为我提供基于以下内容的每个分支的清晰历史记录Master这将由 QA 进行验证。我可以轻松地将经过验证的分支重新设置为Release branch.

我的方向正确吗?这个 git-flow 效果最好吗?有没有更好的方法来实现我想要实现的目标?


这是你的问题。

我们只将提交给 Master 并由 QA 验证的分支合并到 Release 分支中。

这意味着您必须集成功能分支twice。一次进入Master,再次进入Release。您正在努力解决一个明显的问题:如何确保集成到 Master 中的所有内容都集成到 Release 中?由于功能是建立在其他功能之上的,因此它们必须采用类似的顺序。

不要试图解决这个问题。这既困难又混乱,你必须时刻小心。最好有一个更万无一失的流程。让我们回到你既定的目标。

确保仅通过 QA 验证的开发分支转到下一个候选版本。

(强调我的)这并不是真正的目标,而是实现目标的解决方案。你真正的目标是什么?这个怎么样...

确保唯一经过 QA 验证的代码进入下一个版本。

看看我在那里做了什么?质量发布不关心代码来自哪里,它关心正在发布的代码的状态。您需要确保发布时不包含任何未经 QA 检查的内容。为此,我建议将您的工作流程更改为Gitflow 工作流程 https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow。事情是这样的。

  1. 开发人员有任务要做。
  2. 开发商分行master,我们称之为task.
  3. Developer works on task.
    1. 开发人员编写自己的单元测试task.
  4. Developer gets updates from master when they need them.
    1. 他们可以变基或者可以合并,这并不重要。
  5. Developer finishes task.
    1. 开发人员进行了最终更新master.
    2. 开发人员确保他们的单元测试和所有回归测试都通过。
    3. Optional开发商提交task到 QA 进行验收测试。
    4. 开发商并入master.
    5. 开发者删除task.

因为开发人员正在编写自己的单元测试,所以此时您已经了解了所有内容master已经过单元和集成测试。一些重要或棘手的功能已在 5.3 中进行了验收测试,但通常此时您不会为此打扰 QA。

对于健康的工作流程非常重要master始终保持高品质状态。这意味着开发人员必须参与测试过程。没有必要把它扔给 QA 并希望得到最好的结果,QA 应该把时间花在验收和黑盒测试上,以发现开发人员不会想到的错误。Master 永远是你的 Release Candidate.

当您决定准备好发布时...

  1. Match the testing branch to master.
    1. 你可以合并master, 重新建立基础master或删除并重新创建testing分支。它们各自都有一些显而易见的优点和缺点。
  2. QA gets a list of all changes which have been added since the last release.
    1. 他们可以从问题跟踪器中获取此信息。
    2. If testing已重新设定基础master他们能git log并查看自上次版本以来的合并提交。
  3. 让 QA 验收测试变更列表testing.

让我们在此暂停并解释为什么步骤 3 很重要。 QA 是用户看到之前的最后一行。 QA 测试用户实际使用的内容非常重要。用户将看到集成的代码库,而不是孤立工作的各个功能分支,因此 QA 应该将精力集中在集成版本上。

功能在单独使用时可以很好地工作,但当它们组合在一起时就会出现奇怪的错误。一个简单的示例是将项目的编码从 ASCII 更改为 Unicode 的功能。开发人员尽职尽责地将整个系统更改为使用 Unicode,这非常棒。与此同时,另一位开发人员正在处理一项任务,其中包括更改一些视图。他们没有考虑字符编码,他们用 ASCII 假设来写下他们的观点。开发人员对于测试视图感到非常恐惧。单独测试,但功能分支工作正常。结合在一起,QA 可以捕捉到仍然使用错误字符编码的视图。

继续。

  1. QA finds bugs and reports them back to the developers.
    1. 开发者补丁testing(小事直接做,大事放在分支)
    2. Optional开发人员精心挑选这些修复程序master。它是可选的,因为稍后会处理它。
  2. QA declares testing ready for release.
    1. release is git merge --ff-only testing。如果它没有快进,则您有修补程序release需要向后移植。
    2. Tag release带有版本号。
    3. release被推向生产。
  3. testing被合并回master.

最后一步确保在 QA 过程中发现的任何错误补丁都将合并回master。这就是为什么我之前说过如何重置并不重要testing,它将全部合并回master anyway.

你有它。确保所有发布的代码都经过质量检查的流程。除了为质量检查开发变更日志之外,没有在必要时仔细跟踪集成的内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Git 开发与发布分支最佳实践 的相关文章

  • 在 Windows 上为 Bitbucket 设置 SSH 密钥

    首先 我对 git repos 和命令行绝对是菜鸟 我在 Bitbucket 上有仓库 我基本上希望能够通过 gitbash 推送到存储库 而无需每次输入密码 我拥有的 Bitbucket 上的存储库已设置好代码 克隆存储库的本地目录 通过
  • 如何在 Git 中重命名带注释的标签

    如何在 Git 中重命名现有的带注释的标签 我在存储库上有近一百个代表版本号的标签 每个标签都注释有有关该版本更改内容的有用描述 我想更改用于这些标签的命名样式 记录标签消息 删除标签 然后使用旧消息和新名称重新创建它 这对于手动为近一百个
  • 如何为Git存储库组织和设置镜像备份服务器?

    我正在将一些 svn 存储库移至 Git 所以 我基本上尝试做的是 设置一台带有裸 Git 存储库的服务器 我将从中拉取和推送到该存储库 为第一台服务器上的所有存储库设置一些备份服务器 所以 假设我的服务器上有一个目录 例如 HOME gi
  • git jenkins 中未找到存储库

    我正在使用 jenkins 2 64 并安装了最新的插件 我试图在 jenkins 中设置 git 存储库并给出凭据 但给出错误无法连接存储库 状态代码为 128 Cloning repository https github com so
  • 如何将Github中的develop分支设置为默认分支而不是master?

    我知道这可以在存储库的管理页面上完成 可以在那里设置另一个默认分支 这就是这个问题的答案 但我发现 也许是一个错误 以下内容 如果你的master分支和develop分支完全相同 那么git克隆将不会克隆默认的 develop 分支 但仍然
  • 无法重新索引 magento 1.7.0.2 卡在“处理”上

    我的 magento 索引中有九分之七停留在 处理 状态 我需要重新索引它们才能正确显示我的网站 我通过 ftp 访问我的 var locks 并删除其中的两个文件 但是当我刷新索引页时 它们只是重新出现 index process 3 l
  • 如何在 git 中仅获取唯一的提交

    我想获取所有分支中唯一提交的列表 但是如果有人在分支中使用 rebase 则会提交松散的父项 如何解决这个问题呢 如何获取进行独特更改的提交列表 I use git log oneline graph cherry pick left ri
  • Github 操作 - 错误:进程已完成,退出代码为 1

    我正在尝试设置 github 操作来部署我的应用程序 My bash 启动部署过程的脚本如下所示 bin sh set e vendor bin phpunit git push true git checkout production g
  • git:复制一个版本来玩一下

    在开发应用程序时 我希望在某个时候拥有一份单独的工作副本 以便尝试进行一些更改 这些更改并不意味着要进行 只是玩玩 尝试各种可能性 是什么 best 如何做到这一点 我发现了以下可能性 但想得到比我更有 git 经验的人的建议 我可以用gi
  • 如何在 GitHub 中创建嵌套存储库?

    我可以通过创建一个存储库https github com https github com say repo 并有 https github com username repo git 如何创建另一个存储库 例如sub repo 置于rep
  • 如何运行“git status”并获取文件名

    如何运行 git status 并只获取文件名而不是长相对路径 的输出git status porcelain旨在易于在脚本中解析 输出完整路径而不是相对路径 无论当前目录位于树中的位置 每行输出由git status porcelain有
  • GIT 从特定标签拉取/获取

    有没有办法从存储库中的特定标签中提取 获取代码 我知道克隆后 我可以签出标签 但是否可以在拉取期间指定标签 在 ClearCase 中 我可以重新设置或交付特定的代码基线 有没有一种方法可以使用 git 标签 类似于将代码拉 推到指定标签
  • 两个目录中相同文件的 Git Diff 总是会导致“重命名”

    git diff no index no prefix summary U4000 目录1 目录2 这按预期工作 因为它返回两个目录之间所有文件的差异 添加的文件按预期输出 删除的文件也会产生预期的 diff 输出 但是 由于 diff 将
  • 如何在不下载文件对象的情况下进行 git 克隆

    是否可以下载所有提交但不能下载文件本身 我想运行 bisect 但从构建服务器下载版本而不是自己编译 当你跑步时git bisect你可以提供 no checkout如果您不想为每次迭代签出新的工作树 请作为参数 同样适用于git clon
  • 如何克隆 bitbucket 存储库?

    一段时间后重新开始工作 我似乎不知道如何克隆 bitbucket 存储库 知道为什么我收到 未找到 错误吗 git clone verbose https bitbucket org helllamer mod openid Cloning
  • 如何删除所有意外添加到git系统的本地文件

    我是 git 系统的新手 我可能犯了一个错误 将我所有的本地文件集成到 git 系统中 当我说出现以下错误时 我使用 vs代码编辑器 并放弃所有更改 Git fatal You are on a branch yet to be born
  • 将 git 设置为始终提示输入凭据

    由于一些专门的硬件 我们有一台与几个开发人员共享的机器 我希望 git 提交和推送始终提示输入凭据 我尝试过在 SO 上找到的一些修复 包括git config global unset credential helper以及编辑配置以包括
  • svn diff 或 git diff 中带有 at 符号的“@@...@@”元行是什么意思?

    当我使用svn diff or git diff它显示如下行 1 5 1 9 他们的意思是什么 这些称为 c hunk 标头并包含范围信息 它们周围有双标志 它们的格式如下 l s l s where l是起始行号并且s是 c hunk 应
  • git - 奇怪的分支合并错误,我不知道如何解决

    当我 git status 时 我收到以下错误消息 On branch master Your branch and origin master have diverged and have 1 and 2 different commit
  • gitk 无法在 macOS 10.14 (Mojave) 上启动

    当我尝试在 macOS Mojave 10 14 4 上运行 gitk 时 出现以下错误 Error in startup script file System Library ScriptingDefinitions CocoaStand

随机推荐