[英]Git - how to force merge conflict and manual merge on selected file
我们维护的 Web 应用程序具有公共主分支和许多并行分支,每个安装一个,每个都有很少的特定更改。 源代码在 git 中管理,当我们需要将功能和错误修复从主分支转移到并行分支时,它是一个了不起的工具。 但是很少有敏感的文件和自动合并通常会产生不好的结果。 因此,如果可以以某种方式标记它们,合并会容易得多,并且每次合并都会导致需要手动合并的冲突。
我搜索了一个答案:
编辑:变体 4. 描述
选项 5,自定义合并驱动程序,可能是最接近您想要的方式。 这非常容易做到。 下面是一个我认为应该让你非常接近你想要的行为的例子。
首先,创建一个名为merge-and-verify-driver
的合并驱动程序脚本。 使其可执行并将其放在合适的位置(您可能需要考虑将此脚本签入 repo,甚至,因为 repo 的配置文件将依赖于它)。 Git 将执行这个 shell 脚本来合并敏感文件:
#!/bin/bash
git 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
模式匹配的文件都应该使用自定义合并驱动程序。 显然,您需要使用适合您的文件的模式。
这两个命令似乎与使用自定义合并驱动程序具有相同的效果:
git merge --no-commit your_target_branch
git checkout --conflict merge . (do not forget the . and run it in the top dir of the repository)
第一个命令在创建合并提交之前停止合并,第二个命令将两个分支中修改的所有文件标记为冲突以解决,即使最初没有冲突。
注意:本文“ 为 PO 文件编写 git 合并驱动程序”说明了手动合并文件时可以执行的操作:您可以对其进行预处理,以便手动合并准备好某些数据。
例如,可以使用git merge-file
在合并之前解密(并重新加密)文件(!)
在您的情况下,以非 0 状态退出合并驱动程序可确保合并将是手动合并。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.