Merge 分支时,如何保持指定的文件不被 Merge?

2015-02-12 11:05:26 +08:00
 imwower

就像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://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

5095 次点击
所在节点    git
7 条回复
revlis7
2015-02-12 11:25:36 +08:00
添加config.txt到.gitignore

在repo中只包含:
config.txt.release
config.txt.develop
cloudzhou
2015-02-12 11:27:53 +08:00
大部分情况下,不想代码管理做得这么复杂,我希望使用最简单的几个操作而已。
针对你的情况,我的建议是这样的,使用动态配置,配置文件并不作为版本控制内容,事实上,配置文件本来就不合适放在版本控制里。
举个例子,在 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
9hills
2015-02-12 12:16:20 +08:00
你需要配置模版和配置派生。repo中不存配置信息,只存配置模版

具体的派生项,单独存放
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 文件等
多一步选择配置文件也是很合理的事情。。。
jasonslyvia
2015-02-12 14:34:42 +08:00
两份配置,根据环境变量不同加载不同的文件
zlandjj
2015-02-12 15:42:12 +08:00
设置ingenore文件不行么?
imwower
2015-02-13 09:42:41 +08:00
谢谢各位~就不一一@了
大概了解这个流程了,不应该把部署的流程和开发的流程混淆;
在部署时,都需要对生产环境的配置手动处理

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

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

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

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

© 2021 V2EX