TFS中的统一差异

18

有人知道是否可以生成统一的差异,并且如果可以,应该如何操作吗?

谢谢。


可能是使用TFS创建补丁的重复问题。 - sloth
3个回答

18

这是tf diff /shelveset:<set> /format:unified。然而,需要注意的是,与大多数现代版本控制系统不同,据我所知TFS实际上无法使用修补程序文件。也就是说,您不能将差异的结果应用于一组文件以获得相应的更改。(大多数人所做的是压缩更改的文件并且替换为“补丁”,非常不理想。)


约翰,你知道如何将结果输出到一个 diff 工具而不是命令窗口吗?我无意中发现,使用 /options:? 命令会进入我的默认合并工具(TortoiseMerge.exe),如果没有 /format:unified 选项,但我无法在启用统一选项时进入该工具。此外,我只能看到自己的 shelvesets - 想要查看团队的所有 shelvesets - 是否可能,还是必须从服务器运行 tf.exe? - sydneyos
完美-谢谢。对于像我这样不知道的其他人,tf.exe在这里(除非您安装在其他地方)- C:\ Program Files \ Microsoft Visual Studio 9.0 \ Common7 \ IDE。这是一个参考:http://tutorial.visualstudioteamsystem.com/details.aspx ? item = 38。 - sydneyos
我找到了如何将其输出到 .diff 文件的方法。输入命令:“tf diff /format:unified [/shelveset:<set>] >filename.diff”,然后,如果您安装了任何可以处理 .diff 格式的软件(如 TortoiseSVN),只需打开它。et voila! - sydneyos
抱歉,我刚刚才看到你之前的评论。将输出导向标准输出通道是我也会选择的方法,所以听起来你已经准备好了! - John Feminella
我在这里创建了一个功能请求: https://connect.microsoft.com/VisualStudio/feedback/details/631052/ability-to-import-or-use-a-unified-diff-patch-file-in-tfs - Rami A.

17

这是我通常做的:

  • 从tf命令行生成统一的差异(diff)以获取补丁文件

tf diff /recursive /format:unified .  >> diff.patch 
  • http://gnuwin32.sourceforge.net/packages/patch.htm下载补丁工具

  • 使用以下命令应用补丁

  • patch.exe -p0 < diff.patch
    

    显然,这假设源文件已经检出。如果没有,特别是在应用跨分支的补丁时,编写一个简单的 shell 脚本来遍历 diff 文件,获取文件路径并使用 tf edit 命令对其进行编辑。


    对于我的设置(Windows 7、TFS 2013),从TFS 2013创建补丁是可以的,但是补丁工具不能将这些补丁应用于相似的文件。响应是:“在输入行6处找不到要打补丁的文件 也许您使用了错误的-p或--strip选项?” - ozkolonur

    0

    这是SubVersion和其他版本控制工具中一个持续存在的特性差异(请原谅双关语),被微软所认可。我相信很快会出现解决方案,但在此之前,我已经想出了一个解决方案:

    1. 构建一个Windows窗体应用程序,它将接受4个字段作为命令行参数(filepath1、label1、filepath2、label2),并返回两个文件的字符串统一差异(可能输出到一个丰富的文本框或其他地方)。我有一个,但我认为它还不够完善,不能放在CodePlex上。有几个托管的Diff库。

    2. 将Visual Studio的源代码控制比较功能设置为指向您的差异应用程序。确保它能正确打开和比较。

    3. 构建一个Windows窗体补丁应用程序,它将把补丁应用到一个文件夹中。该应用程序还必须在每个文件被打补丁时进行检出(有趣!)。

    4. 设置两个工作区,一个是通常的工作区,另一个是MyWkSpace_PATCH。这用于打补丁。

    我还需要完成第三点,但这将为我提供与SubVersion类似的功能。我会让你知道第三点进展如何!


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