当我从GitHub拉取代码时,如果团队中的其他成员修改了某个文件,Git命令会显示存在未解决的冲突,而Git无法解决。我打开Perforce或Visual Studio 2012来解决冲突,图形工具会显示没有冲突,并快速执行合并操作。
Git是否具有内置的冲突检测/合并工具,与您设置的mergetool/difftool无关?
还是它使用您配置的工具自动合并和检测不可解决的冲突?
我的情况很奇怪,Git显示它无法自动合并,但图形工具却没有问题。
当我从GitHub拉取代码时,如果团队中的其他成员修改了某个文件,Git命令会显示存在未解决的冲突,而Git无法解决。我打开Perforce或Visual Studio 2012来解决冲突,图形工具会显示没有冲突,并快速执行合并操作。
Git是否具有内置的冲突检测/合并工具,与您设置的mergetool/difftool无关?
还是它使用您配置的工具自动合并和检测不可解决的冲突?
我的情况很奇怪,Git显示它无法自动合并,但图形工具却没有问题。
-s <strategy>
--strategy=<strategy>
因此,Git决定何时发生冲突的变更是自主完成的,而不是使用您正在使用的任何外部diff或merge工具(这些工具可能会使用其自己的冲突检测和解决策略)。Git有一个独立于
difftool
的内部合并系统。
这里的帖子是我在git合并策略方面看到的最佳答案。是的,你可以使用-s选项
选择想要的策略。
但你的问题是为什么其他工具如Visual Studio可以合并而git不能。Visual Studio可能有一种相当激进的合并策略 - “自动合并功能通常不会使用您旧版本中的任何内容,因为自动合并功能的默认设置偏爱最近的文件”见这里获取更多信息。
要了解有关与VS 2012一起提供的Merge Tool的更多信息,请参见此帖子,其中Brian Harry深入探讨了他们如何考虑“合并时最小冲突”作为一个关键特性。
关于Perforce,我怀疑他们有类似的合并策略 - git到p4连接器必须使用perforce合并策略来解决问题,我相信它们更积极。