如何在不同的分支上保留不同的值(提交)?

时间:2018-01-01 09:51:40

标签: git

我相信我所描述的情况非常普遍和基本,但我找不到灵魂。

我正在开发一个网络应用程序,我有它的git存储库。有一个应用程序的生产版本,我在主分支机构的代码,以及开放式开发的分支。

我想要实现的目标是:

  • 我希望在master分支和开发分支上有一些不同的值(比如连接字符串)。
  • 我希望能够以一种我不担心上述值的方式合并这些分支(当开发重新发布时)。因此,开发分支的连接字符串不会覆盖生产版本
  • 中的连接字符串
  • 理想的解决方案还可以在创建新分支时更换连接(从PROD数据库到DEV)字符串。

我想出了一种方法,就是在开发分支上进行这些更改的提交,这些更改将标记为不包含在合并中,但我找不到方法来执行此操作。

我很感激任何建议。

4 个答案:

答案 0 :(得分:3)

我建议你创建一些git不跟踪的配置文件。您的代码可以读取此文件以初始化连接设置。由于该文件不受版本控制,因此您可以轻松地针对不同的用例进行修改,包括生产与开发。

答案 1 :(得分:2)

最简单的方法是:

  • 仅版本模板文件
  • 寻找仓库外的价值文件(特别是生产价值)
    这样就没有合并问题了。

为此,您需要在子模块库中注册(.gitattributes declaration content filter driver

smudge (图片来自" Customizing Git - Git Attributes",来自" Pro Git book")

与模板文件关联的smudge脚本将通过在外部查找实际值来生成(自动在git chekcout)属性文件。 生成的实际属性文件仍然被忽略(.gitignore)。

请参阅" git smudge/clean filter between branches"。

中的完整示例

答案 2 :(得分:1)

您可以使用.gitignore忽略您不希望GIT跟踪的文件,请在此处详细了解https://help.github.com/articles/ignoring-files/

但这不会解决您的问题,因为在您添加开发阶段特定文件后,您也无法跟踪它们到您的开发分支。

它是你提到的非常常见的场景,通常我们为每个阶段创建一个不同的文件,即 dev,qa,stage,prod ,它保存特定于舞台的值。

例如: -

dev.properties :- 
dev server details

qa.properties :-
qa server details

prod.properties :-
prod server details

然后你的代码根据你选择的阶段读取这些属性文件,即dev,qa,prod

答案 3 :(得分:0)

在对dev进行更改之前。分支,在进行更改之前检出该分支然后提交。