TFS: Come si può annullare il checkout dei file non modificati in un file batch


172

Usiamo un file batch per generare codice e questo controlla automaticamente i file generati da Team Foundation Server (TFS) in modo da poterli rigenerare. La maggior parte di questi file non viene modificata, ma il generatore non lo sa in anticipo.

Il comando "tfs undo" annulla il checkout, ma richiede se alcuni sono stati modificati (cosa che non vogliamo fare). Inoltre, non vogliamo controllare subito i file generati.

Esiste un comando (o una serie di comandi) per annullare il checkout di tutti i file non modificati senza richiedere all'utente?


Si noti che l'annullamento manuale di tutte le modifiche con l'aspettativa di scegliere "No a tutti" quando richiesto sui file che sono stati modificati non funzionerà correttamente, poiché annullerà le ADDmodifiche senza richiedere conferma (vedere la risposta di Ray ).
Elaskanator,

Risposte:


202

Dai un'occhiata al comando Annulla invariato di Power Tools del Team Foundation Server, agosto 2011

c:\myProject> tfpt uu . /noget /recursive

Grazie Matt Florence per l'aggiornamento del link.

Grazie Ray Vega per la sintassi reale .


1
Questo dovrebbe essere modificato / unito per contenere le informazioni di utilizzo come parte del contenuto della risposta.
Mc


17
hmm, qualcosa che quasi tutti fanno più volte al giorno: "Mettiamolo in un programma di installazione separato chiamato Power Tools" ... sigh
vidstige

1
@Mike Chaliy penseresti. Sto provando TFS in questo momento, e stavo cercando come fare questo e sono finito qui.
vidstige,

3
Non funziona se le modifiche sono unite. Sembra che tu consideri sempre un'unione come una vera modifica, anche se non c'è alcuna modifica al file e non c'è alcuna opzione per capovolgere quel comportamento. Va bene come comportamento predefinito, ma a volte non è quello che vuoi.
user1164178

124

Installare Power Tools di Team Foundation Server ed eseguire quanto segue dalla riga di comando utilizzando tfpt.exe nella directory principale dell'area di lavoro del progetto:

c:\myProject> tfpt uu . /noget /recursive

L'inclusione /nogetè altamente raccomandata poiché impedisce un "aggiornamento" forzato di tutti i file del progetto che, a seconda del numero totale, possono richiedere tempi estremamente lunghi.


12
Questa dovrebbe essere la risposta accettata, ha tutti i dettagli rilevanti (come dimostrato dal punteggio più alto).
rikoe,

7
Freddo. Inoltre, perché non aggiungere questo come "strumento esterno" permanente a Visual Studio. Prendendo questo come esempio: blog.kurtschindler.net/post/… Comando: [dir. Installazione] \ TFPT.EXE Argomenti: uu. / noget / ricorsive Directory iniziale: $ (SolutionDir)
rohancragg,

12
La domanda specifica che si esegue questa operazione senza il prompt , ma nessuna delle risposte sembra risolverla. Se ne hai bisogno, l'opzione / noprompt aggiuntiva è l'opzione che stai cercando. Nella documentazione di PowerTools manca questo! Elenca questa opzione per alcuni dei comandi, ma non questo (UU). Attenzione!
Johnny Kauffman,

1
@ user20358 cddove si trova la directory dello spazio di lavoro (ad esempio, la mia era c:\myProject) o includerlo esplicitamente dopo uu(sostituendo il periodo .con esso)
Ray

Questo ha un interruttore di forza, come / Y o / force? Mi viene sempre chiesto se desideri davvero annullarlo e mi piacerebbe che fosse automatizzato. Metti / Y lì, ma mi dice L'opzione Y richiede un valore.
Squirrelkiller,

118

Grazie @mike & @ray,

Vorrei renderlo più semplice.

In VS, nel menu Strumenti, fai clic su "Strumenti esterni".

Strumenti esterni

Clicca Aggiungi.

Inserisci il titolo.

Comando: tfpt.exe

Argomenti: uu. / noget / ricorsivo

Directory iniziale: [puoi scegliere dal pulsante freccia].

Annulla invariato nella soluzione

Annulla invariato nel progetto

Due nuovi comandi vengono aggiunti al menu Strumenti.

Usali quando necessario.

Godere,

Ofir


3
Molto bello. Puoi anche fare un altro passo e aggiungere un collegamento. Nota quanto è lontano il comando aggiunto (ad esempio, potrebbe essere il quarto). Quindi vai su Strumenti -> Opzioni -> Ambiente -> Tastiera -> e digita la casella di testo "Mostra comandi contenente" "Strumenti.Esternale" e assegna un collegamento. Ad esempio, ho selezionato Tools.ExternalCommand4 poiché il mio comando di annullamento appena aggiunto era il quarto in basso. Ho quindi assegnato i tasti di scelta rapida Ctrl + Alt + U, Ctrl + Alt + U
Mario

1
Potremmo avere una versione aggiornata di questo? Se trovato tf.exe ma cos'è il comando uu? mi dice Comando non riconosciuto: uu. Grazie per l'aiuto
Shay,

1
@Shay: Funziona per me in VS2015 con gli ultimi utensili elettrici TFS installati.
Igor Malin,

27
  1. Fai clic con il tasto destro del mouse sul tuo progetto
  2. Seleziona annulla checkout, quindi fai clic su OK o qualsiasi conferma sia rimasta ...
  3. Quindi, durante l'annullamento del checkout, per ogni file che contiene REALI modifiche, un prompt ti chiederà di confermare il checkout per quel file ... fai semplicemente clic su "No a tutti"

Visual Studio saprà se il file estratto è stato modificato o non è stato modificato.

ATTENZIONE: questo metodo rimuove anche i nuovi file, ovvero i file che non sono ancora stati archiviati in TFS. Se si desidera conservare questi file, è sufficiente escluderli dal set di file che si "annulla".


14
Be aware that this method also removes added files that are not yet checked in from TFS.... sì, è un squalificatore abbastanza immediato.
shortstuffsushi,

1
Funziona per la mia fusione di rami senza base . Grazie. Di solito in questo caso VS ha contrassegnato Tutti i file nella soluzione come modificati.
KoViMa,

2
questo è un inferno quando nuget esegue il checkout per 10000 file che non devono essere aggiornati.
Ievgen Naida,

13

Aggiornata questa domanda con una risposta quando si lavora solo con TFS2017 e VS2017 / VS2019 .

Gli utensili elettrici non esistono per TFS 2017 e quelli vecchi non possono funzionare bene insieme ad esso, ma a quanto pare la maggior parte delle funzionalità è stata spostata su VS2017 stesso o plug-in (vedi sotto).

Estensione di Visual Studio 2017/2019

Alcune azioni come annullare i file invariati sono state spostate in un file

estensione per VS2017

estensione per VS2019

Posizione pulsante "Annulla invariato":

annulla posizione pulsante invariato

Bug noto

Devi aprire "Explorer controllo sorgente" (e lasciarlo aperto) in modo che "Annulla invariato" sia visualizzato nel menu Azione della vista Modifiche in sospeso. riportato qui .

Estensione di integrazione della shell di Windows

Inoltre, è ancora possibile configurare l'integrazione della shell di Windows tramite un programma di installazione separato che non è più collegato a TFS Power Tools.

L'integrazione della shell di Windows non funziona esattamente come i powertools prima, ma le azioni più importanti hanno funzionato per me.


Ho notato nella domanda che vogliono scriverlo, perché non ho una soluzione, temo
Schwarzie2478,

1
Non riesco a trovare l'opzione "Annulla invariato" in VS2017 dopo aver installato l'estensione collegata. Ho dimenticato qualcosa ?
Erzékiel,

Non l'ho usato molto. Quando l'ho usato per testarlo per il mio cliente, ho dovuto fare un po 'clic su Team Explorer e assicurarmi che ci fossero modifiche da annullare. È possibile che appaia solo quando sono presenti modifiche in sospeso solo per un commit in cui viene visualizzata questa opzione. (o cambia solo un ramo) ...
Schwarzie2478

2
@Erzékiel L'opzione appare solo quando Esplora soluzioni è aperto e pronto.
MatrixRonny,

1
Questa estensione funziona a volte e la sua presenza è collegata all'avvio di TFS Source Control Explorer e non a Solution Explorer (come alcuni hanno erroneamente sottolineato) - non confondere le due diverse finestre di controllo. Però; quando dico a volte, è perché va e viene. In questo momento non ce l'ho, l'ho fatto un mese fa. È un po 'difettoso e temo che altre estensioni sia il colpevole, come Resharper e simili.
Christian,

8

Se si esegue semplicemente il check-back di tutti i file di nuovo estratti, TFS è abbastanza intelligente da capire quali sono le modifiche e includerle solo nel changeset registrato sul server.

TFS lo fa confrontando gli hash MD5 del contenuto dei file prima e dopo il check-in.

Tutto questo presuppone che il processo di generazione stia puramente aggiornando lo stesso set di file, ovvero non si avrà mai il caso in cui un file generato in una generazione precedente non è necessario nella generazione successiva (cioè si vorrebbe sospendere un'eliminazione per quel file) o che i file cambiano nome.

Se il tuo processo potrebbe richiedere la cancellazione dei file, la soluzione migliore potrebbe essere quella di guardare il comando Team Foundation Power Tools ( tfpt ) e utilizzare il comando tfpt online che controllerà solo i file che sono stati modificati e sarà abbastanza intelligente da pend elimina tutti i file non più necessari o cambia nome e aggiunge pend.

In bocca al lupo,

Martin.


6
Grazie per quello, tuttavia non vogliamo controllare i file modificati in quel momento. Quelli modificati non devono essere registrati fino a quando la funzionalità non è stata completata, ma quelli non modificati devono essere rimossi in modo che lo sviluppatore possa rivedere le modifiche.
Robert Wagner,

@RobertWagner Se si dispone di una build gated, è possibile annullare (se non si interrompe il rilevamento di file identici) quando viene visualizzato l'avviso popup che è necessario creare prima le modifiche.
Elaskanator,

6

Attenzione che l'annullamento di TFS non ripristina il valore "Data modifica" del file system. Questo è molto frustrante soprattutto se usi strumenti come robocopy per sincronizzare macchine remote. Anche dopo aver annullato il check-out, se il file è stato salvato con l'upgrade del valore "Data modifica", tale valore aggiornato rimarrà attivo anche dopo il checkout di annullamento.


1
O utilizzare robocopy o un VCS, l'uso di una miscela darà sempre incoerenze. Molto meglio sarebbe popolare ogni macchina direttamente da VCS.
Richard

4

Ci sono un paio di punti riguardanti l'opzione uu per tfpt (raccomandato nella maggior parte delle altre risposte) che all'inizio non mi erano chiari. Innanzitutto, questa è la guida della riga di comando a cui è possibile accedere con il comandotfpt uu /?

Annulla le modifiche in sospeso ridondanti. Se lo stato di un articolo con una modifica in sospeso è lo stesso del server, la modifica viene annullata.

Utilizzo: tfpt uu [/ changeset: changesetnum] [/ recursive] [/ noget] [filespec ...]

  • / changeset Confronta lo spazio di lavoro con gli stati degli elementi nella versione del changeset specificata anziché nell'ultima versione
  • filespec ... Controlla solo i filespec elencati per modifiche ridondanti
  • / ricorsivo Controllare i file specificati con ricorsione completa
  • / noget Non eseguire get prima del controllo

L'opzione / changeset non può essere utilizzata con filespecs o / recursive.

Ora lasciami interrompere il comando consigliato nelle altre risposte.

tfpt uu . /noget /recursive
  • tfpt uu specifica che desideriamo utilizzare il comando "Annulla invariato".
  • . indica (suppongo) che l'attuale directory di lavoro dovrebbe essere utilizzata come filespec.
  • /noget assicura che non venga chiamata "get latest version" prima di annullare i file invariati.
  • /recursiveassicura che non vengano presi in considerazione solo filespec ma tutte le cartelle e i file secondari ricorsivi. Questo sembra dipendere dal filespec - se non ne viene fornito nessuno, viene elaborato l'intero spazio di lavoro.

Quindi ci sono un paio di cose da notare qui riguardo al comando dall'alto ...

  • Dipende dalla directory di lavoro.
  • Non elabora l'intero spazio di lavoro.

Ho scoperto che il seguente comando funziona meglio per me: elaborerà l'intero spazio di lavoro.

tfpt uu /noget

Si noti che dipende ancora dalla directory di lavoro in quanto tfpt la utilizza per determinare quale area di lavoro deve essere elaborata. Ma finché fornisci un percorso a un file o una cartella all'interno dell'area di lavoro, sei a posto.


3

Vedo l'approccio di Ray LionFang sopra. Non posso commentare perché non ho il rappresentante. Anche se mi piace questo approccio poiché non sono necessarie modifiche a Strumenti, ecc ........

  1. Fai clic con il tasto destro del mouse sul tuo progetto
  2. seleziona annulla checkout, quindi fai clic su OK o qualsiasi conferma sia rimasta ...
  3. quindi, mentre annulli il checkout, per ogni file che contiene REALI modifiche, un prompt ti chiederà di confermare il checkout per quel file ... fai semplicemente clic su "No a tutti"
  4. Visual Studio saprà se il file estratto è stato modificato o non è stato modificato. Tieni presente che questo metodo rimuove anche i file aggiunti che non sono ancora stati archiviati da TFS ...

....... c'è un problema con quell'approccio nel colpire "No To All" conserva alcuni file che non sono stati modificati. Sembra fare qualcosa come Annullare i file non modificati fino a quando non colpisce il primo file che viene effettivamente modificato e quindi ignora il resto dei file non modificati, se questo ha un senso. Ho visto questo effetto solo una volta ogni tanto.

Un potenziale rimedio è seguire il processo sopra descritto ma invece di premere "No a tutti", premi "No" per ogni file. Dal momento che ciò può richiedere del tempo a seconda del numero di file con cui stai lavorando, ciò che faccio normalmente è tenere premuto "ALT + N", e accelera tutti i file mentre annulla TUTTI i file non modificati.


si prega di notare che ciò non può essere enfatizzato abbastanza. Anche i file aggiunti di recente al progetto vengono rimossi con questo approccio. Questo è menzionato su serveral anche delle altre risposte.
Christian,

-20

Per quanto ho capito, in TFS se si esegue il checkout di un progetto di gruppo, l'intero progetto viene estratto e non si ha il controllo su quali file vengono eliminati. Se si desidera impedire il check-in a determinati file, è possibile bloccarli.

Al lavoro, tutti odiamo la TFS.


1
Siamo in grado di controllare singoli file e il loro blocco non consentirebbe allo sviluppatore di archiviarli.
Robert Wagner,

5
Stava per votare male, ma "Al lavoro, tutti odiamo la TFS". salvato.
James,
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.