我正在嘗試生成差異文件(補丁文件)並將此補丁應用於某個已部署的文件夾。我運行以下命令生成的差異文件: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
你可以用'diff -u'比較相同的兩個文件,然後比較差異嗎? – 2012-09-30 18:36:09
其實我沒有得到你的問題,對不起 – matsoor 2012-10-01 11:54:59
在最後我結束了正則表達式,它從線刪除這些不必要的信息,使用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