差分ファイル (パッチ ファイル) を生成し、このパッチを既に展開されているフォルダーに適用しようとしています。次のコマンドを実行して差分ファイルを生成しています。
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 ファイル名の後のテキストは、ここにあってはなりません
+++ 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 ファイルを生成することは可能ですか?
正規表現を適用してそのような行を置き換えるなどの代替手段がありますが、それを機能させる最後の試みになります。
ありがとうございました
アップデート
最後に、regex
これらの不要な情報を行から削除し、Unixsed
ユーティリティで実行して、からWindowsバージョンを入手しましたMinGW
。
sed "s/^\(+++\|---\)\(.*\)\(\.[A-Za-z0-9]\{1,4\}\)\(.*\)$/\1\2\3/" C:\patch.diff > C:\patch.new
patch.diff
tfs
出力から生成された不正な形式のファイルです統合された正しい diff ファイルであり、ユーティリティpatch.new
と互換性がありますpatch
更新2
何時間も頭を壁にぶつけた後、tfs
Unicode 拡張文字から生成された diff ファイルが単純にエスケープされているか、最も近い ASCII 表現に置き換えられていることがわかりました。
たとえば、コードに文字が含まれている場合、出力差分ファイルでは単純な文字ä
に置き換えられます。a
これにより、ユーティリティから生成された差分ファイルがtfs
役に立たなくなります。
これは明らかにバグです。
参考までに、 vs2010 とチーム ファウンデーション サーバー 2010 を使用しています。