2012-07-23 11 views
5

Ich versuche, Diff-Datei (Patch-Datei) zu generieren und diesen Patch auf einige bereits bereitgestellten Ordner anwenden. Ich verwende den folgenden Befehl ein Diff-Datei zu generieren:tfs einheitliche diff-Datei-Generierung. Header-Zeile stimmt nicht überein mit Patch-Befehl

tf diff version.asp /format:unified > C:\patch.diff

Es erzeugt so etwas wie:

Comparing local to latest: C:\dev\folder\version.asp File: version.asp ===================================================================

--- version.asp (local) 2011-06-17 09 : 18Text, nach Dateinamen, sollte

+++ v nicht hier ersion.asp; 958 (Server) 2011-09-19 14.27hier die gleiche

@@ -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 
============================================================ 

Das Problem auf der Linie erscheint, die fett ist. Die UNIX-Anwendung patch erkennt keine Dateinamen, da diese Zeilen nur den Dateinamen ohne zusätzliche Informationen enthalten sollten. Wenn ich Text nach dem Dateinamen in diesen Zeilen entferne, wird Patch erfolgreich ausgeführt. Also meine Frage ist: ist es möglich, Diff-Datei von TF Diff ohne solche Informationen in der Kopfzeile zu erzeugen, so dass es kompatibel ist mit Patch?

Es gibt eine Alternative wie Regex anzuwenden und solche Zeilen zu ersetzen, aber es wäre der letzte Versuch, es zum Laufen zu bringen.

Danke

UPDATE

am Ende i mit regex endete, die von den Linien diese unnötigen Informationen entfernt, führen Sie es mit Unix sed Dienstprogramm, ich erhielt Windows-Version von MinGW.

sed "s/^\(+++\|---\)\(.*\)\(\.[A-Za-z0-9]\{1,4\}\)\(.*\)$/\1\2\3/" C:\patch.diff > C:\patch.new

patch.diff ist malformed Datei von tfs erzeugt und auf der Ausgabe patch.new korrekte einheitliche diff-Datei und kompatibel mit patch Dienstprogramm

UPDATE2

nach Stunden Hämmer gegen die Wand Kopf Ich fand heraus, dass in Diff-Dateien aus tfs Unicode erweiterte Zeichen einfach escaped oder ersetzt durch seine schließt t ASCII-Darstellung.

So zum Beispiel, wenn Code hat ä Brief, in der Ausgabe Diff-Datei wird es durch eine einfache a Brief ersetzt werden.

Dies macht Diff Dateien, generiert von tfs Dienstprogramm, unbrauchbar.

Dies ist offensichtlich ein Fehler.

FYI: Ich bin mit VS2010 und Team Foundation Server 2010

+0

Können Sie die gleichen zwei Dateien mit 'diff -u' vergleichen und dann die Diffs vergleichen? –

+0

Eigentlich habe ich deine Frage nicht bekommen, sorry – matsoor

+0

Am Ende endete ich mit Regex, die diese unnötigen Informationen aus den Zeilen entfernt, führen Sie es mit Unix-Befehl 'sed', ich habe Windows-Version von MinGW. 'sed" s/^ \ (+++ \ | --- \) \ (. * \) \ (\. [A-Za-z0-9] \ {1,4 \} \) \ (. * \) $/\ 1 \ 2 \ 3/"C: \ patch.diff> C: \ patch.new" hier ist 'patch.diff' eine fehlerhafte Datei und auf der Ausgabe' patch.new' ist die korrekte Datei und kompatibel mit 'Patch'-Dienstprogramm – matsoor

Antwort

1

Für das, was es wert ist, ich könnte dies entweder nicht herausgefunden. TFS erstellt fehlerhafte Dateien mit/unified.

Ich arbeitete um eine lokale Git installieren mit:

(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

Wenn die Ausgabe von tf diff /format:unified von diff -u unterscheidet und ist unvereinbar mit patch, dann ist dies ein Fehler, den Sie berichten sollten Microsoft

Wie Sie sagen, ist die Problemumgehung mühsam zu finden und zu ersetzen.