我发现一个问题,在合并两个文件时,TFS复制源行。 通过执行以下操作,我已经能够可靠地重现该问题。
1)将以下文件提交到TFS存储库
func removeProductFromFavorites(favoriteKey: String, productId: String) {
guard var favoriteArray = UserDefaults.standard.stringArray(forKey: favoriteKey),
let index = favoriteArray.index(of: productId) else { return }
favoriteArray.remove(at: index)
UserDefaults.standard.set(favoriteArray, forKey: favoriteKey)
}
(请注意,该行上有尾随的制表符)
2)将文件分支到分支KeepTabs 3)编辑文件并提交,如下所示
Line1
(请注意,第1行末尾的标签数量与og文件中的数量相同)。
4)将原始文件分支到一个分支LoseTabs 5)编辑文件并提交,如下所示
Line1
This is Line2
(请注意,第1行尾的制表符已删除)
6)将LoseTabs文件合并到og主干。没有冲突,文件是预期的。
7)将KeepTabs文件合并到og中继。将会发生冲突。请注意,带有选项卡的Line1与没有选项卡的Line1是分开的,截然不同的行...请注意,如何从OG文件复制Line1使其存在于新合并的文件中,而分支和原始行都没有多次包含Line1。
对我们来说重要的是,多个用户可以同时编辑特定文件。这些更改通常采用一种形式,其中有一组注释掉的行,开发人员可以复制->粘贴->取消注释->按目的编辑->完成...或开发人员键入他们将要复制/粘贴的编辑内容- >完成。这就是问题所在。复制粘贴的用户只能复制到最后一个ascii字符,也可以复制整个行。直接输入编辑内容的用户看不到多余的空格。我不想指定用户必须复制/粘贴。我也不想指定用户不能复制粘贴。
我也不想指定文件必须删除尾随空格。 1)因为文件很多,所以这样做很麻烦。 2)由于文件数不胜数,每个文件都有数百行,因此,在打破多行的文字字符串中,任何行末尾都有空格,也可能没有。 3)一次删除并不能防止意外出现空白行踪。
此外,将主干到分支的更改与要应用于主干的更改合并会导致相同的行重复问题。
答案 0 :(得分:0)
我想说这是设计使然。这是解析合并冲突期间的预期行为。
重复行是通过同时选择 Source 和 Target 行引起的。由于它们之间有冲突,因此默认情况下,如果您选择了两者,则将在结果中保留 Source 和 Target 行,然后在结果中进行编辑以接受合并。>
有关详细信息,请参见Resolve merge conflicts。
这将显示有冲突的文件列表。选择一个文件 使您可以接受合并源分支中的更改 使用获取来源按钮或接受您在分支机构中所做的更改 正在合并使用保持目标。您可以通过以下方式手动合并更改 选择合并,然后将更改直接输入到合并中 您在Git设置中指定的工具。
使用修改后的行旁边的复选框在远程之间进行选择 和整个本地更改,或直接在结果中编辑结果 差异视图中 Source 和 Target 编辑器下的编辑器。
完成后 进行更改,请点击接受合并。对所有冲突重复此操作 文件。