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

技术问题 · Axin · 于 5年前 发布 · 4477 次阅读

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

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

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

我现在的处理方式,是配置写两个文件,不放git,根据IP来识别开发与正式,来选用不同的配置

共收到 11 条回复 问题提问
Fecmall#15年前 1 个赞

前面的一般都这样,搞一个dev分支,dev分支测试完成后,在不同的环境中测试,测试通过后, 加入到master分支测试,稳定后发布到线上。

可能有一些线上bug紧急处理的支线会直接进master

更新代码

如果有运维,可以运维写脚本处理

1.将线上的配置文件取出来,做一个文件包A

2.脚本执行的部分:

2.1git拖取 master分支(测试完成的分支)到线上

2.2将文件包A覆盖线上环境文件,这是文件权限等等

2.3刷新redis缓存等一些操作。

2.4清除一些.git等一些隐藏文件等等

2.5将发版信息,发送邮件,或者发送slack聊天工具等等,告知开发组等等

2.6回滚操作,如果某些步骤执行失败,那么前面执行成功的步骤,如果需要执行回滚操作的,需要执行回滚操作。

没有运维,自己也可以用shell写一下,不难,一个git命令,一个cp命令, 缓存可以手动刷新

last

我认为你可以做一个 线上文件包, 线上发版,和cp命令一起执行 git pull xxxxxxxx && \cp -rf xxxxx,或者放到shell文件里面运行。

Fecmall#25年前 1 个赞

运维那边会做一些自动化操作界面,譬如:

通过界面,将各个分支发布到不同的测试环境,或者线上环境,点击push task后,脚本会执行一系列的命令行。

successgo#35年前 0 个赞

配置文件可以写入 git,但注意要放入私仓。

不同环境的配置文件写多分,布署项目的时候,随同拉取代码的过程后,执行依赖安装之后,执行配置文件初始化,等等这一系列的动作,通过 phing 工具,非常方便的再结合 jenkins 工具,完成自动发布和构建。

欢迎提出你的想法,一起交流。

Fecmall#45年前 0 个赞

@successgdc #3楼 看不明白

successgo#55年前 0 个赞

我的思路可能表达的不清楚。让我再试着重述一下:

  1. 分环境,多份配置文件。
environments/
  dev/
  prod/
  test/
  1. 关于代码的布署往往有几个步骤

拉取某分支或某 tag 代码

安装依赖,composer 依赖,或 npm 依赖

环境的参数设置(将对应环境的配置文件复制到相应的目录的过程)

其他初始化过程

关于这一步,可以通过 phing 工具编写自动化构建脚本,使用 jenkins 平台,完成快捷的构建。

还有什么地方我没有讲明白的么,欢迎讨论

Fecmall#65年前 0 个赞

你这个说的是第一次线上从github拖取安装,还有如下问题

1.本地二开代码通过gitlab更新到线上环境,本地的代码是全部,还是部分,还是某些文件通过公司内部的gitlab更新上去

2.本地配置和线上配置不一致的某些配置文件如何处理,这些文件要不要放到gitlab里面,如果也放进去的话如何处理,如果不放进去如何处理

2. 如果某些配置文件在各个环境中不同,譬如本地二开环境,本地的dev测试环境,本地的staging,还有一些其他的测试环境,以及线上环境,线上环境的php可能多个,这个问题问的是如何自动化发版

Fecmall#75年前 0 个赞

可以无脑发版,通过shell脚本,用什么样子的策略更好的解决这些文件差异问题

譬如数据库配置文件,邮箱配置,支付的配置(本地是沙盒环境配置)等等

以及后续有新的配置改动,譬如更改邮件配置,如何更新和添加配置信息

可以在多个不同的环境中一劳永逸的发版

譬如,某个项目,4,5个程序员开发功能,一个周后开发了10 个分支,那么需要测试,那么测试人员如何自己发版到各个测试环境,而不依赖于程序员?

如果某些分支存在配置更改,各个环境配置不同,如何弄

Fecmall#85年前 0 个赞

可以 讨论下,整一个推荐部署文档

首先要讨论

1.线上的代码,第一次如何部署,全部文件从本地gitlab中拖过去,还是部分,如果是部分,那么那部分代码文件的问题

2.不放到代码库的部分,譬如某些依赖库,如果不放到gitlab里面,后期如果升级这些依赖库包,直接在线上升级依赖库包是不是影响网站访问?如果是多个php机器,很难保证各个节点一致升级

Axin#95年前 0 个赞

恩,因为是在小公司,运维跟开发都是自己,想在这边讨论下关于部署大家是如何部署(抛砖引玉下)。

就像上面说的,肯定大家都有碰到过,只是解决不同。 像fecshop大大说的,我曾经为了这些问题各种姿势寻找答案。始终找不到自己满意的解决方式(可能自己用的姿势不对)。

特别是线上,线下配置不同也是蛮恶心人的,处女座情结:joy:。

Fecmall#105年前 0 个赞

@Axin #9楼

我认为比较简单的方式,就是把一部分基本万年不变的配置文件不放到github里面,譬如数据库配置

其他的都放到gitlab里面

然后把一些发生变动的线上配置文件放到一个文件夹里面(在线上环境里面)

更新的时候,git pull && cp 命名, 也就是git拖取代码成功后,马上执行cp命令,将那些线上独有的文件覆盖github里面的,如果有其他需要操作的,就在后面添加执行命令。

这样一行命令行搞定。

Fecmall#115年前 0 个赞

1.还有js 和css , 线上一般都关掉forceCopy,因此发版后需要清空一下@web/assets/

2.http://www.fecshop.com/doc/fecshop-guide/instructions/cn-1.0/guide-fecshop_config_speed.html

如果开启了配置文件合并,发版后还需要合并配置文件

3.刷新缓存

等等一系列发版后需要操作的事情,

因此写个命令行脚本最好,一劳永逸

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics