Commande Merge (Team Foundation Version Control)

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

Visual Studio 2019 | Visual Studio 2022

La commande tf merge applique les modifications d’une branche à une autre dans Team Foundation Version Control (TFVC).

Notes

Les résultats de cette commande ne sont pas reflétés dans le serveur Azure DevOps tant que vous n’avez pas effectué une opération d’archivage. Pour plus d’informations, consultez Développer du code et gérer les modifications en attente.

Prérequis

Pour utiliser la commande merge, vous devez disposer de l’autorisation Extraire définie sur Autoriser pour le dossier d’espace de travail qui contient le fichier destination, l’autorisation Lecture doit être sur Autoriser pour le dossier de l’espace de travail qui contient le fichier source. Pour plus d’informations, consultez Autorisations TFVC par défaut.

Syntaxe

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

Paramètres

Arguments

Argument

Description

<versionspec>

Fournit une valeur telle que C2 pour l’option /version. Pour plus d’informations sur la façon dont TFVC analyse les spécifications d’une version pour déterminer quels éléments se trouvent dans l’étendue, consultez Utiliser les commandes de Team Foundation Version Control.

<source>

Spécifie le fichier ou le dossier qui doit agir comme source de la fusion.

<destination>

Spécifie le fichier ou le dossier qui doit agir comme destination de la fusion.

<username>

Fournit une valeur à l’option /login. Vous pouvez spécifier une valeur username en tant que DOMAIN\username ou username.

Options

Option

Description

/recursive

Correspond à la spécification de l’élément source dans le répertoire actif et à tous les sous-dossiers.

/force

Ignore l’historique de fusion et fusionne les modifications spécifiées de la source vers la destination, même si certaines ou toutes ces modifications ont été fusionnées avant.

/candidate

Imprime une liste de tous les ensembles de modifications de la source qui n’ont pas encore été fusionnés dans la destination. La liste doit inclure l’ID de l’ensemble de modifications qui n’a pas été fusionné et d’autres informations de base sur cet ensemble de modifications. Un astérisque pour un résultat donné indique qu’il a été partiellement fusionné, ce qui signifie que certaines des modifications apportées à l’ensemble de modifications ont été fusionnées et que d’autres modifications n’ont pas été fusionnées.

/discard

Ne fait pas l’opération de fusion, mais met à jour l’historique de fusion pour suivre que la fusion s’est produite. Cela ignore l’utilisation d’un ensemble de modifications pour une fusion particulière.

/version

Pour une fusion sélective, cette option spécifie la plage qui doit être fusionnée dans la destination. Pour une fusion de rattrapage, ce paramètre spécifie la version avant laquelle toutes les modifications non fusionnées doivent être fusionnées.

Pour une fusion sélective, la plage de versions désigne les points de début et de fin de l’ensemble de modifications à fusionner. Par exemple, si vous tentez de fusionner la version 4~6, les ensembles de modifications 4, 5 et 6 sont fusionnés.

/lock

Spécifie un type de verrou ou supprime un verrou d’un élément. Pour plus d’informations, consultez Comprendre les types de verrouillages.

Options de verrouillage :

  • None : ne place pas de verrou sur un élément et supprime tout verrou existant de l’élément.

  • Checkin : d’autres utilisateurs peuvent extraire les éléments spécifiés, mais ils ne peuvent pas archiver les révisions des fichiers verrouillés tant que vous n’avez pas libéré le verrou en effectuant un archivage. Si d'autres utilisateurs ont verrouillé des éléments spécifiés quelconques, l'opération de verrouillage échoue.

  • Checkout: empêche les utilisateurs d’archiver ou d’extraire l’un des éléments spécifiés jusqu’à ce que vous relâchez explicitement le verrou. Si d’autres utilisateurs ont verrouillé l’un des éléments spécifiés ou s’il existe des modifications en attente sur un élément, l’opération de verrouillage échoue.

/preview

Affiche un aperçu de la fusion.

/baseless

Effectue une fusion sans version de base. Autrement dit, permet à l’utilisateur de fusionner des fichiers et des dossiers qui n’ont pas de relation de fusion. Après une fusion sans base, une relation de fusion existe et les fusions futures n’ont pas besoin d’être sans base.

Notes

Les fusions sans base ne peuvent pas supprimer de fichiers dans la cible. Vous pouvez effectuer manuellement ces modifications.

/noimplicitbaseless

Spécifie que TFVC n’effectue pas de fusion implicite sans base entre deux éléments qui ont le même nom relatif dans deux arborescences de contrôle de version non liées.

/nosummary

Omettez le résumé des conflits, des erreurs et des avertissements.

/noprompt

Supprime toutes les invites d’entrée de votre part.

/conservative

Entraîne davantage de conflits lorsque vous fusionnez une branche vers une autre.

/format

Spécifie les formats de synthèse des conflits de fusion :

  • Brief (valeur par défaut) : résume uniquement le nombre total de conflits, d’avertissements et d’erreurs.
  • Detailed : résume non seulement le nombre total de conflits, d’avertissements et d’erreurs, mais également des détails sur chaque conflit.

Notes

Cette option s’applique uniquement lorsque la sortie contient un résumé des conflits. Le résumé ne peut pas être affiché si l’option /nosummary est utilisée ou si la fusion a provoqué moins de 10 conflits, avertissements et erreurs.

/login

Spécifie le nom d’utilisateur et le mot de passe pour authentifier l’utilisateur auprès d’Azure DevOps.

Notes

Vous pouvez utiliser la commande merge de l’utilitaire de ligne de commande tf pour appliquer des modifications dans une branche source existante à une branche cible existante. Vous pouvez fusionner une révision individuelle ou un ensemble de modifications complet vers la branche cible. Vous pouvez fusionner les modifications de la source vers la branche cible ou de la destination vers la branche source.

La commande merge vous permet également d’interroger les modifications apportées à une branche source qui n’ont pas été migrées vers la branche cible. La commande vous permet également d’indiquer que certaines modifications ne seront jamais fusionnées de la source vers la destination et ne doivent plus être affichées en tant que candidats à une opération de fusion.

Pour plus d’informations sur l’utilisation de l’utilitaire de ligne de commande tf, consultez Utiliser les commandes de contrôle de version Team Foundation.

Fusion sans base

Utilisez la fusion sans base pour fusionner des éléments qui ne sont pas directement ramifiés les uns des autres. Pour effectuer une fusion sans base, vous devez utiliser la commande tf merge. Lorsque vous effectuez une fusion sans base, TFVC n’a pas d’informations sur la relation des fichiers dans les branches. Dans une fusion sans base, vous devez effectuer des résolutions manuelles de conflit. Après avoir fait la fusion sans base et résolu les conflits, TFVC enregistre l’historique de fusion et établit une relation entre les dossiers et les fichiers.

Lorsque vous exécutez tf merge, TFVC effectue une fusion implicite sans base entre les éléments qui ont le même nom relatif dans deux arborescences contrôlées par la version précédemment associées. Par exemple, vous souhaiterez peut-être fusionner les branches associées $SRC et $TGT. Les deux branches contiennent un fichier non lié nommé a.txt. Lorsque vous exécutez tf merge, TFVC établit une relation entre les deux fichiers a.txt si les deux fichiers sont identiques, le chiffrement compatible FIPS est désactivé et le fichier source n’est lié à aucun autre fichier dans la cible.

Si vous exécutez tf merge avec l’option /noimplicitbaseless définie, lorsque TFVC tente de fusionner les deux branches, les deux fichiers a.txt créent un conflit d’espace de noms lorsque vous essayez d’archiver les modifications. Pour résoudre le conflit, vous devez renommer l’un des fichiers.

Exemples

L’exemple suivant fusionne les modifications de MyFile_beta1 qui n’ont pas été fusionnées dans MyFile_RTM.

c:\projects>tf merge MyFile_beta1 MyFile_RTM /recursive

L’exemple suivant fusionne l’ensemble de modifications 137 en branch2.

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

L’exemple suivant fusionne tous les ensembles de modifications jusqu’à l’ensemble de modifications 137 dans branch2.

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

L’exemple suivant imprime une liste des ensembles de modifications dans branch1 qui n’ont pas été fusionnés dans branch2.

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

L’exemple suivant imprime une liste d’ensembles de modifications dans branch2 qui n’ont pas été fusionnés dans branch1.

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

L’exemple suivant ignore l’ensemble de modifications 137 comme candidat à la fusion dans branch2.

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

L’exemple suivant ignore tous les ensembles de modifications jusqu’à l’ensemble de modifications 137 en tant que candidats à la fusion dans branch2.

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