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

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

 

参考:

https://blog.csdn.net/sharpdeng/article/details/80441469

https://www.jianshu.com/p/cec1539c0a33

https://git-scm.com/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-Git-%E5%B1%9E%E6%80%A7

https://blog.csdn.net/fkaking/article/details/44955663

https://stackoverflow.com/questions/14093540/tell-git-to-use-ours-merge-strategy-on-specific-files/14099431#14099431

https://www.jianshu.com/p/716fafb6f39e

https://blog.csdn.net/sinat_19968265/article/details/80308116

http://opticalix.github.io/2015/04/29/auto-merge/

https://www.jianshu.com/p/173642c06efa

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用git合并分支解决冲突的过程如下: 1. 首先,当我们在合并分支遇到冲突,我们需要先找到冲突的文件。这些文件中的冲突部分会被标记出来,以便我们进行解决。 2. 接下来,我们需要打开冲突的文件,查看冲突部分的代码。冲突会以特定的标记形式呈现,通常是<<<<<<<,=======和>>>>>>>这样的标记。 3. 我们需要手动编辑冲突部分的代码,将其中的冲突解决掉。我们可以选择保留其中一个分支的更改,也可以将两个分支的更改合并在一起。根据实际情况,可以借助IDE或文本编辑器来辅助解决冲突。 4. 在解决完冲突后,我们需要保存文件并进行git add操作,将文件标记为已解决冲突。 5. 最后,我们可以继续进行git commit和git push操作,将解决冲突后的代码提交到版本库中。 总结起来,解决git合并分支的冲突需要以下步骤:找到冲突文件,手动编辑冲突部分的代码,保存文件并进行git add,最后进行git commit和git push操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [git合并分支如何解决冲突](https://blog.csdn.net/new9232/article/details/122328566)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [如何解决Git合并分支造成的冲突](https://blog.csdn.net/nkmkbhjkb/article/details/129158387)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值