签入文件时进行合并并解决冲突
如果在以下情形下签入文件,则可能会出现冲突:
您的文件上的日期戳比签入到 Team Foundation 服务器的版本旧。如果获得文件的较旧版本然后尝试将其签入,则会出现这种情况。
在您获得文件的最新版本直到您尝试将其签入的一段时间内,其他团队成员签入了更改。在这种情况下,即使在同一文件中也可能发生两种更改:
如果您在文件中更改的行与其他团队成员所更改的行不同,则这些更改将被视为简单更改,并且可使用“自动合并所有项”功能来自动合并这些更改。
如果您在文件中更改的行与其他团队成员所更改的行相同,则这些更改将被视为冲突。冲突较为复杂,并且需要手动解决。
解决冲突最初看起来可能很复杂,但它可以帮助了解各种文件冲突以及各种解决方法。有关详细信息,请参阅 MSDN 上的了解文件区别和冲突类型。此外,此主题描述了当您必须在 Microsoft Expression Blend 或 Microsoft Visual Studio Team System 2008 Team Explorer 中解决冲突时将看到的内容,从而有所帮助。
使用“解决冲突”对话框
如果在签入时出现冲突,最初将有两种选择:
自动合并所有项 自动合并冲突。Visual Studio 2008 Team System 中的 Microsoft Team Foundation 服务器管理员应该已经配置了自动合并功能所使用的合并选项。
只有当您在文件中更改的行与其他团队成员所更改的行不同时,自动合并功能才可用,因为在这种情况下,合并是一个简单的过程。如果不是这种情况,则必须手动解决冲突。
说明:
如果冲突是由尝试签入较旧版本的文件所导致的,则自动合并功能通常将不会使用较旧版本中的任何内容,原因是自动合并功能的默认设置会优先选择最新的文件。有关还原为文件早期版本的正确方式的信息,请参阅 MSDN 上的如何:回滚变更集。
解决 手动解决冲突。将出现“解决版本冲突”对话框,其中提供了以下附加选项:
为我合并更改 使用自动合并功能。如果 Expression Blend 检测到您在文件中更改的行与其他团队成员所更改的行相同,则此选项处于禁用状态。
在合并工具中合并更改 提示您确定要接受的更改。如果选择此选项,则会出现合并工具。请参阅下面一节“使用合并工具”。
撤消我的本地更改 删除您对文件所做的更改,实际上是将文件的内容(但不是日期戳)还原为 Team Foundation 服务器上的最新版本。
放弃服务器更改 只应用您进行的所有更改。如果将文件签入,则会删除您之前将文件签出后其他团队成员所做的更改。如果希望还原为文件的早期版本,则将使用此选项。有关还原为文件早期版本的正确方式的信息,请参阅 MSDN 上的如何:回滚变更集。
警告:
在使用此选项之前,请确保通知团队成员您将撤消他们所做的更改。
比较 显示一个窗口,用于比较以下三个文件版本中任意两个版本之间的差异:您的本地副本、您将文件签出后其他团队成员最近签入的副本,以及任一方将文件签出之前存在的原始版本。比较版本将非常有用,可以帮助您决定是要撤消您的本地更改、放弃服务器更改,还是使用合并工具来合并和解决冲突。
![]() |
---|
在解决了冲突之后并在执行任何其他源控件任务之前,最好记住(按 F5)运行并且签入或撤消挂起的更改。例如,如果尝试在解决冲突之后但在签入文件之前获得文件的特定版本,则会要求您再次解决冲突,并且“解决冲突”对话框中有关冲突的描述将变为“您有一个冲突的挂起更改”。 |
使用合并工具
利用合并工具,您将能进行最大程度的控制,因为您可以选择存在冲突的各行,并将它们应用于合并的文件或从合并的文件中删除。
合并工具顶部的两个窗格显示文件的不同版本。您将文件签出之后其他团队成员所签入的版本显示在左边,您的本地副本(尚未签入)显示在右边。在每个窗格中,使用了各种颜色来标识您从其他团队成员签入其更改之前存在的文件原始版本中所更改的行。红色的行表示删除的文本,绿色的行表示插入的文本,蓝色的行表示经过修改的文本。如果顶部两个窗格中的两个文件在同一行中存在更改,则这种更改被视为冲突。
合并工具的底部是第三个窗格。最初,底部的这个窗格显示文件的原始版本,其中已应用了顶部的两个文件中的非冲突更改。
![]() |
在您的本地版本和当前已签入版本中都有更改的行,导致了必须手动解决的冲突。 |
![]() |
存在冲突的行的原始版本。 |
![]() |
您所添加并且已应用于下面的合并文件的行。 |
![]() |
最近签入的文件中更改的行,该行与您所做的更改没有冲突。此行已应用于下面的合并文件,并且无法删除。 |
![]() |
当前签入的版本中删除的行。您不能撤消此更改,因为它未与您的本地版本冲突。 |
底部窗格中由范围矩形标识的冲突必须手动解决。若要接受顶部两个文件中其中一个文件内的更改,请执行下列操作之一:
单击要将其更改应用于底部的文件的行(见下图)。
右键单击要应用其更改的行,然后单击“应用更改”。
右键单击底部文件中的原始行,然后单击“应用左侧的更改”或“应用右侧的更改”。
若要删除已应用的更改,请执行下列操作之一:
从顶部的其中一个文件中,单击已应用其更改的行。
从顶部的其中一个文件中右键单击已应用其更改的行,然后单击“移除更改”。
右键单击底部文件中的原始行,然后单击“移除此冲突的更改”。
应用或删除了顶部两个窗格中的冲突后,底部的窗格将更新,以显示您所进行选择的结果。
![]() |
存在冲突的其中一行。单击希望应用于合并文件的行。 |
![]() |
存在冲突的行的更新版本。 |
如果“应用左右两侧的更改”,则左右两侧的行都将出现在底部窗格中,这样可能会导致生成错误,但是,如果希望在底部窗格中直观地比较左右两侧的行,则这样做可能非常有用。在完成比较后,您可以始终从底部窗格中删除其中一行。
您可以通过以下方法,随时从文件的服务器版本或您的本地文件中应用存在冲突的所有行:在合并工具内单击鼠标右键,指向“解决所有冲突”,然后单击“使用左侧的更改”或“使用右侧的更改”。此方法仅适用于存在冲突的行;它不会删除已更改但不存在冲突的行。
单击“确定”退出合并工具后,请单击“是”保存文件,并单击“关闭”退出“解决冲突”对话框,在签入文件之前,请记住通过(按 Ctrl+Shift+B)生成解决方案或(按 F5)运行解决方案,对合并的文件进行测试。
您可以在 MSDN 上的如何:解决两个文件之间的冲突 中找到有关使用合并工具的简短过程。
查看存在冲突的文件的列表
如果您尝试签入文件,然后在未解决任何冲突的情况下关闭“解决冲突”对话框,则源代码管理系统将跟踪这些文件。您可以随时在“项目”面板中右键单击解决方案,然后单击“解决冲突”来查看仍然存在未解决冲突的所有文件。