我正在尝试生成差异文件(补丁文件)并将该补丁应用于某些已部署的文件夹。 我运行以下命令以生成差异文件:
问题出现在加粗的那一行。UNIX中的patch应用程序无法识别文件名,因为这些行应该只包含文件名,没有任何额外的信息。 如果我删除这些行中文件名后面的文本,patch将会成功运行。所以我的问题是:是否可能从tf diff生成没有标题中这样的信息的diff文件,以便与patch兼容?
也有另一种选择,就是应用正则表达式并替换这样的行,但这将是最后尝试使其工作。
谢谢。
更新
最后,我使用
更新2
经过数小时的苦思冥想后,我发现在从
因此,例如,如果代码有
这使得从
显然,这是一个错误。
FYI:我正在使用vs2010和team foundation server 2010。
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 Panicsed
运行它,我从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