在使用 git 进行代码管理时候,有开发分支 dev ,线上分支 pro 。
在开发的时候,每个人会从 dev 分支上拉出自己的分支,进行开发,完成后合并到 dev 分支上面。
线上环境进行更新的时候,会从 pro 分支上面 pull 最近的代码,然后重启服务运行。
这里有一个问题, dev 分支和 pro 分支,往往会存在几个文件不同情况,例如配置文件 setting 等等。在这种情况下应该如何处理比较合适?
如果 git 中不包含 setting 文件的话,如果配置文件需要更新的话,在线上环境就需要手动修改代码。
请问大家是如何做的?结合 git 做到自动化部署和回退?
多谢
1
raysmond 2015-11-13 19:10:05 +08:00
配置文件不是都区分出 setting-dev 和 setting-prod 不同的文件么?以及 prod 的配置文件为什么要放在 repository 中?各种配置不是放在服务器上单独的目录或环境变量中比较好么?
|
2
cxbig 2015-11-13 19:10:13 +08:00
项目的自动化部署用 capistrano ,部署和回滚都很方便
至于 settings ,方法有很多,可以用 capistrano 文件模板,或者直接放在 repo 以外的地方 link 进来 |
3
lee015 2015-11-13 19:48:51 +08:00 via Android
今天刚好也处理这个问题,我现在是这样:配置文件存两个如 config.php.dev , config.php.pro ,在具体环境复制一份去掉后缀,然后 gitignore config.php 。这样配置在 repo 里,也不相互影响。不过改了 repo 里配置要生效的话得手动再复制一份去后缀。
|
4
HentaiMew 2015-11-13 20:10:34 +08:00
有些情况下,例如开发环境中的部署环境中有一些配置不一样,比如 zookeeper 的 ip 地址不同等。
一般这种情况下,直接提交开发环境中的配置。在开发和部署(运行环境)之间有一个 CI 过程,例如 jenkins ,利用 CI 工具替换不同的配置文件。然后再部署。 毕竟整个发布过程都是 CI 工具自动化做的,不需要人为干预。 |
5
lightening 2015-11-13 20:32:16 +08:00
你的自动化部署工具会管的吧……
Capistrano, Docker 都可以 link 进其他的文件。 |
6
ETiV 2015-11-13 20:37:08 +08:00
settings 复制一份成为 settings-example. 里面实际填的值改成 example 值
.gitignore 增加 settings 文件名 git 删掉 settings, 增加 settings-example 线上部署前, cp settings-example settings 编辑 settings 里的设置, 开跑 |
7
cwek 2015-11-13 21:24:24 +08:00
从同一个主线分开分支后,每个对应的配置文件改一次,以后不要乱后回去就是了。
现在就是这样干。 |
8
clino 2015-11-13 21:29:04 +08:00
把 settings 用另外一个 git 库管理起来然后 link 进去
|
9
konakona 2015-11-13 21:39:43 +08:00
Git Flow.
|
10
msg7086 2015-11-14 12:01:16 +08:00 1
Rails 项目的话有自动部署可以用。
很多系统都可以做约定优于配置,开发机上用约定参数,线上机器用配置参数就行了。 比如 PHP 的话 $database = 'xxx'; $user = 'uuu'; if (file_exists('config.php')) require_once('config.php'); |
11
jakehu 2016-03-23 10:55:47 +08:00
好吧 我现在也遇到这个问题了 楼主最后怎么解决的?
|