5

差分ファイル (パッチ ファイル) を生成し、このパッチを既に展開されているフォルダーに適用しようとしています。次のコマンドを実行して差分ファイルを生成しています。

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.difftfs出力から生成された不正な形式のファイルです統合された正しい diff ファイルであり、ユーティリティpatch.newと互換性がありますpatch

更新2

何時間も頭を壁にぶつけた後、tfsUnicode 拡張文字から生成された diff ファイルが単純にエスケープされているか、最も近い ASCII 表現に置き換えられていることがわかりました。

たとえば、コードに文字が含まれている場合、出力差分ファイルでは単純な文字äに置き換えられます。a

これにより、ユーティリティから生成された差分ファイルがtfs役に立たなくなります。

これは明らかにバグです。

参考までに、 vs2010 とチーム ファウンデーション サーバー 2010 を使用しています。

4

2 に答える 2

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

:/

于 2012-09-24T06:03:28.547 に答える
1

からの出力がtf diff /format:unifiedと異なり、diff -u互換性がないpatch場合、これはバグであり、Microsoft に報告する必要があります。

あなたが言うように、回避策は退屈な検索と置換です。

于 2012-09-30T18:22:04.420 に答える