【发布时间】:2016-07-16 23:08:43
【问题描述】:
在处理合并时,我无法使 GIT for TFS 在 Visual Studio 中正常工作。基本上,当我提取最后一个版本的代码时发生的每个合并操作都是一场噩梦。
我专门讨论的是从同一分支中提取其他人的代码时发生的合并(即我不是谈论涉及多个分支的场景)。
我也是特指Visual Studio的内置GIT插件,所以如果有我知道的命令行命令(比如rebase),请不要建议执行是 IDE 中的另一种解决方案(“你不能” 将是一个有效的答案)。
重现问题的方法如下:
- 有两个开发人员 A 和 B 在同一个分支上工作
- 开发者 A 推送一些修改文件 F1 和 F2 的提交
- 开发者 B 修改文件 F1 和 F3
- 开发者 B 在 F1 和 F3 上提交修改
- 开发人员 B 执行拉取操作:Visual Studio 检测到文件 F1 上的冲突(这是预期的)
- 开发者 B 解决 F1 上的冲突
现在问题来了:对于 B,所有文件 F1、F2 和 F3 都处于已修改状态。为什么?开发人员 B 只修改了文件 F1 和 F3。 我没有看到 F2 处于已修改状态的正当理由,因为 B 没有修改它。
我了解本地F2文件和pull之前不一样,但是问题是B在push之前基本上不能回顾他在F1和F3上的改动,因为都是别人的工作(在上面的简化情况下,在 F2 上)也出现在他的更改列表中。
在我们的现实世界场景中,有多个开发人员在同一个分支上工作,每次合并都是分支历史中的一次重大失败:Visual Studio 基本上显示了一堆 50 左右每次合并都修改了文件(当开发者只修改了 1 或 2 个文件时)。
此问题总是出现在最新的 Visual Studio 2013 中。Visual Studio 2015 似乎足够聪明,不显示 F2 已修改,但不是总是。
如何解决此问题?目前,GIT 是一个在 Visual Studio 中使用的 PITA。
编辑:
这是一个视觉示例。在左侧,VS 2013 中显示的历史记录:大量修改文件。在右侧,与 VS 2015 中显示的完全相同的历史记录(相同的存储库、相同的机器、相同的提交......等等)。显然 VS 2015 显示了一些不同且稍好一些(我只看到了我的更改)。请注意,这并不总是那样工作,有时 VS 2015 会显示我没有修改的文件,就像 VS 2013 一样。
这个问题是关于我将要推送一个合并的结果时的这种行为,但是当我简单查看一个旧合并的历史时,它完全一样,如下所示:
问题是:
- 这是一个错误吗?
- 如果没有,是否记录在案?
- 无论如何,我应该如何使用 GIT,尤其是使用 VS 2013,就如上所示的不一致问题?
【问题讨论】:
-
所以开发者B修改了F1和F3,但是没有推送到远程分支,对吧?
-
@TriskalJM 是的,就是这样
-
通常您不会查看未提交的合并来尝试确定两个分支的不同之处。在完成并提交合并后,您通常会将分支与上游分支进行比较。 git-scm.com/book/en/v2 和 gitforvisualstudio.com 可能有助于阐明其中的一些概念。
-
一个小建议。学习如何使用 git bash。这样你就可以一直使用 git。现在你在 Visual Studio 工作,几年后你可能会在 Webstorm 或 Eclipse 或你有什么工作。学习每个单独的集成 git 工具会很麻烦,所以我真的建议学习可用的通用 git 工具。
-
@Edvin 好吧,我使用 Visual Studio 已经 10 多年了,而且我从未在 VS 之外做过任何与源代码控制相关的基本任务(文件差异除外)。老实说,因为 GIT,我不想现在开始。如果我的简单问题没有解决方案,要么 GIT 要么 VS 坏了。
标签: git visual-studio visual-studio-2013 tfs visual-studio-2015