tfs统一差异文件生成。标题行与patch命令不匹配

时间:2012-07-23 20:53:01

标签: tfs tfs2010 diff tfs2008

我正在尝试生成diff文件(补丁文件)并将此补丁应用于某些已部署的文件夹。我正在运行以下命令来生成diff文件:

tf diff version.asp /format:unified > C:\patch.diff

它产生类似的东西:

Comparing local to latest: C:\dev\folder\version.asp File: version.asp ===================================================================

--- version.asp(local)2011-06-17 09:18 文字,文件名后,不应该在这里

+++ version.asp; 958(服务器)2011-09-19 14:27 同样在这里

@@ -13,7 +13,7 @@
'============================================================
Dim APP_VERSION, APP_BUILD, APP_DATE  
APP_VERSION = 6
-APP_BUILD = 45
+APP_BUILD = 52
%>
\ No newline at end of file
============================================================

问题出现在粗体的行上。 UNIX 修补程序应用程序无法识别文件名,因为这些行应仅包含文件名而不包含任何其他信息。 如果我在这些行上删除文件名之后的文本, patch 将成功运行。 所以我的问题是:是否有可能从tf diff生成diff文件而在头文件中没有这样的信息,以便它与 patch 兼容?

还有一种替代方法,比如应用正则表达式并替换这些行,但这将是最后一次使其工作的尝试。

谢谢

更新

最后我得到了regex,它从行中删除了那些不必要的信息,用Unix sed实用程序运行它,我从MinGW获得了Windows版本。

sed "s/^\(+++\|---\)\(.*\)\(\.[A-Za-z0-9]\{1,4\}\)\(.*\)$/\1\2\3/" C:\patch.diff > C:\patch.new

patch.diff是从tfs生成的格式错误的文件,在输出patch.new上是正确的统一差异文件并与patch实用程序兼容

UPDATE2

经过几个小时的撞击墙后,我发现在tfs生成的差异文件中,Unicode扩展字符只是被转义或用其最接近的ASCII表示替换。

例如,如果代码中有ä个字母,则在输出差异文件中,它将被简单的a字母替换。

这使得从tfs实用程序生成的diff文件无用。

这显然是一个错误。

供参考: 我正在使用vs2010和团队基础服务器2010.

2 个答案:

答案 0 :(得分:1)

对于它的价值,我也想不出来。 TFS使用/ unified创建格式错误的文件。

我使用本地git install解决了这个问题:

(shelve change set)
tfpt scorch
git init 
git add .
git commit -a -m "Original"
git checkout -b "New"
(checkout shelf in tfs)
git add . 
git commit -a -m "Change"
git format-patch master

:/

答案 1 :(得分:1)

如果tf diff /format:unified的输出与diff -u不同且与patch不兼容,那么这是您应该向Microsoft报告的错误

正如您所说,解决方法是繁琐地查找和替换。