Git 将文件的特定行合并为';我们的';,其余为';他们的'; 设置

Git 将文件的特定行合并为';我们的';,其余为';他们的'; 设置,git,merge,git-merge,git-config,Git,Merge,Git Merge,Git Config,我有一个项目的存储库;让我们称之为foo。 我在存储库中有一个特定的文件;让我们称之为bar。 我在foo有两个分支机构主版本用于开发,而公共版本用于稳定版本 工作流程 我在master中进行更改,在那里测试它们,如果它们通过了测试,则将它们合并到public中。假设我目前使用的是bar,这是一个在屏幕上显示视觉内容的程序,需要一定的时间才能运行。为了在测试期间缩短运行时间,我通常会调整几个参数,这样它就不会在整个持续时间内运行,而是只运行一部分 问题 我在master中做了很多更改,我希望pu

我有一个项目的存储库;让我们称之为
foo
。 我在存储库中有一个特定的文件;让我们称之为
bar
。 我在
foo
有两个分支机构<代码>主版本用于开发,而
公共版本
用于稳定版本

工作流程 我在
master
中进行更改,在那里测试它们,如果它们通过了测试,则将它们合并到
public
中。假设我目前使用的是
bar
,这是一个在屏幕上显示视觉内容的程序,需要一定的时间才能运行。为了在测试期间缩短运行时间,我通常会调整几个参数,这样它就不会在整个持续时间内运行,而是只运行一部分

问题 我在
master
中做了很多更改,我希望
public
能够反映这些更改;但是,在
master
中,我不想在合并之前(或之后)将所有参数更改回默认的面向用户的参数。我知道[1]这些参数存在的行,还有[2]一个可选的regex模式列表,其中一行匹配


是否有一种方法可以配置此特定存储库的
git merge
,使其始终与那些特定行的
ours
合并,这样我的参数和配置就不会被覆盖?

这实际上是“我可以忽略合并中的一些更改吗”,这通常是为了在每个分支上保持不同环境的配置而提出的(这也是这个问题的基本内容)

根据行号或正则表达式决定如何管理合并的工具最终将不得不做出假设,而通用工具很难验证这些假设。出于这个原因,我认为git本身不尝试支持这样一个特性是合理的。如果您知道这样的假设适用于您,那么您可以编写一个合并驱动程序来满足您的需要

如果你能安排一些事情,使你想要合并的更改永远不会和你不想要合并的更改在同一个文件中,那么这将变得更容易,也不会那么脆弱。然后,您的自定义合并驱动程序可以像
true
命令那样运行no-op,并且
.gittributes
可以用于为您不希望合并其更改的文件指定合并驱动程序。(类似的例子可以在-中找到,当然,除非链接死了)。通过构建工具,这可以安排。[1]

当然,一旦您掌握了这些技术,就不一定有任何理由将配置的选择与分支联系起来。您可以有一个“dev config file”和一个“prod config file”,并为每个构建(或每次运行)指定一个正确的文件。此时不将配置文件保存在源代码管理中可能更明智

--


[1] 假设您有一个文件,其中包含要合并的更改和不想合并的更改。您可以为不希望合并的更改添加占位符,而实际值则会放入一个
env config.txt
文件中。因此,您的构建知道如何读取
env config.txt
并用它在那里找到的值替换占位符,然后您根本不需要跨分支合并
env config.txt

您可能可以通过将旧主文件重命名为新分支中的新文件来模拟这种情况,并重命名您的新更改,使其具有相同的新文件,然后合并。在git冲突中,您可能会有选择地接受您和他们的内容。如果您想要分支特定的内容,那么构建分支特定内容的签出后钩子可能是最方便的,请参见您的问题中的示例,我了解到foo是1)存储库(或项目?)2)文件3)程序。直截了当地遵守你的条款,否则很难沟通。我假设foo只是你的回购协议,在这种情况下,它的名字在这里是无关的。