【发布时间】:2020-12-22 19:59:51
【问题描述】:
关键点: 我想确保在创建软件版本的步骤中没有遗漏任何提交和更改,特别是如果某些提交由于之前的测试而被精心挑选或重新设置基准。
编辑:很明显——最终——人类必须判断提交是否正确。但是有一个未包含的提交列表会有所帮助,我希望从 git 中得到它。
我们尝试遵循Git-Flow 工作流程来开发中小型(几个 10k LOC)嵌入式项目。为此,核心团队中有 5 人。我们有一个 Bitbucket/Jira 后端来跟踪问题和审查拉取请求。
我们有几个分支:
-
master:发布并测试固件 -
develop: 主集成分支,这里的代码可编译和测试,但尚未发布 -
feature/...: 很多功能分支 -
bugfix/...: 几个错误修复分支 -
release/...:发布准备,开发和主控之间的“安全”屏障,可以进行最终调整和最终测试
理想情况下,为一张问题单创建一个分支,使用一种命名方案来包含问题的关键和描述,以便进行适当的跟踪和追溯。
想象一下这种情况:
-
在 Jira 中创建了一个 id 为“FW-5”的功能请求票“添加 FIR 过滤器模块”,并导致相应的功能分支“feature/FW-5-add-fir-filter-filter-module” git 存储库。开发进展顺利,模块即将准备就绪。可能已经开放了一个拉取请求,以让同事审查此模块。
-
然后第二张票进来了:“添加 10 Hz 低通滤波器”。这显然取决于 FW-5,它尚未进入开发阶段,因为拉取请求尚未经过审查。这意味着,我们必须从“feature/FW-5-add-fir-filter-filter-module”分支而不是从develop分支。
-
经理进来并希望及时释放当前状态,包括 10 Hz 滤波器。一定是现在,因为偶然出现了测试机器中的一个时间段。所以我们需要从开发中编译一个预发布版本(因为同时可以集成一些其他的东西)和我们的两个特性分支。我将从开发开始,从那里创建一个发布分支,通过
git rebase集成两个功能分支,最终修复冲突,增加版本号并将其闪存到硬件。 -
一切顺利,测试成功。预发布保持原样,可能会进行进一步的开发。然后是“真正”发布的时候了。从第 3 步我们知道,手工制作的预发行版运行良好。然而,这两个功能拉取请求必须集成才能正确开发,就像我们在预发布中所做的那样。包括以相同的方式修复最终的合并冲突。这就是我正在努力解决的问题。
问题: 如何确保在预发布中所做的更改以完全相同的方式集成到发布中?我无法 1:1 比较文件内容,因为与此同时,develop 已经进一步发展,并且由于 develop 中的进一步提交,文件可能看起来有所不同。
我读过关于 git branch --no-merged 和一些 git rev-list 的想法,但这些都是在提交 SHA 上运行的。因此,预发布版本中重新设置的部分将显示为未集成。
git cherry -v 是正确的方法吗?它说(见:https://linux.die.net/man/1/git-cherry)
分支点之间的每个提交的变更集(或“差异”)与分支点和 .将提交与从 git patch-id 程序获得的补丁 id 进行比较。
...
因为 git cherry 比较的是变更集而不是提交 id (sha1),所以您可以使用 git cherry 来确定您在本地进行的提交是否已在不同的提交 id 下应用。例如,如果您通过电子邮件提供补丁而不是直接推送或拉取提交,就会发生这种情况。
这听起来很棒,尤其是最后一点,但我不确定它是否理解正确。
如果还没有集成任何应该成为发布的一部分的东西,那么这是找出正确的工具吗?如果是,为什么我发现关于git cherry 的信息这么少?这是一个杀手锏。
如果没有 - 缺失点在哪里?什么是合并冲突:)
后续问题
- 从父功能分支(第 2 步)分支是否正常或有点臭?
- 3) 中的变基是正确的方法吗?还是您更愿意使用合并或樱桃挑选?
- 子拉取请求应该合并回父级还是直接开发?
- 您会看到哪些替代方案?我知道最好先完成拉取请求并正确集成以进行开发,但有时这不起作用。
- 您的工作流程中是否允许依赖功能分支?集成拉取请求后,您会执行命令吗?
- 如果允许依赖特性分支,您还必须允许这些特性分支的变基以摆脱子级中的父提交,对吗?在父级集成后,您必须将子级重新定位到开发之上。或者您是否首先将子级合并回其父级,这意味着必须首先关闭所有子级拉取请求。
谢谢!
【问题讨论】:
-
为什么你认为
ensure that no commits and changes are missed是一个Git任务?首先,我认为这是一个“项目管理”问题?可能有一些内容只在一次提交中是必需的,但在“最终”版本中不需要……人类(负责人)应该判断吗? -
克里斯托夫,你说得对,这最终是人类的任务。但是 Git 应该能够帮助给我一个我必须检查的提交/更改列表,不是吗?我认为这是版本控制系统的要点之一?
标签: git dependencies git-flow release-management feature-branch