mat*_*oor 5 diff tfs tfs2008 tfs2010
我正在尝试生成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 修补程序应用程序无法识别文件名,因为这些行应仅包含文件名而不包含任何其他信息.如果我在这些行上删除文件名后面的文本,补丁将成功运行.所以我的问题是:是否有可能从tf diff生成diff文件而没有标题中的这些信息,以便它与补丁兼容?
有一种替代方法,比如应用正则表达式并替换这些行,但这将是最后一次尝试使它工作.
谢谢
UPDATE
最后,我结束了regex从行中删除那些不必要的信息,用Unix sed实用程序运行它,我得到了Windows版本MinGW.
sed "s/^\(+++\|---\)\(.*\)\(\.[A-Za-z0-9]\{1,4\}\)\(.*\)$/\1\2\3/" C:\patch.diff > C:\patch.new
patch.diff从tfs输出生成的格式错误的文件patch.new是正确的统一diff文件并与patch实用程序兼容
UPDATE2
经过几个小时的敲击撞墙,我发现在tfsUnicode扩展字符生成的差异文件中,只是转义或用其最接近的ASCII表示替换.
因此,例如,如果代码具有ä字母,则在输出diff文件中它将被简单的a字母替换.
这使得从tfs实用程序生成的diff文件毫无用处.
这显然是一个错误.
仅供参考: 我使用的是vs2010和团队基础服务器2010.
对于它的价值,我也无法弄清楚。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
:/
| 归档时间: | 
 | 
| 查看次数: | 862 次 | 
| 最近记录: |