Git发布分支结束程序以在不合并的情况下进行验证

时间:2017-12-30 00:27:55

标签: git release-management

如何确保主线分支上存在发布分支上的所有更改(本例中为master)?

理想情况下,我们都有持续部署,从不需要发布分支。如果我们确实需要它们,我们需要知道如何检查对发布分支所做的所有必要更改是否使其返回到主线(在这种情况下为master)。

当我们创建发布分支时,我们:

  • 创建发布分支git checkout master -b release/0.0
  • 注意原点git log -n 1
  • 对master和cherry-pick -x
  • 进行更改
  • 某些问题需要公关或直接更改发布分支
  • 我们可能不希望将所有这些更改合并回主分支

最后,我们会有一些变化,这些变化会将他们的出处追溯到掌握,而另一些则不会。鉴于,我们可能不希望整个集合回主,合并不是一个选项。

我们需要一种方法让团队审核变更,以确保我们在主人身上得到所有必需的更改。特别是如果我们有发布分支的bugfix或hotfix分支。

如果我们使用diff或运行测试合并,我们会看到发布分支上的所有流失,如果我们处于并发开发模式,可能会看到对master的更改。

在降低噪音和专注于实际变化的过程中,需要采取樱桃选择的方法是这种方法:

  • 从发布分支原点git checkout <release-branch-origin-commit-id> -b squash-release-0.0
  • 创建一个squash-branch
  • 将发布分支上的所有更改压缩为单个提交git merge --squash release/0.0
  • 将这些更改作为单个提交提交
  • 从主人git checkout master -b closout-release-0.0
  • 创建一个closeout-validation分支
  • 樱桃挑选更改而不提交git cherry-pick --no-commit <squashbranch single commit sha>
  • 查看差异和冲突

当我们这样做时,我们发现任何来回恢复都会被平滑掉,并且差异/冲突是少量文件。我们仍然必须查找文件并检查注释以确定正确的操作过程,但我们这样做的范围要小得多。

如果您确实需要使用长期发布分支机构或维护分支机构,那么如何确保应该传播到主数据库和将来版本的更改是否会这样做?

1 个答案:

答案 0 :(得分:0)

最好的选择似乎是 - 完全避免问题只能通过挑选来发布分支机构。如果这是不可能的,那么squashbranch方法似乎运作得相当好

    page.headerData.3 = COA
    page.headerData.3 {
    4 = TEXT
    4.value = <meta property="og:type" content="article">

    10 = IMG_RESOURCE
    10.file {
        import.data = levelmedia:-1, slide
        treatIdAsReference = 1
        import.listNum = 0
        width=1200
    }
    10.stdWrap.dataWrap = <meta property="og:image" content="{getIndpEnv:TYPO3_REQUEST_HOST}/|" />
    10.stdWrap.insertData = 1

    20 = TEXT
    20 {
        typolink.parameter.data = TSFE:id
        typolink.forceAbsoluteUrl = 1
        typolink.returnLast = url
        wrap = <meta property="og:url" content="|" />
    }

    30 = TEXT
    30.value = Lightningsoul
    30.wrap = <meta property="og:site_name" content="|" />

    40 = TEXT
    40.field = title
    40.wrap = <meta property="og:title" content=" |&nbsp; - renoi.de" />
    40.stdWrap.insertData = 1

    50 = TEXT
    50.field = description
    50.ifEmpty= Renoi ist ein Unternehmen, das Weblösungen wie bspw. Typo3, Wordpress oder Drupal und deren Einrichtung und Weiterentwicklung anbietet.
    50.wrap = <meta property="og:description" content="|" />

}