请教大家一个 git 合并的问题

2017-03-06 16:32:25 +08:00
 LinusTor
是这样的.我有两个分支.master 和 dev.dev 主要是开发用的.然后 master 是用来线上正式使用的.一般是 dev 开发测试完直接合并到 master 分支上.

但是有这样的问题.就是有一些配置文件 dev 分支和 master 是不一样的,因为 dev 是用来本地开发等,而 master 是用于线上发布的.所以配置是线上的配置.这样每次合并 dev 分支到 master 都要修改下配置.或者 dev 提交的时候把配置部分给回滚掉.然后再提交合并到 master.

每次这样都感觉好烦.请问下大家有没有什么好一点的解决方案.
5659 次点击
所在节点    git
33 条回复
bt
2017-03-06 16:38:25 +08:00
设置环境变量然后读取对应的配置文件?
QAPTEAWH
2017-03-06 16:46:44 +08:00
弄三个分支: dev 、 master 、 master_with_conf 。
dev 搞完后 merge 到 master 上,再把 master_with_conf rebase 到 master 上。

------master---master_with_conf
\ /
.--dev--
huweitxdy
2017-03-06 16:47:47 +08:00
线上配置和本地开发的配置文件应该分成 2 个独立的文件,线上的那个文件只存在 master 里就可以了
BigUncleLee
2017-03-06 16:48:34 +08:00
把配置文件添加到.ignore 文件中
LinusTor
2017-03-06 16:49:31 +08:00
@QAPTEAWH 哈哈 这样呀. 我试试.

但是以后如果配置更新了增加或者删除了配置了三个同步也会挺麻烦的.
ck65
2017-03-06 16:50:38 +08:00
我目前了解的比较不错的方案:

1 、 env.example 入仓库,部署实例后 mv 成 env ,不要 add 这个 env 。
2 、约定好 env 的存放位置,只要在工程目录之外的就行,比如 /var/project/env ,然后程序里去读这个位置的 env ,绕开 env 入仓库的问题。

我们目前在用方案 1 。
hekunhotmail
2017-03-06 16:53:40 +08:00
切换 env 还要修改整个配置文件? 做个开关吧,开关文件存一些全局环境变量, 两个配置文件, dev.cfg , release.cfg , env 不同读取不同的
donghui
2017-03-06 16:53:56 +08:00
不同配置分成不同的文件夹
或者配置与代码分离
game3108
2017-03-06 17:14:23 +08:00
配置文件为啥不 ignore 呢?
cxbig
2017-03-06 17:16:57 +08:00
配置文件分 2 类:

1. 几乎是静态、无敏感信息的
做成模板文件上传,如.env.prod 、.env.staging ,部署或本地开发酌情选用并 cp 到.env ,.env 加 gitignore

2. 带有敏感信息的
不上传 repo !可以做成特定模板,在部署的时候通过所使用的语言将占位符替换成敏感信息直接部署到服务器
可参考 Capistrano (基于 erb 模板)或 Ansible (基于 Jinja2 模板)的配置信息部署方案
zhustec
2017-03-06 17:45:32 +08:00
设置 2 个配置文件 production.config development.config 代码里根据环境读取相应配置文件,环境可用环境变量指定,可以设置不指定环境时默认为 production 或者 development
irory
2017-03-06 17:49:32 +08:00
每个环境对应单独配置文件呀 ...
zero1234888
2017-03-06 17:54:42 +08:00
1.首先建立站点工作模式( dev,beta,release )把你的一堆配置项变成一个配置项
2.把这个配置项摘出来放进一个 baseSetup.config 里面保证除了必要的大改之外不会被动到
3. git update-index --assume-unchanged PATH 在 PATH 处输入要忽略的文件,把这个文件忽略掉,省得每次 git status 的时候跳出来烦人……
GOOD21
2017-03-06 17:56:09 +08:00
目前在用的方案: link

dev.conf 和 pro.conf 同时提交到版本库, conf.conf 加入 ignore

开发环境: ln -nsf dev.conf conf.conf
线上环境: ln -nsf pro.conf conf.conf
sarices
2017-03-06 17:58:51 +08:00
配置应该忽略的啊,然后线上部署的时候自动部署配置文件,而不是 push 到服务器上
LinusTor
2017-03-06 17:59:08 +08:00
@zhustec 嗯嗯.使用环境变量貌似是个不错的解决办法
LinusTor
2017-03-06 18:02:08 +08:00
@zero1234888 非常感谢.git 的这个命令还真没用过.等会儿研究下.
xiaowei4895
2017-03-06 18:03:47 +08:00
个人觉得 git 的分支,只是文件版本的管理,不适合用来做环境的区分。
建议用打包脚本或者环境变量来进行环境的区分。
LinusTor
2017-03-06 18:06:28 +08:00
@cxbig 嗯嗯.是的哈.一些数据库连接字符串等还是不能传 repo 的.除非仓库本来就是 private 的.

但是对于 py 的代码.部署的话也只是更新下仓库.重启下服务等.不会设计到部署编译.

貌似使用系统环境变量是不错的办法.这样也不会污染代码仓库.线上线下环境变量配置不同的就可以了.
LinusTor
2017-03-06 18:08:54 +08:00
@sarices 配置文件如果忽略的话.拉新的仓库时候都要复制粘贴配置文件.而且如果配置文件修改了别人更新也是个麻烦事.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/345353

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX