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文件被合并;
有以下几种解决方案:

  1. 使用merge strategy;创建一个merge driver,对指定的文件使用指定的merge strategy;
    缺点:文件无改动时,merge driver不会启动,还是会被合并;rebase不管用;
  2. 提交时,使用assume-unchanged;
    缺点:提交时需要时刻关注文件改动;
  3. 使用subtree(submodule)

不知道大家有没什么建议?

参考: http://stackoverflow.com/questions/928646/how-do-i-tell-git-to-always-select-my-local-version-for-conflicted-merges-on-a-sp

http://stackoverflow.com/questions/2250040/using-github-to-host-public-git-repositories-whilst-ensuring-that-sensitive-data#

http://blog.miniasp.com/post/2014/12/23/Git-Advanced-Assume-Unchanged-Skip-worktree.aspx

github tortoisegit git

甜甜的大蛋糕 9 years, 8 months ago

环境不同的配置文件的话放在不同的文件中比较容易维护


 //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

Your Answer