SVNBOOK Chap4 Branching and Merging Using Branches Creating a Branch

De Framalang Wiki.

Cette page fait partie du projet Version control with subversion.

Pseudo Code Rôle Statut
Sub Versif SVF Traduction Terminé
Hotshot92 Relecture Fait
Validation


Sommaire

Titre

Creating a Branch
Créer une branche

Paragraphe 1

Creating a branch is very simple - you make a copy of the project in the repository using the svn copy command. Subversion is able to copy not only single files, but whole directories as well. In this case, you want to make a copy of the /calc/trunk directory. Where should the new copy live? Wherever you wish - it's a matter of project policy. Let's say that your team has a policy of creating branches in the /calc/branches area of the repository, and you want to name your branch my-calc-branch. You'll want to create a new directory, /calc/branches/my-calc-branch, which begins its life as a copy of /calc/trunk.
Créer une branche est très simple : vous faites une copie du projet dans le dépôt avec la commande svn copy. Subversion est capable de copier non seulement de simples fichiers, mais aussi des dossiers entiers. Dans le cas présent, vous voulez faire une copie du dossier /calc/trunk. Où doit résider la nouvelle copie ? Là où vous le désirez, ce choix fait partie de la gestion du projet. Supposons que votre équipe ait pour convention de créer les branches dans la zone /calc/branches du dépôt, et que vous vouliez nommer votre branche ma-branche-calc. Vous créerez alors un nouveau dossier, /calc/branches/ma-branche-calc, qui commencera sa vie en tant que copie de /calc/trunk.

Paragraphe 2

You may already have seen svn copy used to copy one file to another within a working copy. But it can also be used to do a "remote" copy entirely within the repository. Just copy one URL to another:

$ svn copy http://svn.example.com/repos/calc/trunk \
          http://svn.example.com/repos/calc/branches/my-calc-branch \
     -m "Creating a private branch of /calc/trunk."

Committed revision 341.

Vous avez peut-être déjà utilisé svn copy pour copier un fichier vers un autre à l'intérieur d'une copie de travail. Mais il peut aussi être utilisé pour faire une copie "distante" entièrement à l'intérieur du dépôt. Il suffit de copier une URL vers une autre :

$ svn copy http://svn.exemple.com/depot/calc/trunk \
          http://svn.exemple.com/depot/calc/branches/ma-branche-calc \
     -m "Création d'une branche privée à partir de /calc/trunk."

Révision 341 propagée.

Paragraphe 3

This command causes a near-instantaneous commit in the repository, creating a new directory in revision 341. The new directory is a copy of /calc/trunk. This is shown in Figure 4.3, "Repository with new copy". [20] While it's also possible to create a branch by using svn copy to duplicate a directory within the working copy, this technique isn't recommended. It can be quite slow, in fact! Copying a directory on the client side is a linear-time operation, in that it actually has to duplicate every file and subdirectory on the local disk. Copying a directory on the server, however, is a constant-time operation, and it's the way most people create branches.
Cette commande lance une opération quasi-instantanée dans le dépôt, créant un nouveau dossier dans la révision 341. Ce nouveau dossier est une copie de /calc/trunk, comme l'illustre la Figure 4.3, "Dépôt avec nouvelle copie" [20]. Bien qu'il soit aussi possible de créer une branche en utilisant svn copy pour dupliquer un dossier à l'intérieur de la copie de travail, cette technique n'est pas recommandée. Elle peut s'avérer assez lente, en fait ! Copier un dossier côté client est une opération linéaire en terme de durée, puisque chaque fichier et chaque dossier doit être dupliqué sur le disque local. Copier un dossier sur le serveur, par contre, est une opération dont la durée est constante, et c'est la façon dont la plupart des gens créent des branches.

Paragraphe 4

Cheap Copies

Subversion's repository has a special design. When you copy a directory, you don't need to worry about the repository growing huge - Subversion doesn't actually duplicate any data. Instead, it creates a new directory entry that points to an existing tree. If you're an experienced Unix user, you'll recognize this as the same concept behind a hard link. As further changes are made to files and directories beneath the copied directory, Subversion continues to employ this hard link concept where it can. It duplicates data only when it is necessary to disambiguate different versions of objects.

This is why you'll often hear Subversion users talk about "cheap copies." It doesn't matter how large the directory is - it takes a very tiny, constant amount of time and space to make a copy of it. In fact, this feature is the basis of how commits work in Subversion: each revision is a "cheap copy" of the previous revision, with a few items lazily changed within. (To read more about this, visit Subversion's web site and read about the "bubble up" method in Subversion's design documents.)

Of course, these internal mechanics of copying and sharing data are hidden from the user, who simply sees copies of trees. The main point here is that copies are cheap, both in time and in space. If you create a branch entirely within the repository (by running svn copy URL1 URL2), it's a quick, constant-time operation. Make branches as often as you want.

--Sub Versif 22 décembre 2008 à 11:45 (CEST): Je n'ai pas trouvé d'expression toute faite pour traduire "cheap copies" et me suis donc contenté de qualifier ces copies de peu coûteuses. Toutes suggestions sont les bienvenues.

Des copies peu coûteuses

Le dépôt Subversion a un design particulier. Quand vous copiez un dossier, il n'y a pas à s'en faire pour la taille du dépôt - en fait Subversion ne duplique aucune donnée. Au lieu de ça, il crée une nouvelle entrée de dossier qui pointe vers une arborescence existante. Si vous êtes un utilisateur expérimenté d'Unix, vous reconnaîtrez là le concept de lien matériel ("hard link"). Au fur et à mesure des modifications faites aux fichiers et dossiers sous le dossier copié, Subversion continue à employer ce concept de lien matériel quand il le peut. Il duplique les données seulement s'il est nécessaire de lever l'ambigüité entre différentes versions d'objets.

C'est pourquoi vous entendrez souvent les utilisateurs de Subversion parler de "copies peu coûteuses" ("cheap copies"). Peu importe la taille du dossier - la durée de la copie est constante et très faible, tout comme l'espace disque nécessaire. En fait, cette fonctionnalité est à la base du fonctionnement des propagations dans Subversion: chaque révision est une "copie peu coûteuse" de la révision précédente, avec juste quelques éléments modifiés à l'intérieur. (pour en savoir plus à ce sujet, visitez le site web de Subversion et lisez les paragraphes concernant la méthode "bubble up" dans les documents de conception de Subversion)

Bien sûr, cette mécanique interne de copie et de partage des données est transparente pour l'utilisateur, qui n'y voit que de simples copies d'arborescences. Le point essentiel ici est que les copies sont peu coûteuses, aussi bien en temps qu'en espace disque. Si vous créez une branche entièrement à l'intérieur du dépôt (en lançant svn copy URL1 URL2), c'est une opération rapide, à durée constante. Créez des branches aussi souvent que vous le souhaitez.