(Traduction du texte original en anglais : Branch)

Branche

hg branch

hg branches

Le mot branche (ou ramification) est parfois employé pour des concepts qui diffèrent quelque peu, ce qui peut être ambiguë pour les nouveaux utilisateurs de Mercurial.

Les branches se créent lorsque des lignes de développement divergent. Le mot "branche" fait donc référence a une "ligne de développement divergente". Pour Mercurial, une "ligne de développement" est une séquence linéaire de changesets consécutifs.

La fusion de deux lignes de développement est appelée une fusion.

Création d'une branche

Une ramification peut se produire lors de la validation d'un changeset dans un dépôt unique ou en validant des changements divergents sur des dépôts distincts (mais connexes). Deux dépôts sont dit connexes s'ils ont été clonés depuis le même dépôt mais ont ensuite divergé.

Au contraire, une fusion — l'action de fusionner deux lignes de développement divergentes — ne peut être réalisé que sur un seul dépôt. Si vous souhaiter faire une fusion d'une ligne de développement divergente qui n'existe que sur un dépôt connexe, vous devez d'abord faire un pull du head de cette ligne de développement depuis un autre dépôt vers votre dépôt local et ensuite réaliser la fusion.

Dépôt unique

Pour être précis, une branche est créée lorsqu'un utilisateur créé un nouveau changeset C2 dans un dépôt R0, si son changeset parent P possède déjà un enfant C1, donc en ajoutant un second changeset enfant C2 à ce parent P. Ceci ajoute un nouveau head à R0.

Deux dépôts

La création d'une branche peut aussi se produire si deux dépôts différents R1 et R2, contiennent tous deux le même changeset parent P, et qu'un utilisateur valide un nouveau changeset C1 dans R1 en utilisant P comme son parent et qu'un second utilisateur (ou le même utilisateur) valide un autre nouveau changeset dans R2 en utilisant le même changeset P comme parent. De ce point de vue, chacun de ces deux dépôts peut être vu comme une "branche".

En tant que tel, chaque changeset dans Mercurial forme un élément de branche. Un changeset peut donc être dit "appartenant à une branche". Par cette définition, une branche est simplement une séquence linéaire de changesets.

Branches nommées

Mercurial permet de donner des noms aux branches, en utilisant la propriété nom de branche d'un changeset (voir NamedBranches). Si le nom de branche n'est pas renseigné, Mercurial attribue le nom de branche "default". Donc le nom de la branche par défaut d'un dépôt est "default" (ce qui n'est pas affiché lorsqu'on fait, par exemple, un hg log).

La commande hg branches liste tous les noms de branches existantes dans un dépôt.

> hg help branches
hg branches [-ac]

list repository named branches

    List the repository's named branches, indicating which ones are inactive. If -c/--closed is specified, also list branches which have been marked closed
    (see hg commit --close-branch).

    If -a/--active is specified, only show active branches. A branch is considered active if it contains repository heads.

    Use the command 'hg update' to switch to an existing branch.

options :

 -a --active  show only branches that have unmerged heads
 -c --closed  show normal and closed branches

utiliser "hg -v help branches" pour afficher les options globales

La commande hg branch permet de définir un nom de branche, lequel sera utilisé pour les commits ultérieurs.

> hg help branch
hg branch [-fC] [NAME]

set or show the current branch name

    With no argument, show the current branch name. With one argument, set the working directory branch name (the branch will not exist in the repository
    until the next commit). Standard practice recommends that primary development take place on the 'default' branch.

    Unless -f/--force is specified, branch will not let you set a branch name that already exists, even if it's inactive.

    Use -C/--clean to reset the working directory branch to that of the parent of the working directory, negating a previous branch change.

    Use the command 'hg update' to switch to an existing branch. Use 'hg commit --close-branch' to mark this branch as closed.

options :

 -f --force  set branch name even if it shadows an existing branch
 -C --clean  reset branch name to parent branch name

utiliser "hg -v help branch" pour afficher les options globales

Les noms de branche Mercurial peuvent être utilisés pour toutes motivations des utilisateurs. Cependant, une bonne pratique consiste à utiliser les noms de branches avec modération et pour de bon vieux concepts comme "branche de version" (v1, v2, etc.) et non pour de petites évolutions à l'échelle d'un seul développeur.

Certains utilisateurs de Mercurial n'utilisent pas du tout de nom de branche. Et il n'y a bien entendu pas d'obligation à nommer une branche dans Mercurial. Certains utilisateurs trouve cela particulièrement utile, d'autres non. Etablissez et appliquez vos propres conventions.

Un attribut de changeset

(traduction d'un extrait de post de Yao Zhang sur la mailing list de mercurial)

Il y a une différence subtile entre le concept de "ligne de développement divergente" et les noms de "branche" de Mercurial.

Le nom de "branche" de Mercurial est un attribut associé à un changeset. Un nouveau nom de branche peut démarrer au milieu d'une ligne de développement, pas nécessairement à un point de divergence. Par exemple :

hg branch branch-1          # on démarre un nouveau nom de branche
                            # on change quelque chose dans le dépôt
hg commit -m "branch-1"     # le changeset a pour nom de branche "branch-1"

hg branch branch-2          # on démarre un autre nom de branche
                            # on change quelque chose dans le dépôt
hg commit -m "branch-2"     # le changeset a pour nom de branche "branch-2"

Bien qu'il n'y ait aucune "ligne de développement divergente" ci-dessus, le nom de branche Mercurial peut être changé.

Un autre cas se présente : si une "ligne de développement divergente" apparaît par la suite, les deux lignes divergentes vont hériter du nom de la branche de leur parent si on ne démarre pas un nouveau nom de branche.

Voir aussi

Liens externes


FrenchCommand FrenchGlossary

FrenchBranch (last edited 2012-11-11 19:20:45 by abuehl)