5

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

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.difftfs是从输出生成的格式错误的文件patch.new是正确的统一差异文件并与patch实用程序兼容

更新2

经过数小时的撞墙后,我发现在从tfsUnicode 扩展字符生成的差异文件中,只是简单地转义或替换为最接近的 ASCII 表示。

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

这使得从tfs实用程序生成的差异文件毫无用处。

这显然是一个错误。

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

4

2 回答 2

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

:/

于 2012-09-24T06:03:28.547 回答
1

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

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

于 2012-09-30T18:22:04.420 回答