Posso annullare la memorizzazione in un ramo diverso in tfs 2008?


105

Supponiamo che uno sviluppatore nel mio team abbia accantonato le modifiche che ha fatto nel ramo A. E io sto lavorando sul ramo B. Posso annullare loshelve delle sue modifiche nel ramo B? (Tramite GUI o prompt dei comandi)


Demo del comando precedente: Unshelve command basics
Rohit

Risposte:


129

Gli strumenti di alimentazione di Visual Studio dovrebbero consentirti di farlo.

C:\src\2\Merlin\Main>tfpt unshelve /?
tfpt unshelve - Unshelve into workspace with pending changes

Allows a shelveset to be unshelved into a workspace with pending changes.
Merges content between local and shelved changes. Allows migration of shelved
changes from one branch into another by rewriting server paths.

Usage: tfpt unshelve [shelvesetname[;username]] [/nobackup]
                     [/migrate /source:serverpath /target:serverpath]

 shelvesetname          The name of the shelveset to unshelve
 /nobackup              Skip the creation of a backup shelveset
 /migrate               Rewrite the server paths of the shelved items
                        (for example to unshelve into another branch)
 /source:serverpath     Source location for path rewrite (supply with /migrate)
 /target:serverpath     Target location for path rewrite (supply with /migrate)
 /nobackup              Skip the creation of a backup shelveset

Ad esempio, per unire un set di scaffali chiamato "Shelve Set Name" creato su Branch1 a Branch2, utilizzare questo:

>tfpt unshelve "Shelve Set Name";domain\userName /migrate /source:"$/Project/Branch1/" /target:"$/Project/Branch2/"

2
Ooohhh ... Curt, penso che tu abbia appena reso la mia giornata. Lo dovrò provare più tardi.
Herms

Da dove prendi gli utensili elettrici?
Guy

3
Sì, gli utensili elettrici DOVREBBERO lasciarti fare questo, ma sfortunatamente l'unione va orribilmente storta ogni volta, quindi è quasi inutile.
Tim Booker

L'unione non è poi così male. Ho scoperto che Auto Merge funziona nel 90% dei casi.
Justin Rudd,

2
L'ho appena provato. Ho spostato molti file all'interno dello shelfset e purtroppo non sembra funzionare bene. È necessario "migrare" manualmente tutti questi file (non esiste nemmeno la selezione multipla). E poi vengono aggiunti come nuovi file all'area di lavoro. Non posso usarlo, perché non posso più unirlo.
Stefan Steinegger

34

Soluzione alternativa a tfpt che evita di dover unire manualmente ogni file

Il problema con lo strumento potente tfs è che stai facendo una "fusione senza base", quindi devi confermare ogni file . Avevo uno scaffale di oltre 800 file e non mi fido mai del pulsante "unione automatica" e non volevo esaminare ogni file a turno, quindi ho dovuto trovare un altro modo!

  • Scarica e installa TFS Shelveset Sidekick .
  • Lo strumento viene visualizzato in "Strumenti" in VS2010
  • Esegui lo strumento "Shelveset Sidekick", fai clic su Cerca per mostrare gli scaffali
  • Fai clic con il pulsante destro del mouse sullo scaffale e seleziona "Esporta scaffale"
  • Salva in una posizione vuota come C:\temp\shelveset-name
  • Ora disponi di una struttura di directory completa contenente SOLO i nuovi file

(Nota: non è presente alcuna barra di avanzamento durante l'esportazione, quindi se si dispone di uno scaffale di grandi dimensioni che richiede molto tempo per l'esportazione, è sufficiente controllare in Esplora risorse (File> Proprietà> Dimensioni) che i file siano ancora in arrivo se si penso che sia congelato).

Ora devi solo copiarli nel nuovo ramo con Windows Explorer.

Questo ha funzionato per me:

  • Controlla prima l'intera soluzione (nel nuovo ramo)
  • Chiudi quella soluzione
  • Porta TFS offline dall'interno di VS ( strumento per farlo ): vedi sotto per capire perché è importante ...
  • Copia i file in Windows Explorer. La struttura della directory in c:\temp\shelveset-namedovrà essere rinominata per corrispondere al nuovo ramo. Suggerimento: assicurati di copiare nel posto giusto !!!
  • Porta VS online
  • Dovrebbe trovare tutte le modifiche e aggiungere i nuovi file
  • Se ti chiede di associare il sourcecontrol assicurati di verificare che il percorso sia corretto per il nuovo ramo.
  • Prova e quindi controlla i nuovi file

Importante: ho scoperto che se non porti prima TFS offline, ti ritroverai con tutti i nuovi file (dal set di modifiche unshelves) visualizzati senza un piccolo segno di spunta rosso e dovrai escluderli e includerli di nuovo per farli aggiungere. Se qualcuno ha una soluzione alternativa a questo problema, mi piacerebbe sapere che l'aggiornamento non sembra funzionare.


Questo metodo è più facile per gli scaffali più grandi ed è quello che ho seguito. Grazie!
Ani

Questo metodo è davvero migliore per gli scaffali più grandi
Aamir

Bene, potresti cavartela senza portare TFS offline. Ma non sono sicuro che ne valga la pena. Quello che ho fatto è stato eseguire l'azione Confronta - in Source Control Explorer dal menu contestuale aperto nella cartella pertinente. È possibile filtrare l'output per mostrare solo gli elementi che sono diversi. Quindi consente di effettuare una selezione multipla su di essi e di estrarli tutti contemporaneamente. Ma immagino che portare TFS offline sia più veloce e più semplice di così.
segna

Sfortunatamente, questo non funziona per me quando devo "aggiungere" modifiche nello scaffale. Viene visualizzato il messaggio di errore "Impossibile recuperare il file archiviato. È necessaria una modifica in sospeso per un file".
John Saunders

@JohnSaunders si intende uno shelveset con qualsiasi aggiunge o esclusivamente aggiunge? Non ho bisogno di farlo da anni :)
Simon_Weaver

1

Le informazioni sullo scaffale includono il percorso specifico a cui va. Sfortunatamente non conosco alcun modo automatico per rimuovere gli scaffali in un luogo diverso da quello in cui è stato accantonato. Le volte che ho voluto fare questo ho dovuto controllare i file equivalenti nel nuovo ramo, unshelve dal vecchio ramo, quindi copiare manualmente i file.

EDIT: Beh, immagino di averlo fatto nel modo più duro. Dovrò provare la soluzione di Curt. :)


0

Ho trascorso una buona quantità di tempo per ottenere questo risultato e ho avuto pochi problemi da risolvere. È possibile, ma qui pochi problemi e poche regole da seguire per evitare questi problemi

Errore:

incapace di determinare l'area di lavoro

Questo particolare problema è stato risolto eseguendo il comando dalla sorgente cartella principale ramo. Questo è contrario ad alcune risposte su SO dove dicono di usare il ramo "target" - no, usa "source":

cd [your !!source!! branch root]
tfpt unshelve /migrate /source:"$/MyCollection/Development/Maint1.1" /target:"$/MyCollection/Development/Maint1.2" "myShelveset;UserName"

Il secondo numero è apparso dopo questo. Sembra che non possa connettersi al server TFS. Quello che ho capito, ho più VS installati e collegati a diversi server TFS. Stavo usando VS12 e avevo spazio di lavoro e connessione al server. Ma non mi rendevo conto che la stessa connessione deve essere replicata in VS13 affinché TFPT2013 funzioni. Si connette allo stesso server e spazio di lavoro.

Ho anche provato a farlo usando TFPT2015 ma l'ho installato e non ha installato TFPT.exe, quindi è stato inutile. Quindi ho provato da TFPT2013 a TFS2015 e ha funzionato per questo particolare comando. Mi chiedo, perché no, se VS12 / 13 funziona bene contro TFS2015?

Riassumere

  • Usa CMD o DevCMD, non importa
  • eseguire comando dalla sorgente cartella principale ramo
  • verificare la connessione di Team Explorer Server per VS specifico
  • TF Power Tools 2013 funziona con TFS v15, almeno l' opzione di migrazione funziona

0

I seguenti passaggi possono essere utilizzati per scaffali di piccole dimensioni (~ 20 file o meno).

  1. Sul set di scaffali e sui rami di destinazione, inizia con l'archiviazione o il rollback di tutti gli aggiornamenti in sospeso.
  2. Nella diramazione dello scaffale, rimuovi i file dallo scaffale applicabile.
  3. Nel ramo di destinazione, controlla tutti i file esistenti che si trovavano nello scaffale non archiviato.
  4. Confronta i file non salvati sul ramo shelfet con quelli sul ramo di destinazione per identificare quei file che richiedono aggiornamenti di unione (se presenti).
  5. Se necessario, eseguire manualmente gli aggiornamenti di unione ai file applicabili del passaggio precedente e salvare questi file nell'area di lavoro del ramo di destinazione.
  6. Copiare gli altri file dello scaffale dall'area di lavoro del ramo dello scaffale all'area di lavoro del ramo di destinazione.
  7. Confronta i nuovi file aggiornati nell'area di lavoro del ramo di destinazione con i file archiviati. Apporta le correzioni necessarie.
  8. Archivia i nuovi file aggiornati nel ramo di destinazione.
  9. Ripristina i file non archiviati nel ramo dello scaffale.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.