我正在尝试生成差异文件(补丁文件)并将此补丁应用到一些已经部署的文件夹。我正在运行以下命令来生成差异文件:
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 (server) 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补丁应用程序无法识别文件名,因为这些行应该只包含文件名而不包含任何附加信息。如果我在这些行上删除文件名后的文本,补丁将成功运行。所以我的问题是:是否可以从 tf diff 生成 diff 文件,而标题中没有此类信息,以便它与patch兼容?
有一种替代方法,例如应用正则表达式并替换此类行,但这将是使其正常工作的最后尝试。
谢谢
更新
最后,我最终regex
从行中删除了那些不必要的信息,使用 Unixsed
实用程序运行它,我从MinGW
.
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
实用程序生成的差异文件毫无用处。
这显然是一个错误。
仅供参考: 我正在使用 vs2010 和团队基础服务器 2010。