设置
我有一个项目的存储库;我们称之为foo
。我在存储库中有一个特定的文件;我们称之为bar
。我在foo
有两个分支;用于开发的master
和用于稳定版本的public
。
工作流程
我在master
中进行更改,在那里对它们进行测试,如果它们在测试中幸存下来,则将它们合并到public
中。假设我目前正在使用bar
,这是一个在屏幕上显示视觉内容的程序,并且运行需要特定的时间。为了在测试期间缩短运行时间,我通常会调整几个参数,这样它就不会在整个持续时间内运行,而是只运行一部分。
问题
我在master
中做了很多更改,我希望public
能够反映出来;然而,在master
中,我不想在合并之前(或之后(将所有参数更改回默认的面向用户的参数。我知道[1]存在这些参数的行,还可以选择[2]列出正则表达式模式,其中一行将匹配。
有没有一种方法可以为这个特定的存储库配置git-merge
,使其始终合并为那些特定行的ours
,这样我的参数和配置就不会被覆盖?
这实际上是"我能从合并中省略一些更改吗"的变体,通常询问这个问题的目的是为每个分支上的不同环境保留配置(这也是这个问题的基本内容(。
根据行号或正则表达式决定如何管理合并的工具最终将不得不做出假设,而通用工具很难验证这些假设。出于这个原因,我认为git本身不试图支持这样的功能是合理的。如果你知道这些假设适用于你,那么你可以编写一个可以满足你需求的合并驱动程序。
如果你能安排好事情,使你想合并的更改与你不想合并的变更永远不在同一个文件中,这将更容易,也不那么脆弱。然后,您的自定义合并驱动程序可以像true
命令一样运行no-op,.gitattributes
可以用于为那些您不想合并其更改的文件指定合并驱动程序。(类似的例子可以在http://www.mcclellandlegge.com/2017-03-20-customgitmergedriver/-当然,除非链接失效(。有了构建工具,这是可以安排的。[1]
当然,一旦掌握了这些技术,就不一定有任何理由将配置的选择与分支联系起来。您可以有一个"dev-config文件"和一个"prod-config文件",并为每个构建(或每次运行(指定正确的文件。在这一点上,不将配置文件保持在源代码管理中可能是明智的。
--
[1] 假设您有一个文件,其中包含要合并的更改和不想合并的更改。您可以将不想合并的更改放在占位符中,实际值放在env-config.txt
文件中。因此,您的构建知道如何读取env-config.txt
,并用它在那里找到的值替换占位符,这样就根本不会跨分支合并env-config.txt
。