Condividi tramite


Comando Merge (controllo della versione di Team Foundation)

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Visual Studio 2019 | Visual Studio 2022

Il tf merge comando applica le modifiche da un ramo a un altro in controllo della versione di Team Foundation (TFVC).

Nota

I risultati di questo comando non si riflettono nel server Azure DevOps fino a quando non si esegue un'operazione di archiviazione. Per altre informazioni, vedere Sviluppare codice e gestire le modifiche in sospeso.

Prerequisiti

Per usare il merge comando, è necessario disporre dell'autorizzazione Estrazione impostata su Consenti per la cartella dell'area di lavoro che contiene destinatione è necessario disporre dell'autorizzazione Lettura impostata su Consenti per la cartella dell'area di lavoro che contiene .source Per altre informazioni, vedere Autorizzazioni tfvc predefinite.

Sintassi

tf merge [/recursive] [/force] [/candidate] [/discard] 
[/version:versionspec] [/lock:none|checkin|checkout] [/preview] 
[/baseless] [/nosummary] [/noimplicitbaseless] [/conservative] [/format:(brief|detailed)] [/noprompt] [/login:username,[password]] source destination

Parametri

Argomenti

Argomento

Descrizione

<versionspec>

Fornisce un valore come C2 per l'opzione /version . Per altre informazioni su come TFVC analizza una specifica di versione per determinare quali elementi si trovano all'interno del relativo ambito, vedere Usare i comandi di controllo della versione di Team Foundation.

<source>

Specifica il file o la cartella da usare come origine dell'unione.

<destination>

Specifica il file o la cartella da usare come destinazione dell'unione.

<username>

Fornisce un valore all'opzione /login . È possibile specificare un username valore come DOMAIN\username o username.

Opzioni

Opzione

Descrizione

/recursive

Corrisponde alla specifica dell'elemento source nella directory corrente e a tutte le sottocartelle.

/force

Ignora la cronologia unione e unisce le modifiche specificate dall'origine alla destinazione, anche se alcune o tutte queste modifiche sono state unite in precedenza.

/candidate

Stampa un elenco di tutti i set di modifiche nell'origine che non sono ancora stati uniti nella destinazione. L'elenco deve includere l'ID del set di modifiche che non è stato unito e altre informazioni di base su tale insieme di modifiche. Un asterisco per un determinato risultato indica che è stato parzialmente unito, ovvero alcune delle modifiche nel set di modifiche sono state unite e altre modifiche non sono state unite.

/discard

Non esegue l'operazione di unione, ma aggiorna la cronologia di merge per tenere traccia dell'avvenuta unione. In questo modo viene rimosso l'utilizzo di un insieme di modifiche per un'unione specifica.

/version

Per un'unione selettiva, questa opzione specifica l'intervallo che deve essere unito alla destinazione. Per un'unione di recupero, questo parametro specifica la versione prima della quale devono essere unite tutte le modifiche non unite.

Per un'unione selettiva, l'intervallo di versioni indica i punti iniziale e finale del set di modifiche da unire. Ad esempio, se si tenta di unire la versione 4~6, i set di modifiche 4, 5 e 6 vengono uniti.

/lock

Specifica un tipo di blocco o rimuove un blocco da un elemento. Per altre informazioni, vedere Informazioni sui tipi di blocco.

Opzioni di blocco:

  • None: non inserisce un blocco su un elemento e rimuove qualsiasi blocco esistente dall'elemento.

  • Checkin: altri utenti possono archiviare gli elementi specificati, ma non possono archiviare le revisioni nei file bloccati fino a quando non si rilascia il blocco eseguendo un'archiviazione. Se uno degli altri utenti ha bloccato uno degli elementi specificati, l'operazione di blocco ha esito negativo.

  • Checkout: impedisce agli utenti di eseguire l'archiviazione o l'estrazione di uno degli elementi specificati fino a quando non si rilascia in modo esplicito il blocco. Se altri utenti hanno bloccato uno degli elementi specificati o se sono presenti modifiche in sospeso per qualsiasi elemento, l'operazione di blocco non riesce.

/preview

Mostra un'anteprima dell'unione.

/baseless

Esegue un'unione senza una versione di base. Ciò significa che consente all'utente di unire file e cartelle che non hanno una relazione di merge. Dopo un'unione senza base, esiste una relazione di merge e le unioni future non devono essere senza base.

Nota

Le unioni senza base non possono eliminare i file nella destinazione. È possibile eseguire manualmente tali modifiche.

/noimplicitbaseless

Specifica che TFVC non eseguirà un'unione implicita senza base tra due elementi con lo stesso nome relativo in due alberi di controllo della versione non correlati.

/nosummary

Omette il riepilogo dei conflitti, degli errori e degli avvisi.

/noprompt

Elimina eventuali richieste di input da parte dell'utente.

/conservative

Genera più conflitti quando si unisce un ramo a un altro.

/format

Specifica i formati di riepilogo dei conflitti di unione:

  • Brief (impostazione predefinita): riepiloga solo il numero totale di conflitti, avvisi ed errori.
  • Detailed: riepiloga non solo il numero totale di conflitti, avvisi ed errori, ma elenca anche i dettagli su ogni conflitto.

Nota

Questa opzione si applica solo quando l'output contiene un riepilogo dei conflitti. Non è possibile visualizzare il riepilogo se viene usata l'opzione /nosummary o l'unione ha causato meno di 10 conflitti, avvisi ed errori.

/login

Specifica il nome utente e la password per autenticare l'utente con Azure DevOps.

Osservazioni:

È possibile usare il merge comando dell'utilità della tf riga di comando per applicare le modifiche in un ramo di origine esistente a un ramo di destinazione esistente. È possibile unire una singola revisione o un insieme di modifiche completo al ramo di destinazione. È possibile unire le modifiche dall'origine al ramo di destinazione o dalla destinazione al ramo di origine.

Il merge comando consente anche di eseguire query per le modifiche in un ramo di origine che non è stata eseguita la migrazione al ramo di destinazione. Il comando consente inoltre di indicare che alcune modifiche non verranno mai unite dall'origine alla destinazione e non devono più essere visualizzate come candidati per un'operazione di unione.

Per altre informazioni su come usare l'utilità della tf riga di comando, vedere Usare i comandi di controllo della versione di Team Foundation.

Merge senza base

Usare l'unione senza base per unire gli elementi che non sono direttamente rami l'uno dall'altro. Per eseguire un'unione senza base, è necessario usare il tf merge comando . Quando si esegue un'unione senza base, TFVC non dispone di alcuna informazione sulla relazione dei file nei rami. In un'unione senza base, è necessario eseguire risoluzioni manuali dei conflitti. Dopo aver eseguito l'unione senza base e risolto eventuali conflitti, tfvc registra la cronologia unione e stabilisce una relazione tra le cartelle e i file.

Quando si esegue tf merge, tfvc esegue un'unione implicita senza base tra elementi con lo stesso nome relativo in due alberi controllati dalla versione precedentemente correlati. Ad esempio, è possibile unire i rami $SRC correlati e $TGT. Entrambi i rami contengono un file non correlato denominato a.txt. Quando si esegue tf merge, tfvc stabilisce una relazione tra i due file a.txt se i due file sono uguali, la crittografia conforme a FIPS è disabilitata e il file di origine non è correlato ad altri file nella destinazione.

Se si esegue tf merge con l'opzione /noimplicitbaseless impostata, quando TFVC tenta di unire i due rami, i due file a.txt creano un conflitto dello spazio dei nomi quando si tenta di archiviare le modifiche. Per risolvere il conflitto, è necessario rinominare uno dei file.

Esempi

L'esempio seguente unisce le modifiche da MyFile_beta1 che non sono state unite in MyFile_RTM.

c:\projects>tf merge MyFile_beta1 MyFile_RTM /recursive

L'esempio seguente unisce il set di modifiche 137 in branch2.

c:\projects>tf merge /version:C137~C137 branch1 branch2 /recursive

Nell'esempio seguente vengono uniti tutti i set di modifiche fino al set di modifiche 137 in branch2.

c:\projects>tf merge /version:C137 branch1 branch2 /recursive

Nell'esempio seguente viene stampato un elenco dei set di modifiche in branch1 che non sono stati uniti in branch2.

c:\projects>tf merge /candidate branch1 branch2 /recursive

Nell'esempio seguente viene stampato un elenco di insiemi di modifiche in branch2 che non sono stati uniti di nuovo in branch1.

c:\projects>tf merge /candidate branch2 branch1 /recursive

Nell'esempio seguente viene rimosso il set di modifiche 137 come candidato per l'unione in branch2.

c:\projects>tf merge /discard /version:C137~C137 branch1 branch2 /recursive

Nell'esempio seguente vengono eliminati tutti i set di modifiche fino al set di modifiche 137 come candidati per l'unione in branch2.

c:\projects>tf merge /discard /version:C137 branch1 branch2 /recursive