2012-07-23 68 views
5

我正在嘗試生成差異文件(補丁文件)並將此補丁應用於某個已部署的文件夾。我運行以下命令生成的差異文件:tfs統一差異文件生成。標題行與補丁命令不匹配

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文本,文件名之後,應該不會在這裏

+++ v ersion.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生成差異文件,以便它與補丁兼容?

還有一種方法就像應用正則表達式並替換這些行,但它是最後一次嘗試使它正常工作。

謝謝

UPDATE

在我結束了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效用

UPDATE2

撞頭靠在牆上的小時後,我發現在由tfs生成的diff文件中,Unicode擴展字符只是簡單地轉義或者用其關閉來代替t ASCII表示。

因此,例如,如果代碼有ä字母,在輸出diff文件中,它將被替換爲一個簡單的a字母。

這使得從tfs實用程序生成的diff文件無用。

這是一個明顯的錯誤。

FYI: 我使用VS2010和Team Foundation Server 2010

+0

你可以用'diff -u'比較相同的兩個文件,然後比較差異嗎? – 2012-09-30 18:36:09

+0

其實我沒有得到你的問題,對不起 – matsoor 2012-10-01 11:54:59

+0

在最後我結束了正則表達式,它從線刪除這些不必要的信息,使用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'實用程序 – matsoor 2012-10-01 11:55:39

回答

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不兼容,那麼這就是你應該報告bug微軟

正如你所說,解決方法是繁瑣地查找和替換。