TFS Git - 拉取请求 '合并失败'

4

你好,我在使用TFS和Git拉取请求时遇到了问题。

我们有两个主要分支: - master - develop

所以我从develop创建了新的分支async_data_loading,并对其进行了一些更改。接下来,我提交并推送我的更改到远程async_data_loading,然后创建了一个新的拉取请求,将我的更改合并到远程develop中,但我得到了这个错误:

TFS Merge fail

但是,当我尝试从控制台查找任何合并冲突时,没有需要解决的冲突...我甚至可以将我的更改合并到本地develop而没有任何问题。如下所示,我的本地分支和develop位于同一“分支”上,因此没有冲突需要解决,只是我的分支领先于几个提交。

Branches graph

有人遇到过这个问题并解决了吗?我花了几个小时搜索解决方案,但什么都没找到。

有趣的是,如果我从master创建一个测试分支,然后按照与develop相同的步骤进行操作,将我的测试分支合并到TFS的master上就没有问题。


你正在使用哪个版本的TFS? - Cece Dong - MSFT
我们正在使用的是visualstudio.com上的在线TFS。 - Kacper Ryniec
4个回答

2

好的,问题已经解决了。我们发现其中一个文件夹中的一些文件被复制,它们的名称是其中一位开发人员系统中这些文件的完整路径,类似于:

{PC_name}/Users/{user_name}/{full_path_to_local_file}.cs

当我们删除这些文件时,TFS突然能够在服务器上完成合并,而没有出现任何错误。

让我烦恼的是缺乏任何关于服务器合并失败原因的信息。这肯定是微软将来需要修复的问题...


1
我们遇到了类似的问题。在我们的情况下,TFS用户电子邮件中的尖括号(< >)会使LibGit2Sharp在幕后抛出异常,但在TFS的错误消息中没有显示(与OP描述的结果相同)。我也在这里发布了一个带有堆栈跟踪的答案:

https://stackoverflow.com/a/39841140/2496266


0

我们最近遇到了这个问题,花费了很长时间才找到它。eventvwr非常嘈杂,没有给我们提供任何有用的信息。

为了找到这个问题,我拿了一个代码库的版本,放到了一个不同的仓库中,并将其设置为我们的主线(develop,或其他)。然后,我拿了我们完整的主线,并将其设置为一个特性分支。接着,我进入了我们完整的主线/特性分支的分离模式,并开始创建不同的分支(基本上是二分查找)。对于所有这些情况,我都创建了拉取请求,如果它重现了“合并失败”的问题,我知道我走得太远了。如果我得到了一个干净的合并,我知道我需要再走得更远一些。

最终,我们发现了一个文件名中带有“\”的文件。删除这个文件后,我能够清除所有问题。我怀疑这是因为大多数PR/合并功能都在Windows平台上进行。

如果微软正在听,请更新eventvwr,提供更少噪音和更多实质性的信息。


有趣的是,这不仅限于Windows,合并完全在内存中完成,因此路径分隔符不应该成为问题。我会尝试自己复现这个问题。感谢您的反馈。是的,我们在倾听。 - Edward Thomson
嗯,你在用哪个版本的TFS?我在VSTS上没有遇到这个问题。有趣的是,还有一个不同的问题,但我可以合并具有\的文件名的拉取请求。 - Edward Thomson
抱歉我错过了这个,我会尽快跟我的团队跟进。 - Evan Anger

0

在 TFS 2015.2 + VS 2015.2 中进行测试,无法重现此问题。 当您合并两个分支中同一文件已更改时,经常会发生冲突。请确保在分支之前获取了最新的 develop 分支。


我不使用Visual Studio,而是在Mac上工作。我们使用的是TFS 2015。在分支之间没有冲突 - 我可以轻松地从终端将我的分支合并到本地开发分支,然后推送更改到远程开发分支,而不会因为合并失败而导致git报错... - Marcin D
如果您删除名为async_data_loading的分支并创建一个新的分支,是否能够再现此问题? - Cece Dong - MSFT
是的。我几乎尝试了所有的方法。TFS无法处理从develop分支创建的任何分支的合并。似乎我们在develop分支上有一些问题(也许是历史记录?),但奇怪的是,git本身能够进行合并而没有任何抱怨... - Marcin D
抱歉,我无法在我的端上重现这个问题。你能否尝试创建一个新的git仓库进行测试? - Cece Dong - MSFT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接