Git 如何合并两个分支上发生冲突更改的yaml文件

Git 如何合并两个分支上发生冲突更改的yaml文件,git,merge,yaml,Git,Merge,Yaml,我有一个YAML文件,它可能在git存储库中的两个不同分支上更改。为了简单起见,让我们从该内容开始,并创建两个分支: a: 1 如果我在一个分支上添加值为1的键b,在第二个分支上添加值为2的键c,并尝试合并这两个分支,我会得到一个合并冲突,可以通过向合并策略-X他们的或-X我们的添加一个参数来解决。不幸的是,在这两种情况下,最终的合并提交都会忽略来自一个分支的更改 如果我理解正确,这是预期的行为,因为git不分析文件的内容,只处理每个分支上的差异。然而,最后我想说的是: a: 1 b: 1 c

我有一个YAML文件,它可能在git存储库中的两个不同分支上更改。为了简单起见,让我们从该内容开始,并创建两个分支:

a: 1
如果我在一个分支上添加值为
1
的键
b
,在第二个分支上添加值为
2
的键
c
,并尝试合并这两个分支,我会得到一个合并冲突,可以通过向合并策略
-X他们的
-X我们的
添加一个参数来解决。不幸的是,在这两种情况下,最终的合并提交都会忽略来自一个分支的更改

如果我理解正确,这是预期的行为,因为git不分析文件的内容,只处理每个分支上的差异。然而,最后我想说的是:

a: 1
b: 1
c: 1

有什么简单的方法可以做到这一点吗?

Git使用简单的基于行的文本匹配来完成合并工作。这通常不足以合并yaml数据。不要试图将任意yaml与Git的合并算法合并。以其他方式进行您自己的合并,将文件的基本版本作为起点,并将文件的两个分支提示版本作为要合并的更改


对于这个特定的示例,联合合并将起作用,如下所示。一般情况下更难,也不受支持。注意,顺便说一下,在Git声明文件上的合并冲突后,您可以提取所有三个输入,然后运行
Git merge file--union
,仅此一次生成联合合并,而无需在
中添加特殊条目。gitattributes

Git使用简单的基于行的文本匹配进行合并。这通常不足以合并yaml数据。不要试图将任意yaml与Git的合并算法合并。以其他方式进行您自己的合并,将文件的基本版本作为起点,并将文件的两个分支提示版本作为要合并的更改


对于这个特定的示例,联合合并将起作用,如下所示。一般情况下更难,也不受支持。顺便说一句,在Git声明文件上的合并冲突后,您可以提取所有三个输入,然后运行
Git merge file--union
,只生成一次联合合并,而无需在
.gittributes

中添加特殊条目。这是否回答了您的问题?不,没有。也可能存在删除和更改密钥的更改。。在我看来,这比我最初认为的要困难得多。回答你的问题?不,没有。也可能存在删除和更改密钥的更改。。我认为这比我原来认为的要困难得多,我会考虑到这一点。但是出于好奇,你可能知道一些相当科学的材料,这些材料涉及将文件的更改合并到类似于yaml、json或xml的树状结构中吗?已经有或曾经有过一些关于生成树状结构数据的合理差异的研究工作,这是进行这种合并的第一部分。这里的主要问题是,我们想检测什么时候树中的某些级别上下移动了。假设我们找到了这样一个匹配,我们会记录从底部到头部的情况,对从底部到他们一侧的情况进行相同的分析,并尝试将这些级别移动与任何单个级别的添加或删除操作结合起来。有趣的是,从这两个版本构造Merkle树并比较节点的散列不起作用或太慢?请注意,YAML通常是一个图,而不是一棵树。根据是否使用其锚点/别名功能,您可能会关心,也可能不会关心。通常,我们希望匹配子节点,即使其中有更改,因此仅对其进行哈希运算不会产生所需的结果。不过,这是一种快速识别相同子树的好方法(这对于减少工作量非常有用)@flyx:这一点很好——不过为了合并的目的,将它们视为未解释的文本可能是明智的(如果您可以从yaml解析器中获得它的话!)。我明白了,我会考虑到这一点。但是出于好奇,你可能知道一些相当科学的材料,这些材料涉及将文件的更改合并到类似于yaml、json或xml的树状结构中吗?已经有或曾经有过一些关于生成树状结构数据的合理差异的研究工作,这是进行这种合并的第一部分。这里的主要问题是,我们想检测什么时候树中的某些级别上下移动了。假设我们找到了这样一个匹配,我们会记录从底部到头部的情况,对从底部到他们一侧的情况进行相同的分析,并尝试将这些级别移动与任何单个级别的添加或删除操作结合起来。有趣的是,从这两个版本构造Merkle树并比较节点的散列不起作用或太慢?请注意,YAML通常是一个图,而不是一棵树。根据是否使用其锚点/别名功能,您可能会关心,也可能不会关心。通常,我们希望匹配子节点,即使其中有更改,因此仅对其进行哈希运算不会产生所需的结果。不过,这是一种快速识别相同子树的好方法(这对于减少工作量非常有用)@flyx:这一点很好——不过,为了合并的目的,将它们视为未解释的文本(如果您可以从yaml解析器获得的话)可能是明智的。