【发布时间】:2021-05-07 07:32:46
【问题描述】:
鉴于以下模式,其中发布到 master 的修补程序 (D) 合并回测试分支,我们需要找到一种方法,在 test 和 master 之间存在差异,以获得 (B)、(C) 和 (D3 )。
hotfix /------------D
/ \
master ---A----------------D2--------
\ \
test \----B----C----D3------
每个 git diff(bot 2/3 点)总是返回 B 和 C,但不返回 D3,所以我们以 git log 序列结束:
结帐测试:
git log --pretty=format: --name-only HEAD...$( git log --format=%H origin/master..HEAD | tail -1 )^ | sort -u -k1,1
这个想法是检索自公共锚点(B、C、D3)以来的所有提交并检索每个更改的资源。 这“似乎”可行,但我们也许有更好的方法来完成我们的任务。
这种方法有很多缺点:
- 我们放松了对差异过滤器的控制:我们还需要从检索中删除任何已删除的资源
- 即使未更改,也会检索每个“还原”的资源
有没有更好的解决方案?
尝试更好地解释问题
要求:生成一个部署包,在 master 和 test 之间更改资源。资源必须被检索、打包并安装到多个环境中。
T0 : git diff master...test 从 C、B 检索每个资源。然后将带有资源的捆绑包安装到 ENV1 中
hotfix
master ---A--------------
\
test \----B----C
T2 : git diff master...test 从 C、B 但不是 D3 检索每个资源。 Bundle 不会包含 D3 资源,也不会更新 ENV1。
hotfix /------------D
/ \
master ---A----------------D2--------
\ \
test \----B----C----D3------
该语句必须检索测试中的资源而不是 master 上的资源,还要检索从 master 合并回来的资源以保持 ENV1 更新。 对齐 ENV1 的唯一方法是在测试中提交/事件
提前致谢
【问题讨论】: