Comment créer une succursale?


Réponses:


349

Le branchement dans Subversion est facilité par une fonction de copie très très légère et efficace.

La ramification et le marquage sont effectivement les mêmes. Copiez simplement un dossier entier du référentiel vers un autre endroit du référentiel à l'aide de la svn copycommande.

Fondamentalement, cela signifie que c'est par convention ce que signifie la copie d'un dossier - que ce soit une sauvegarde, une balise, une branche ou autre. Selon la façon dont vous voulez penser aux choses (normalement en fonction de l'outil SCM que vous avez utilisé dans le passé), vous devez configurer une structure de dossiers dans votre référentiel pour prendre en charge votre style.

Styles communs doivent avoir un tas de dossiers en haut de votre référentiel appelé tags, branches, trunk, etc. - qui vous permet de copier l' ensemble de votre trunk(ou sous-ensembles) dans les tagset / ou branchesdossiers. Si vous avez plusieurs projets, vous souhaiterez peut-être reproduire ce type de structure sous chaque projet:

Cela peut prendre un certain temps pour s'habituer au concept - mais cela fonctionne - assurez-vous simplement que vous (et votre équipe) êtes clair sur les conventions que vous allez utiliser. C'est également une bonne idée d'avoir une bonne convention de dénomination - quelque chose qui vous indique pourquoi la branche / balise a été créée et si elle est toujours appropriée - envisagez des moyens d'archiver les branches obsolètes.


211
"svn copy" a l'avantage de conserver l'historique avant la ramification. La copie manuelle vers un autre répertoire ne le sera pas.
WhyNotHugo

5
Notez également que c'est généralement une mauvaise idée de baliser ou de dériver des sous-répertoires de "trunk". Cela rend difficile de garder une trace du sous-répertoire qui a été ramifié, et la plupart des outils seront confus par ces branches (par exemple, changer de branche signifiera la structure de répertoire des changements de WC, ce qui confondra les IDE et les outils de construction). Branche toujours "tronc".
sleske

1
@Will svn cputilise en fait des copies bon marché, il ne copie pas les fichiers réels lors de la ramification. Voir svnbook.red-bean.com/en/1.1/ch04s02.html
Walty Yeung

607

Créez une nouvelle branche à l'aide de la svn copycommande comme suit:

$ svn copy svn+ssh://host.example.com/repos/project/trunk \
           svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH \
      -m "Creating a branch of project"

24
Ensuite, utilisez svn switch svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH .(si vous voulez basculer le paiement en cours vers une nouvelle branche) ou svn checkout svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH(si vous voulez avoir une nouvelle branche dans un répertoire séparé) pour commencer à travailler sur la branche nouvellement créée.
Jakub Narębski

3
Remarque: dans certains cas, vous devrez utiliser l'--parentsoption avecsvn copy!
Jakub Narębski

1
pour une raison quelconque, j'ai utilisé ce cmd et cela n'a pas fonctionné, mais quand j'ai changé le svn + ssh en seulement https, cela a fonctionné. Ai-je fait quelque chose de mal? quel est le sens de svn + ssh? Merci!
Aviel Gross

vous devez d'abord créer un nouveau répertoire dans votre branche -> svn mkdir host.example.com/repos/project/branches/NAME_OF_BRANCH -m "créer le répertoire des branches pour contenir toutes les branches"
Silvio Troia

Si j'omet l' -moption, il dit comme svn: E155010: Path '/home/constantine/someDirectory/svn+ssh:https:/myhost.com/svn/dir1/dir2/trunk/dir3/dir4/dir5' does not exist. Avec -mça dit svn: E205009: Local, non-commit operations do not take a log message or revision properties. (J'ai remplacé les adresses, mais elles existent, à l'exception de ofc, du nouveau répertoire de branche et de l'ensemble du chemin + URL que SVN a fusionné pour une raison quelconque dans l'erreur) .
Hi-Angel

33

Si votre repo est disponible via https, vous pouvez utiliser cette commande pour créer une branche ...

svn copy https://host.example.com/repos/project/trunk \
       https://host.example.com/repos/project/branches/branch-name \
  -m "Creating a branch of project"

26
svn cp /trunk/ /branch/NEW_Branch

Si vous avez des modifications locales dans le tronc, utilisez-les Rsyncpour synchroniser les modifications

rsync -r -v -p --exclude ".svn" /trunk/ /branch/NEW_Branch

2
Il n'est pas nécessaire d'utiliser rsyncde cette façon. svn cpcopiera également toutes les modifications locales.
Kevin Panko

@KevinPanko Il ne copiera pas les modifications non validées.
Parag Bafna

4
Il le fait, confirmé avec svn, version 1.8.5
Kevin Panko

Je me pose des questions à ce sujet. Cela semble être l'option la plus simple, et AFAI se souvient, c'est ce que j'ai fait lorsque je travaillais avec SVN il y a 3 ans. Mais quelle est la différence entre cela et ceux qui travaillent directement avec les URL du serveur?
oligofren

@KevinPanko Savez-vous s'il copie également les fichiers nouvellement créés?
John Hamilton

16

Supposons que vous vouliez créer une branche à partir d'un nom de tronc (comme "TEST") puis utilisez:

svn cp -m "CREATE BRANCH TEST" $svn_url/trunk $svn_url/branches/TEST


13

Astuce pour les nouveaux utilisateurs SVN; cela peut aider un peu à obtenir rapidement les URL correctes.

Exécutez svn infopour afficher des informations utiles sur la branche en cours d'extraction.

L'URL devrait (si vous exécutez svn dans le dossier racine) vous donner l'URL à partir de laquelle vous devez copier.

Pour passer également à la branche nouvellement créée, utilisez la svn switchcommande:

svn switch http://my.repo.url/myrepo/branches/newBranchName

3
Vous pouvez également utiliser ^ à la place de la racine du référentiel
chim

11

Si vous prévoyez même de fusionner votre succursale, je vous suggère fortement de regarder ceci:

Svnmerge.py

J'entends que Subversion 1.5 construit plus de suivi de fusion, je n'ai aucune expérience avec cela. Mon projet est sur 1.4.x et svnmerge.py est un épargnant de vie!


6
  • Créez un nouveau dossier en dehors de votre projet actuel. Vous pouvez lui donner n'importe quel nom. (Exemple: Vous avez une caisse pour un projet nommé "Personnalisation". Et il a de nombreux projets, comme "Projet1", "Projet2" .... Et vous voulez créer une branche de "Projet1". Alors, ouvrez d'abord le " Personnalisation ", faites un clic droit et créez un nouveau dossier et donnez-lui un nom," Project1Branch ").
  • Faites un clic droit sur "Myproject1" .... TortoiseSVN -> Branch / Tag.
  • Choisissez la copie de travail.
  • Ouvrir le navigateur .... Juste à droite du parallèle sur "To URL".
  • Sélectionnez la personnalisation ..... clic droit puis Ajouter un dossier. et parcourez le dossier que vous avez créé. Ici, c'est "Project1Branch". Cliquez maintenant sur le bouton OK pour ajouter.
  • Jetez un œil à ce nouveau banch.
  • Accédez à nouveau à votre projet dans la branche que vous souhaitez créer. Cliquez avec le bouton droit sur TorotoiseSVN -> branche / tag. Sélectionnez ensuite la copie de travail. Et vous pouvez donner l'URL comme nom de votre branche. comme {votre adresse IP / svn / AAAA / Personnalisation / Project1Branch}. Et vous pouvez définir le nom dans l'URL afin qu'il crée uniquement le dossier avec ce nom. Comme {votre adresse IP / svn / AAAA / personnalisation / Project1Branch / MyProject1Branch}.
  • Appuyez sur le bouton OK. Vous pouvez maintenant voir les journaux ... votre copie de travail sera stockée dans votre branche.
  • Maintenant, vous pouvez vérifier ... et vous permettre de profiter de votre travail. :)

-1

Voici les étapes pour créer une branche à partir du tronc en utilisant TortoiseSVN dans la machine Windows. Cela nécessite évidemment l'installation du client TortoiseSVN.

  1. Clic droit sur le tronc mis à jour depuis la machine Windows locale
  2. Sélectionnez TortoiseSVN
  3. Cliquez sur branche / Tag
  4. Sélectionnez le chemin d'accès dans le référentiel SVN. Notez que l'URL de destination est mise à jour en fonction du chemin et du nom de branche donnés
  5. Ne créez pas de dossier à l'intérieur des branches dans le navigateur du référentiel
  6. Ajoutez le chemin des branches. Par exemple, les succursales /
  7. Ajoutez un message de log significatif pour votre référence
  8. Cliquez sur OK, cela crée un nouveau dossier sur le système local
  9. Extraire la branche créée dans un nouveau dossier
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.