gpt4 book ai didi

xml - 可以让 git 最多自动 merge XML 顺序不敏感文件吗?

转载 作者:IT王子 更新时间:2023-10-29 01:02:03 27 4
gpt4 key购买 nike

在 merge Lightswitch 分支时,通常同事会向我也修改过的实体添加属性,这会导致 merge 冲突,因为新的 XML 条目会添加到 lsml 文件中的相同位置。

我总是可以通过接受没有特定顺序的左右来有效地解决这些问题,所以一个在另一个之上,因为在这些特定情况下顺序并不重要。在极少数情况下,这是无效的,无论如何这都会在项目中产生错误,我认为这是一种风险(但没有遇到过)。

有没有办法(最好是文件扩展名)让 git 自动接受同一位置的源和目标更改,并简单地将一个放在另一个下面?

最佳答案

一般来说,这变得相当困难。

Some have attempted to use Git's union merge (现在比早期更容易访问;在那个问题中,您只需在 .gitattributes 文件中添加 merge=union ),但这不起作用一般来说。它可能有时会起作用。归根结底,如果您的 XML 始终是结构化的,以便简单的面向行的联合 merge 生成有效的 XML(基本上,将整个 XML 子元素都放在一行上),并且您总是在添加全新的 XML 子元素。

可以在 Git 中编写自定义 merge 驱动程序。为 XML 编写一个有用的文件很难。

首先我们需要一个XML差异引擎,比如Sylvain Thénault's xmldiff , 为三个 XML 文件构建两个字符串到字符串(或树到树)的编辑( merge 基础,本地或 --ours,以及其他或 --theirs 文件:diff base-vs-local 和 base-vs-ours)。这个特殊的看起来与 Python 的 difflib 类似. (然而,由于引用的论文,它看起来像是产生树移动/嵌套级操作以及简单的插入和删除。对于树到树编辑算法来说,这是自然而合理的事情,并且可能这里实际上是可取的。)

然后,给定两个这样的差异,我们需要代码来组合它们。联合方法是忽略所有删除:简单地将所有添加添加到基本版本(或者,等效地,将“其他”添加添加到“本地”,或将“本地”添加添加到“其他”)。我们还可以将树插入/删除操作组合为“真正的”(非联合式) merge ,甚至可能声明冲突。 (并且允许对树嵌套级别更改进行不同的处理可能会很好,由 DTD 之类的模糊内容驱动。)

据我所知,最后这些部分并没有在任何地方完成。除此之外,我在此处链接的 Python xmldiff 是相当大的代码块(我没有仔细阅读它,也没有尝试安装它,我只是下载它并浏览了一下——它实现了类似 Myers 的算法,以及来自 the Stanford paper 的更高级的“快速匹配/编辑脚本”算法。

关于xml - 可以让 git 最多自动 merge XML 顺序不敏感文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37849771/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com