维护2个具有相似代码但但不完全相同的分支

时间:2018-04-25 12:21:46

标签: git svn version-control bitbucket git-merge

我有2个环境和2个分支,测试和生产。测试分支(Angular)上的代码与生产分支的99%相同,但是我需要维护的生产中存在一些差异,例如删除“注册”和“创建新”按钮。直播网站仍处于测试阶段。但我100%在版本控制中需要这些视图,我需要在测试分支/环境中使用它们。

有没有办法维护2个稍微不同的文件,即使我合并,而不使用.gitignore?就像我需要.gitignore只需几行代码!

我当前的方法是简单地记住更改,并在每次合并到生产分支时重新执行它们,然后在切换回测试分支时撤消更改。虽然它有点烦人!

我可以设置一个环境var来切换代码行,当然,任何人都可以在(客户端)代码中看到这个并使用我隐藏的链接和按钮。

我的部署过程如下:

  1. 将更改提交到Atlassian(Bitbucket)SourceTree软件中的任一分支。
  2. 推送更改
  3. 选择推送 通过Codeship.com自动部署
  4. Codeship部署通过 Elastic Beanstalk或直接到S3
  5. 因此环境变量和构建脚本可以在代码行或EBS阶段运行。

    任何建议表示赞赏。

2 个答案:

答案 0 :(得分:3)

  

有没有办法维护2个稍微不同的文件,即使我合并,而不使用.gitignore?就像我需要.gitignore只需几行代码!

你有一个隐含的前提,.gitignore会帮助你。它不会。 事物.gitignore所做的是保持未跟踪的文件未被跟踪(默认情况下)。它不会影响合并。

所以让我们删除它并解决正确的问题:

  

即使合并

,有没有办法维护2个略有不同的文件

出于所有意图和目的,没有。你可以试试,但是对于潜在的问题有更好的解决方案。

您需要做的是,为合并定义一个方向,然后在合并的“目标”侧引入差异。但是接下来(1)每次合并受影响的文件时,你都会面临不必要的合并冲突的可能性,并且(2)你在合并时有一个非常严格的限制规则。

(到最后一点:假设你决定“总是合并为生产”。这听起来不同于“合并向主人”的gitflow规则......但是修补程序怎么样? ?即使从生产到测试的间接合并也会破坏这种方法,因此创建修补程序的过程会变得更加复杂。)

更好的解决方案是使用单个代码库,但使用特定于环境的配置来确定表达哪种行为。配置可以由构建过程管理,也可以在运行时直接从环境中获取。

答案 1 :(得分:0)

我的建议是在一小组文件中隔离特定于分支的代码,然后在生产和开发分支之间切换,使用配置文件中的设置(而不是环境变量)。