git合并分支时禁止合并特定文件

开发过程中经常会遇到这样的场景,一个项目可能有develop(开发环境)、release(生产环境)等多个分支,经常需要对分支进行合并,但是不同分支下的一些配置文件可能会有所不同,比如数据库配置、redis配置等等。但是我们又不想每次打不同的包时都把这些文件改一遍,这时候怎么样才能偷个懒呢?Git正好提供了这样的功能。

将develop分支的代码合并到release分支,并忽略特定的文件
操作步骤如下:
1. 定义一个虚拟的合并策略,叫做 ours:

在根目录下运行命令行

git config --global merge.ours.driver true

如下图所示:

2. 在develop分支的项目根目录下新建文件.gitattributes,在文件中写入需要忽略的文件名 + merge=ours, 一个文件占一行。

例如,忽略service.properties、redis.properties、jdbc.properties 文件:

/yjxy-common-web/src/main/resources/service.properties merge=ours
/yjxy-common-web/src/main/resources/redis.properties merge=ours
/yjxy-web-admin/src/main/resources/jdbc.properties merge=ours

如下图所示:

3. 将.gitattributes文件拷贝到 release分支的项目根目录。

4. 切换回release分支

git checkout release

5. 合并分支

git merge --no-ff -m 'merge' develop

合并之后, release分支的配置文件保持了原样。

影响.gitattributes忽略规则的因素
有的文章中提到,在配置了.gitattributes文件的情况下,仍然存在一个问题:要忽略的文件在不同分支间先修改的不会合并到后修改的文件里,但是后修改的文件可以和先修改的文件进行正常合并。也就是说不同分支中,旧文件不会合并到新文件中,但新文件仍然会合并到旧文件,那么真的是这样吗?在测试过程中发现这个问题有时会出现,有时又不会出现,因此推断是有更细节的触发机制。

经过实验,得到如下结果

前置条件:假设有release、dev两个分支,两个分支的根目录下有同样的.gitattributes文件

结论1:只有在提交更改相同文件时才会触发自定义的忽略规则。

首先,这一点是确定无疑的。

结论2:如果有且仅有一个分支中的文件有修改,此时将这个分支合并到另一个分支,那么自定义忽略规则不会触发,文件仍然会成功合并。

也就是说,仅有一个分支修改过的情况下,要将这个修改过的分支合并到另一个分支的时候,是不适用忽略规则的,文件还是会被合并。

结论3:如果两个分支的文件都有变化(文件变化之后没有进行过合并),那么在进行分支合并时,自定义忽略规则会触发,设置为忽略的文件不会合并,这里不受两个分支文件修改时间先后顺序的影响。

这里是需要强调的一点,如果两个分支的文件都有变化,是会触发忽略规则的,文件不会被合并。不论两个分支中文件的修改时间先后顺序是怎样的,忽略规则都会被触发。当然,这里还有个前提,就是两个分支的文件修改之后,没有进行过合并,如果进行了合并,再次合并时,分支已经变了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值