TFS 统一差异文件生成。标题行与补丁命令不匹配。

5
我正在尝试生成差异文件(补丁文件)并将该补丁应用于某些已部署的文件夹。 我运行以下命令以生成差异文件: tf diff version.asp /format:unified > C:\patch.diff 它会生成类似以下的内容: Comparing local to latest: C:\dev\folder\version.asp File: version.asp =================================================================== --- version.asp(本地)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应用程序无法识别文件名,因为这些行应该只包含文件名,没有任何额外的信息。 如果我删除这些行中文件名后面的文本,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实用程序兼容。
更新2
经过数小时的苦思冥想后,我发现在从tfs生成的差异文件中,Unicode扩展字符只是被转义或用其最接近的ASCII表示替换。
因此,例如,如果代码有ä字母,则在输出差异文件中,它将被一个简单的a字母替换。
这使得从tfs实用程序生成的差异文件变得无用。
显然,这是一个错误。
FYI:我正在使用vs2010和team foundation server 2010。

你能用 diff -u 比较两个相同的文件并对比它们的差异吗? - Colonel Panic
实际上,我没有理解你的问题,抱歉。 - Rustam Shakirov
最终我使用正则表达式从行中删除了那些不必要的信息,使用Unix命令sed运行它,我从MinGW获得了Windows版本。 sed "s/^\(+++\|---\)\(.*\)\(\.[A-Za-z0-9]\{1,4\}\)\(.*\)$/\1\2\3/" C:\patch.diff > C:\patch.new 这里的 patch.diff 是格式不正确的文件,输出的 patch.new 是正确的文件,并且与 patch 实用程序兼容。 - Rustam Shakirov
你的控制台语言环境是什么? - Edward Thomson
我在cmd中找不到任何设置,但是假设cmd默认使用系统区域设置,我的系统区域设置是俄语。 - Rustam Shakirov
2个回答

1

说句实话,我也无法解决这个问题。TFS使用/unified创建了格式不正确的文件。

我通过本地安装git进行了解决:

(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

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

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


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