就像SO上这个问题描述的场景: http://stackoverflow.com/questions/928646/how-do-i-tell-git-to-always-select-my-local-version-for-conflicted-merges-on-a-sp
有两个分支,每个分支使用不同的配置,例如:
bash
config.txt (on release branch):
database = 10.9.8.7
bash
config.txt (on develop branch):
database = 192.168.0.1
当需要把develop分支的功能合并到release分支时,不希望config文件被合并;
有以下几种解决方案:
- 使用merge strategy;创建一个merge driver,对指定的文件使用指定的merge strategy;
缺点:- 文件无改动时,merge driver不会启动,还是会被合并;
- rebase不管用;
- 提交时,使用assume-unchanged;
缺点:- 1. 提交时需要时刻关注文件改动;
- 使用subtree(submodule)
不知道大家有没什么建议?
http://blog.miniasp.com/post/2014/12/23/Git-Advanced-Assume-Unchanged-Skip-worktree.aspx
1
revlis7 2015-02-12 11:25:36 +08:00 1
添加config.txt到.gitignore
在repo中只包含: config.txt.release config.txt.develop |
2
cloudzhou 2015-02-12 11:27:53 +08:00 1
大部分情况下,不想代码管理做得这么复杂,我希望使用最简单的几个操作而已。
针对你的情况,我的建议是这样的,使用动态配置,配置文件并不作为版本控制内容,事实上,配置文件本来就不合适放在版本控制里。 举个例子,在 Django 开发中,settings.py 线上和线下都不一样,所以我不把这个文件放入版本控制。 我的做法是创建一个文件 settings.tmpl, 在下面有 env.ini > cat env.ini [env] debug = True user = user password = password ... > cat settings.tmpl DEBUG = ${debug} ... 使用 ConfigParser, Template 来动态渲染,(import ConfigParser, from string import Template) 然后使用脚本控制环境是什么状态,或者在运行的时候生成 settings.py |
3
9hills 2015-02-12 12:16:20 +08:00
你需要配置模版和配置派生。repo中不存配置信息,只存配置模版
具体的派生项,单独存放 |
4
vivisidea 2015-02-12 13:25:23 +08:00
楼主的问题是不是可以理解成线上/线下的配置文件管理问题
以 Java 的 maven 项目为例,我们配置文件是这么放的 src/main/resources/ conf.properties -- 本地开发配置文件 conf/test/conf.properties -- 测试环境配置文件 conf/online/conf.properties -- 线上环境配置文件 然后由部署脚本(ant + build.xml)来决定用哪个配置文件 通常都不是从仓库 clone 出来直接运行代码的吧,一般都要编译,打个包,压缩下 js 文件等 多一步选择配置文件也是很合理的事情。。。 |
5
jasonslyvia 2015-02-12 14:34:42 +08:00
两份配置,根据环境变量不同加载不同的文件
|
6
zlandjj 2015-02-12 15:42:12 +08:00
设置ingenore文件不行么?
|
7
imwower OP 谢谢各位~就不一一@了
大概了解这个流程了,不应该把部署的流程和开发的流程混淆; 在部署时,都需要对生产环境的配置手动处理 |