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)
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)
Risposte:
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/"
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!
C:\temp\shelveset-name
(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:
c:\temp\shelveset-name
dovrà essere rinominata per corrispondere al nuovo ramo. Suggerimento: assicurati di copiare nel posto giusto !!!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.
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. :)
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
I seguenti passaggi possono essere utilizzati per scaffali di piccole dimensioni (~ 20 file o meno).