Git保存来自2个不同环境的文件的最佳做法

时间:2017-01-29 17:16:38

标签: git deployment server config branching-and-merging

关于如何实际使用Git的问题。

我的代码部署在2台服务器上(1台用于升级,1台用于生产);它是相同的代码,但是对于几个文件(配置文件中的不同路径)。

注意 - 我通常从开发笔记本电脑提交/推送,只需从这两台服务器中提取。

我希望Git master分支是生产文件集的精确副本,因为它现在正在运行。我认为这更有意义 - 是吗?

尽管如此,我并不确切知道将登台服务器的差异放在哪里:

  • 使用暂存分支是否更好?但是,每当我改变主分支时,我必须考虑重新组合。

  • 最好是在本地提交,在登台服务器上,路径是否更改,让Git每次都重新提交这些提交(在HEAD之上)?但是,那时候,我已经没有按下那些停留在那里的提交 - 它可能会变得有点乱,而且我不必误推它们......

还有其他更简单的方案,我没有想到吗?

2 个答案:

答案 0 :(得分:2)

您应该为此使用环境变量。您可以定义环境变量以在登台和生产之间进行选择。如果未定义,则可以默认为生产。

您的配置文件可以读取环境变量并为登台或生产环境选择正确的配置。

通过这种方式,git可以始终指向Master,并将生产作为默认设置,并且登台服务器将具有特定于登台的配置。

从git的角度来看,我不认为我们可以检查一个主人做两件事。创建分支并合并它们也是一种痛苦,因此管理它的最佳方法是使用环境变量

答案 1 :(得分:0)

最好将这些配置文件作为单独的文件进行管理:

  • myconfig.master
  • myconfig.dev
  • ...

然后,正如我在“Ignore files when merging branches”中所述,您可以声明 content filter driver (使用.gitattributes declaration),这会在结帐时自动复制正确的文件为myconfig 实际的myconfig生成的文件将保持忽略且为私有。

smudge

您的smudge脚本可以通过以下方式确定已签出分支的名称:

branch=$(git rev-parse --symbolic --abbrev-ref HEAD)