使用merge或rebase维护部署分支

时间:2014-10-30 15:39:57

标签: git deployment merge branch rebase

我使用AWS托管,这意味着我无法使用环境变量来控制我的生产和暂存部署。因此,我被迫使用单独的分支进行部署,并且想知道是否有最佳实践方法来维护它们?

如果我将更改合并到我的生产分支中,则包含我的生产设置的提交将在分支历史记录中丢失,从而使调整这些设置变得更加困难。

但是我已经读过你不应该在这种情况下使用rebase,因为它会使回滚更改变得更加困难。

4 个答案:

答案 0 :(得分:5)

我在最近的项目中实施git也遇到了很多挑战。经过太多的谷歌搜索,我找到了这个博客,这是一个很好的维护git分支模型的方法。

A successful Git branching model enter image description here 中央仓库拥有两个主要分支,具有无限的生命周期:

  • 主人
  • 开发

每个Git用户都应熟悉原始分支。与主分支并行存在另一个名为develop的分支。

我们认为origin / master是主要的分支,HEAD的源代码总是反映生产就绪状态。

我们认为origin / develop是主要分支,其中HEAD的源代码始终反映了下一版本中最新交付的开发更改的状态。有些人称之为“整合分支”。这是建立任何自动夜间构建的地方。

支持分支机构

我们可能使用的不同类型的分支是:

  • 功能分支
  • 发布分支机构
  • 修补程序分支

功能分支:功能分支(有时称为主题分支)用于为即将发布或将来发布的版本开发新功能。

可能从以下地区分支出来: 开发

必须合并回: 开发

分支命名约定: 除了master,develop,release- 或hotfix -

之外的任何东西

发布分支:发布分支支持准备新的生产版本。他们允许最后一刻点缀我和交叉t。

可能从以下地区分支出来: 开发

必须合并回: 发展和掌握

分支命名约定: 释放 - *

修补程序分支:修补程序分支非常类似于发布分支,因为它们也可用于准备新的生产版本,尽管是计划外的。它们源于必须立即采取实际生产版本的不良状态。

可能从以下地区分支出来: 主

必须合并回: 发展和掌握

分支命名约定: 修复程序 - *

您可以从博客中找到有关此Git分支模型的更多详细信息。用于分支模型的命令也列在博客中。 Check the blog了解更多详情。我在我的项目中成功实现了分支模型,并对博客中提到的模型进行了一些更改。 Git是一个强大而灵活的工具,这只是使用Git的一种方式。

答案 1 :(得分:3)

您可以对两个设置文件进行版本控制(一个用于开发,一个用于生产)

然后您可以留下“elasticbeanstalk/hook”脚本,在“git aws.push”之后为您编写实际的设置文件。

您可以在“How to get Elastic Beanstalk nginx-backed proxy server to auto-redirect from HTTP to HTTPS?”中看到类似问题的示例,关于Node应用程序(可能不是您的确切情况),其中.ebextensions / config文件将写入/opt/elasticbeanstalk/hooks/configdeploy/enact/myscript.sh

最后一个脚本是一个可以在部署时运行的钩子,可以更新环境的实际配置文件。

答案 2 :(得分:3)

master上,对两个设置文件(settings_mastersettings_prod)以及符号链接settings -> settings_master进行版本控制。现在,将prod分支master(如果已存在,则将master合并到prod),并在prod中仅修改符号链接{{1}指向settings

将此更改提交至settings_prod

现在在prod上进行所有开发,只要您不修改符号链接本身(更改任一设置文件就可以了),您就可以将master合并到{在不影响master目标的情况下,您可以随意使用{1}}。您的应用程序应从prod检索其配置。

这将导致提交历史记录如下所示:

settings

每次settings合并到... -o---o---o---o master \ \ \ ... --o-------o---o prod 后,从masterprod的差异将始终是:

master

答案 3 :(得分:3)

下面有一些链接可以分享关于方法的一些看法以及为什么要选择rebase或merge的原因。

  • 合并非常适合将代码提交给团队中的共享分支。由于Rebase重写了提交的历史记录,因此相关提交的上下文(如功能分支)将丢失,因为提交将根据时间戳变为线性。
  • 在返回共享分支之前,Rebase非常适合将代码拉入工作分支。线性结果和历史变化可以使提交的合并更加成功。

请参阅: