Git - 如何在所选文件上强制合并冲突和手动合并

Git - 如何在所选文件上强制合并冲突和手动合并

我们维护具有通用主分支和多个并行分支的Web应用程序,每个安装一个,每个都没有特定的更改。源代码在git中管理,当我们需要从主分支到并行分支的传输功能和错误修正时,它是非常好的工具。但是很少有敏感的文件和自动合并通常会产生不好的结果。因此,如果它们可以某种方式标记并且每次合并都会导致需要手动合并的冲突,那么合并会更容易。

我搜索了一个答案:

  1. 我使用--no-commit--no-ff合并选项,但它不一样。

  2. 这里这里有人问同样的问题,但没有解决方案。

  3. 类似的情况似乎是如何防止文件被合并使用.gitattributes包含:somefile.php merge = ours。我试图找到一些合并选项,它会产生冲突或强制手动合并但到目前为止没有找到。

  4. .gitattributes包含:somefile.php -merge永远不会自动合并,因此强制手动合并。它是90%的解决方案,但我所寻求的是尝试自动合并并将其标记为冲突,无论它是否成功。但这是迄今为止最接近解决方案的。 (...感谢Charles Bailey的澄清......)

  5. 有人建议编写自定义合并驱动程序(12),但如何做到这一点还远未清晰。

编辑:变种4.描述


梵蒂冈之花
浏览 2406回答 3
3回答

喵喵时光机

选项5,自定义合并驱动程序,可能是最接近您想要的方式。这很容易做到。下面是一个我认为应该让你非常接近你想要的行为的例子。首先,创建一个名为合并驱动程序的脚本merge-and-verify-driver。使其可执行并将其放在合适的位置(您可能需要考虑将此脚本检入到repo中,因为repo的配置文件将取决于它)。Git将执行此shell脚本来执行敏感文件的合并:#!/bin/bashgit merge-file "${1}" "${2}" "${3}"exit 1这只是Git本身通常执行的默认合并行为。关键区别在于脚本始终返回非零(表示存在冲突,即使实际已解决合并而没有冲突)。接下来,您需要告诉Git您的自定义合并驱动程序是否存在。你在repo的配置文件(.git/config)中执行此操作:[merge "verify"]         name = merge and verify driver         driver = ./merge-and-verify-driver %A %O %B在这个例子中,我已经放入merge-and-verify-driver了repo的顶级目录(./)。您需要相应地指定脚本的路径。现在,您只需要为敏感文件提供适当的属性,以便在合并这些文件时使用自定义合并驱动程序。将其添加到您的.gitattributes文件中:*.sensitive merge=verify在这里,我告诉Git,任何名称与模式匹配的文件*.sensitive都应该使用自定义合并驱动程序。显然,您需要使用适合您的文件的模式。

胡子哥哥

注意:本文“ 为PO文件编写git合并驱动程序 ”说明了在手动合并文件时可以执行的操作类型:您可以对其进行预处理,以便手动合并以准备好某些数据。git merge-file例如,可以在合并之前使用DECRYPT(并重新加密)文件(!)在您的情况下,以非0状态退出合并驱动程序可确保合并将是手动合并。
打开App,查看更多内容
随时随地看视频慕课网APP