git / diff准确遵循哪些确切的规则来确定冲突?

时间:2014-09-03 18:23:30

标签: git csv diff

完全 git如何确定行之间存在冲突?遵循哪些规则来确定哪些类型的差异构成冲突以及哪些差异可以安全地合并?

对于一个特定的例子,假设我们有两个csv个文件。什么时候git会断定共享记录(即行)的两个csv文件无法自动合并?

例如,假设两个csv包含相同的常见记录集,但其中一个是添加条目,这是否会导致冲突?

2 个答案:

答案 0 :(得分:2)

这取决于用于差异的工具。 通常差异比较线条。如果一行改变了 在修订版本上,同一行在另一个修订版本上修改,如果您尝试合并它们,则会发生冲突。

diff is based on solving the longest common subsequence problem

diff不知道某条线被修改了。它知道删除了一行(或各行) 在文件的两个相同部分之间插入另一个(或多个)。

修订版A:

a b c
d e f
g h i

修订版B:

a b c
d e a f
g h i

$ diff A B

将输出该行d e f已删除 并在文件B中插入了行d e a f 与文件A之间的相同 行a b cg h i

如果文件A被修改为C:

a b c
c
d e b f
g h i

diff将输出同一行被删除, 但是插入了行cd e b f

合并B和C,冲突不仅仅是

d e a f
====
d e b f

d e a f
====
c
d e b f

因此,在短时间内,diff搜索相同的行块。 如果在两个文件上的这些块之间修改了文件(以及修改 不一样),会有冲突。

答案 1 :(得分:0)

如果您不喜欢它处理冲突的方式,您实际上可以使用自己的插件来处理git中的冲突。

但是,请查看此页面以获取更多信息:http://en.wikipedia.org/wiki/Merge_%28revision_control%29#Three-way_merge