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

使用 git 管理代码,开发分支和线上分支有不同文件,如何处理

  •  
  •   shiziwen · 2015-11-13 19:06:23 +08:00 · 5649 次点击
    这是一个创建于 3317 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在使用 git 进行代码管理时候,有开发分支 dev ,线上分支 pro 。

    在开发的时候,每个人会从 dev 分支上拉出自己的分支,进行开发,完成后合并到 dev 分支上面。
    线上环境进行更新的时候,会从 pro 分支上面 pull 最近的代码,然后重启服务运行。

    这里有一个问题, dev 分支和 pro 分支,往往会存在几个文件不同情况,例如配置文件 setting 等等。在这种情况下应该如何处理比较合适?

    如果 git 中不包含 setting 文件的话,如果配置文件需要更新的话,在线上环境就需要手动修改代码。

    请问大家是如何做的?结合 git 做到自动化部署和回退?

    多谢

    11 条回复    2016-03-23 10:55:47 +08:00
    raysmond
        1
    raysmond  
       2015-11-13 19:10:05 +08:00
    配置文件不是都区分出 setting-dev 和 setting-prod 不同的文件么?以及 prod 的配置文件为什么要放在 repository 中?各种配置不是放在服务器上单独的目录或环境变量中比较好么?
    cxbig
        2
    cxbig  
       2015-11-13 19:10:13 +08:00
    项目的自动化部署用 capistrano ,部署和回滚都很方便
    至于 settings ,方法有很多,可以用 capistrano 文件模板,或者直接放在 repo 以外的地方 link 进来
    lee015
        3
    lee015  
       2015-11-13 19:48:51 +08:00 via Android
    今天刚好也处理这个问题,我现在是这样:配置文件存两个如 config.php.devconfig.php.pro ,在具体环境复制一份去掉后缀,然后 gitignore config.php 。这样配置在 repo 里,也不相互影响。不过改了 repo 里配置要生效的话得手动再复制一份去后缀。
    HentaiMew
        4
    HentaiMew  
       2015-11-13 20:10:34 +08:00
    有些情况下,例如开发环境中的部署环境中有一些配置不一样,比如 zookeeper 的 ip 地址不同等。

    一般这种情况下,直接提交开发环境中的配置。在开发和部署(运行环境)之间有一个 CI 过程,例如 jenkins ,利用 CI 工具替换不同的配置文件。然后再部署。

    毕竟整个发布过程都是 CI 工具自动化做的,不需要人为干预。
    lightening
        5
    lightening  
       2015-11-13 20:32:16 +08:00
    你的自动化部署工具会管的吧……

    Capistrano, Docker 都可以 link 进其他的文件。
    ETiV
        6
    ETiV  
       2015-11-13 20:37:08 +08:00
    settings 复制一份成为 settings-example. 里面实际填的值改成 example 值

    .gitignore 增加 settings 文件名

    git 删掉 settings, 增加 settings-example

    线上部署前, cp settings-example settings
    编辑 settings 里的设置, 开跑
    cwek
        7
    cwek  
       2015-11-13 21:24:24 +08:00
    从同一个主线分开分支后,每个对应的配置文件改一次,以后不要乱后回去就是了。
    现在就是这样干。
    clino
        8
    clino  
       2015-11-13 21:29:04 +08:00
    把 settings 用另外一个 git 库管理起来然后 link 进去
    konakona
        9
    konakona  
       2015-11-13 21:39:43 +08:00
    Git Flow.
    msg7086
        10
    msg7086  
       2015-11-14 12:01:16 +08:00   ❤️ 1
    Rails 项目的话有自动部署可以用。
    很多系统都可以做约定优于配置,开发机上用约定参数,线上机器用配置参数就行了。
    比如 PHP 的话

    $database = 'xxx';
    $user = 'uuu';
    if (file_exists('config.php')) require_once('config.php');
    jakehu
        11
    jakehu  
       2016-03-23 10:55:47 +08:00
    好吧 我现在也遇到这个问题了 楼主最后怎么解决的?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2297 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:45 · PVG 23:45 · LAX 07:45 · JFK 10:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.