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.

Ronnie
la source
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"
étincelles
la source
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"
Dave
la source
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
Parag Bafna
la source
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
Chamly Idunil
la source
14

Normalement, vous le copiez dans svn + ssh: //host.example.com/repos/project/branches/mybranch afin de pouvoir conserver plusieurs branches dans le référentiel, mais votre syntaxe est valide.

Voici quelques conseils sur la façon de configurer la disposition de votre référentiel .

pix0r
la source
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
chim
la source
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!

basszero
la source
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. :)
Sonu Gupta
la source
-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
Prashanth
la source