首页 > 其他分享 >git合并分支时禁止合并特定文件

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

时间:2023-01-04 14:22:42浏览次数:35  
标签:文件 git 合并 忽略 merge release 分支

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

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

标签:文件,git,合并,忽略,merge,release,分支
From: https://www.cnblogs.com/zjj1990/p/17024701.html

相关文章

  • GitHub 开源了多款字体「GitHub 热点速览 v.22.48」
    本期News快读有GitHub官方大动作一下子开源了两款字体,同样大动作的还有OpenAI发布的对话模型ChatGPT,引燃了一波人机对话。项目这块,也许会成为新的Web开发生产力工......
  • github workflow
    本文主要叙述如何在已有的githubrepository添加自己写的部分,主要参考链接为:https://code.tutsplus.com/tutorials/how-to-collaborate-on-github--net-34267。一般github......
  • 操作定义了Helm Chart的Git仓库
    gitconfig--globaluser.name"wanghongwei"gitconfig--globaluser.email"[email protected]"gitconfig--globalcredential.helperstoregitclonehttp://g......
  • Java 合并PDF文件
    这篇文章主要介绍如何在Java应用程序中实现将多个PDF文件合并为一个PDF的功能。使用组件:Spire.PDFforJava使用以下代码前,需要下载​​Spire.PDFforJava​​包并解压,然后......
  • 剑指25. 合并两个有序链表
    问题描述https://leetcode.cn/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof/description/解题思路参考这个代码#Definitionforsingly-linkedlist.#cla......
  • Gitflow Workflow
    什么是Gitflow工作流?Gitflow工作流是以Git作为源代码管理工具的团队的一种管理,开发,维护,发布的工作流程,它为项目的发布维护等工作定义了严谨的分支管理模型,同时也为大型......
  • 「java技术干货」switch分支结构详解
    前言在上一篇文章中,壹哥给大家介绍了Java里的顺序、分支、循环结构的概念,并且重点给大家讲解了分支结构中的条件分支。并在条件分支中,详细地给大家讲解了if条件分支的使用......
  • 在linux上Git配置多个SSH-Key
    Git配置多个SSH-KeySSHKey背景当有多个git账号时,比如:a.一个gitee,用于公司内部的工作开发;b.一个github,用于自己进行一些开发活动;c.一个gitlab,用于自己进行一些开发......
  • GitHub App All In One
    GitHubAppAllInOneReactNativeFlutterSwiftUIElectronTaro小程序(......
  • Git使用教程之本地仓库的基本操作
    1、Git是什么?一个分布式版本控制系统,和SVN类似,但远比SVN强大的一个版本控制系统。①Git可以方便的在本地进行版本管理,如同你本地有一个版本管理服务器一样我们可以选择在合......