2009-12-29 16 views
16

Qualcuno sa se questo (generando un diff unificato) è possibile e se sì, come?Unified Diff in TFS

Grazie.

+0

possibile duplicato di [Creazione di una patch con TFS] (http://stackoverflow.com/questions/52234/creating-a-patch-with-tfs) – sloth

risposta

13

È tf diff /shelveset:<set> /format:unified. Tuttavia, si noti che a differenza della maggior parte dei moderni sistemi di controllo delle versioni, TFS non può effettivamente funzionare con i file di patch afaik. Cioè, non puoi prendere il risultato del diff e applicarlo a un set di file per ottenere le modifiche risultanti. (Quello che fa la maggior parte delle persone è comprimere i file che sono cambiati e sostituirli come "patch". Ick.)

+0

John, sapresti come inviare i risultati a un diff strumento piuttosto che alla finestra di comando? Ho scoperto per caso che fare/opzioni :? andrebbe al mio strumento di fusione di default (TortoiseMerge.exe) in assenza di un/format: opzione unificata, ma non ho potuto farlo andare lì con l'opzione unificata su. Inoltre, posso vedere solo i miei scaffali - vorrei vedere tutti gli scaffali per il team - è possibile, o devo eseguire tf.exe dal server? – sydneyos

+0

perfetto - grazie.per gli altri come me che potrebbero non sapere, tf.exe è qui (a meno che tu non abbia installato da qualche altra parte) - C: \ Programmi \ Microsoft Visual Studio 9.0 \ Common7 \ IDE. Ecco un riferimento: http://tutorial.visualstudioteamsystem.com/details.aspx?item=38. – sydneyos

+0

Ho capito come ottenere questo output in un file .diff. Digita il comando: "tf diff/format: unified [/ shelfet: ]> filename.diff" Quindi, se hai installato qualcosa (come TortoiseSVN) che gestirà il formato .diff, aprilo. et voilà! – sydneyos

0

Questa è una funzione ricorrente diff (pardon the pun) con SubVersion e altri, ovvero recognised by Microsoft. Credo che appare una soluzione al più presto, ma fino ad allora sono venuto su con una soluzione:

  1. costruire un'applicazione Windows Form che avrà 4 campi come parametri della riga di comando (filepath1, label1, filepath2, Label2) e restituisce una stringa unificata diff dei due file (può essere esportata in una casella di testo rich o qualcosa del genere). Ne ho uno, ma è un po 'difficile da accettare su CodePlex, credo. Ci sono alcune librerie Diff gestite.

  2. Impostare il controllo del codice sorgente di Visual Studio per confrontare la propria app. Assicurati che si apra e si confronti correttamente.

  3. Creare un'applicazione patch di Windows, che applicherà la patch a una cartella. L'applicazione deve anche controllare ogni file come viene corretto (divertente!).

  4. Imposta due spazi di lavoro, il solito e MyWkSpace_PATCH. Questo è usato per applicare patch.

Devo ancora terminare il punto 3, ma questo mi darà alcune funzionalità simili a SubVersion. Ti farò sapere come va il punto 3!

12

Questo è quello che faccio di solito:

  • generare un diff unificato da linea di comando tf per ottenere un file di patch

    tf diff /recursive /format:unified . >> diff.patch 
    
  • utility scaricare patch da http://gnuwin32.sourceforge.net/packages/patch.htm

  • Applicare patch con

    patch.exe -p0 < diff.patch 
    

Ovviamente ciò presuppone che i file di origine siano già stati estratti. Se non lo sono, specialmente quando si applicano patch tra rami, scrivere un semplice script di shell per passare attraverso il file diff, ottenere il percorso dei file e modificarli.

+0

per il mio setup (windows 7, tfs 2013) creare una patch da tfs2013 è ok, ma l'utility patch non può applicare tali patch, a file simili. la risposta è "impossibile trovare il file da applicare alla riga di input 6 Forse hai usato l'opzione -p o --strip?" – ozkolonur