V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
imwower
V2EX  ›  git

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

  •  1
     
  •   imwower · 2015-02-12 11:05:26 +08:00 · 5113 次点击
    这是一个创建于 3577 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    7 条回复    2015-02-13 09:42:41 +08:00
    revlis7
        1
    revlis7  
       2015-02-12 11:25:36 +08:00   ❤️ 1
    添加config.txt到.gitignore

    在repo中只包含:
    config.txt.release
    config.txt.develop
    cloudzhou
        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
    9hills
        3
    9hills  
       2015-02-12 12:16:20 +08:00
    你需要配置模版和配置派生。repo中不存配置信息,只存配置模版

    具体的派生项,单独存放
    vivisidea
        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 文件等
    多一步选择配置文件也是很合理的事情。。。
    jasonslyvia
        5
    jasonslyvia  
       2015-02-12 14:34:42 +08:00
    两份配置,根据环境变量不同加载不同的文件
    zlandjj
        6
    zlandjj  
       2015-02-12 15:42:12 +08:00
    设置ingenore文件不行么?
    imwower
        7
    imwower  
    OP
       2015-02-13 09:42:41 +08:00
    谢谢各位~就不一一@了
    大概了解这个流程了,不应该把部署的流程和开发的流程混淆;
    在部署时,都需要对生产环境的配置手动处理
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3164 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:33 · PVG 21:33 · LAX 05:33 · JFK 08:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.