Merge 分支时,如何保持指定的文件不被 Merge?
就像SO上这个问题描述的场景: http://stackoverflow.com/questions/928646/how-do-i-tell-git-to-always-select-my-local-version-for-conflicted-merges-on-a-sp
有两个分支,每个分支使用不同的配置,例如:
config.txt (on release branch):
database = 10.9.8.7
config.txt (on develop branch):
database = 192.168.0.1
当需要把develop分支的功能合并到release分支时,不希望config文件被合并;
有以下几种解决方案:
-
使用merge strategy;创建一个merge driver,对指定的文件使用指定的merge strategy;
缺点:文件无改动时,merge driver不会启动,还是会被合并;rebase不管用; -
提交时,使用assume-unchanged;
缺点:提交时需要时刻关注文件改动; - 使用subtree(submodule)
不知道大家有没什么建议?
http://blog.miniasp.com/post/2014/12/23/Git-Advanced-Assume-Unchanged-Skip-worktree.aspx
甜甜的大蛋糕
9 years, 8 months ago
Answers
环境不同的配置文件的话放在不同的文件中比较容易维护
//config.txt
#默认生产环境
database = 10.9.8.7
//config.dev.txt
#开发环境
database = 192.168.0.1
//config.test.txt
#测试环境
database = xxx
代码里面做环境判断(常见的方式有IP、hostname、环境变量等)分别读取不同的配置
进一步的方案是专门有配置中心负责下发配置,有驻守精灵负责找配置中心拉配置、缓存配置、配合中心更新配置等
总之个人觉得通过分支不同来维护不同环境的配置事倍功半……如果再加上测试环境、预发布环境,甚至可能还有单元测试环境、沙盒环境等等,3份以上不同配置如果还是用分支维护的话基本上就崩溃了吧……一定要搞的话推荐模仿
phpunit.xml.dist
的形式,gitignore掉
config.txt
,然后维护正式的
config.txt.dist
,代码里优先读
config.txt
,然后读
config.txt.dist
shybear
answered 9 years, 8 months ago