更新:2007 年 11 月
在软件开发团队中,如果有多个人在同一项目中工作,常常会出现由于文件差异而造成冲突的情况。利用 Team Foundation 版本控制可以解决这些冲突。在下列操作期间可能会发生冲突:
- 合并各分支之间的更改 
- 将文件获取到工作区 
- 签入文件的新版本 
冲突类型
本主题包含有关下列冲突类型的信息:
版本冲突
文件名冲突
本地覆盖冲突
版本冲突
在 Team Foundation 版本控制中执行签入、获取或合并操作时可能发生版本冲突。在每一种情况下,项沿着不同的路径发展都会导致冲突。
- 签入 两个用户签出了某个文件的最新版本。第一个用户签入了更改,从而创建了一个新的文件版本。当第二个用户尝试签入时,会遇到版本冲突,因为第二个用户的更改不是针对该文件的最新版本进行的。 
- 获取 两个用户签出了某个文件的最新版本。第一个用户签入了更改,从而创建了一个新的文件版本。当第二个用户执行“获取最新版本”操作时,会遇到版本冲突,因为“获取最新版本”操作试图更新工作区中已签出的文件。 
- 合并 一个已分支的文件在两个分支上均被修改。一个用户尝试将其中一个分支上的更改合并到另一分支。该用户将会遇到版本冲突,因为该文件在两个分支上均进行了修改。 
解决版本冲突的方法包括合并更改或者选择一组更改替换另一组更改。有关更多信息,请参见如何:解决两个文件之间的冲突。
版本冲突
| 本地/源文件更改 | 服务器/目标文件更改 | 解决选项 (获取或签入) | 解决选项 (合并) | 
|---|---|---|---|
| 编辑 重命名 撤消删除 | 编辑 重命名 撤消删除 | 为我合并更改(前提是不存在冲突) 在合并工具中合并更改 撤消我的本地更改 放弃服务器更改 | 为我合并更改(前提是不存在冲突) 在合并工具中合并更改 保留目标分支中的更改 从源分支复制项这是默认选择。 | 
| 
 | 删除 | 为我还原文件并合并更改(前提是不存在冲突) 在合并工具中还原文件并合并更改 撤消我的本地更改 还原文件但保留我的更改 | 为我还原文件并合并更改(前提是不存在冲突) 在合并工具中还原文件并合并更改 放弃源分支中的更改 从源分支复制项 | 
| 删除 | 编辑 重命名 撤消删除 | 撤消我的本地更改 放弃服务器更改 | 放弃源分支中的更改 删除目标分支中的项 | 
| 
 | 删除 | 撤消我的本地更改 | 放弃源分支中的更改 | 
| 
 | 
 | 
 | 跳过这些冲突(指示将不处理该类型的冲突)。 | 
文件名冲突
在 Team Foundation 版本控制 中执行签入、获取或合并操作时,可能会发生文件名冲突。在所有这三种情况下,当两个或多个项试图占用源代码管理服务器中的同一条路径时,都会产生该冲突。
- 签入 两个用户均向同一个应用程序中添加了一个文件。巧合的是,两个用户均为新文件选择了相同的名称。一个用户签入了其文件。当第二个用户尝试签入文件时,将发生文件名冲突。 
- 获取 两个用户向一个应用程序中添加了同名的文件。一个用户签入了文件。当第二个用户尝试执行“获取最新版本”操作时,将发生文件名冲突。这是因为在第二个用户已添加文件的情况下不能检索第一个用户的文件。 
- 合并 一个应用程序已被分支并用于两个分支上。在这两个分支上,添加了同名的文件。一个用户尝试将其中一个分支上的更改合并到另一分支。该用户将会遇到文件名冲突,因为在一个文件已添加到目标分支的情况下,不能分支已添加到源分支上的该文件。 
在服务器路径命名空间添加或移动项的任何操作均可能导致文件名冲突。这些操作包括添加、重命名、分支、撤消删除以及合并。
若要解决文件名冲突,您需要选择哪一项将最终占用源代码管理服务器路径。有关更多信息,请参见如何:解决两个文件之间的冲突。
文件名冲突
| 本地/源文件更改 | 服务器/目标文件更改 | 解决选项(获取或签入) | 解决选项(合并) | 
|---|---|---|---|
| 添加 分支 重命名 撤消删除 | 添加 分支 重命名 撤消删除 | 撤消我的本地更改 忽略冲突 | 放弃源分支中的更改 忽略冲突 | 
| 
 | 
 | 
 | 跳过这些冲突(指示将不处理该类型的冲突)。这是默认选择。 | 
本地覆盖冲突
只有在 Team Foundation 版本控制 中执行 Get 操作时才会发生本地覆盖冲突。如果 Get 操作试图写入工作区中的某一可写文件,则会发生这样的冲突。默认情况下,Get 操作只替换只读文件。解决本地覆盖冲突的方法是覆盖文件,或签出文件并合并更改。
可写文件
| 本地/源文件更改 | 服务器/目标文件更改 | 解决选项(获取或签入) | 解决选项(合并) | 
|---|---|---|---|
| 不适用 | 不适用 | 覆盖本地文件/文件夹 忽略冲突 | 不适用 | 
| 
 | 
 | 
 | 跳过这些冲突(指示将不处理该类型的冲突)。 这是默认选择。 | 
| .gif) 说明: | 
|---|
| 不能使用“解决所选冲突”对话框解决需要使用合并工具来解决的版本冲突。此对话框不包含在合并工具中合并更改的选项。此外,如果您选择“为我合并更改”并且发现内部内容冲突,则不能调用合并工具。而是为您显示“未解决的冲突”对话框,该对话框中会说明必须单独解决某些文件。如果只有一个文件无法解决,则该对话框中会包括该文件的文件名。如果有多个文件未解决,该对话框中将提供这些文件的数目。 | 
以下是比较选项:
| 冲突类型 | 源文件更改 | 比较选项(获取或签入) | 比较选项(合并) | 
|---|---|---|---|
| 版本 | 编辑 重命名 撤消删除 | 本地文件与其服务器版本 本地文件与其原始版本 服务器文件与其原始版本 | 源文件与其目标版本 源文件与其基本版本 目标文件与其基本版本 | 
| 
 | 
 | 本地文件与其已删除版本 本地文件与其原始版本 已删除文件与其原始版本 | 源文件与其已删除版本 源文件与其基本版本 已删除文件与其基本版本 | 
| 
 | 删除 | 原始文件与其服务器版本 | 已删除文件与其目标版本 | 
| 
 | 
 | 不适用 | 不适用 | 
| 文件名冲突 | 添加 分支 重命名 撤消删除 | 本地文件与其服务器版本 | 源文件与其目标版本 | 
| 可写文件 | 不适用 | 不适用 | 不适用 |