Modifier l'URL du référentiel SVN

116

Ma structure SVN actuelle:

Path: .
URL: svn://someaddress.com.tr/project
Repository Root: svn://someaddress.com.tr
Repository UUID: -------------------------------------
Revision: 10297
Node Kind: directory
Schedule: normal
Last Changed Author: ----
Last Changed Rev: 9812
Last Changed Date: 2010-12-20 17:38:48 +0100 (Mon, 20 Dec 2010)

Mais notre projet (d'où le service SVN) fonctionnera au sub.someaddress.com.trlieu de someaddress.com.tr(someaddress.com.tr sera bientôt redirigé vers un autre endroit).

Puisqu'il s'agit du serveur de développement, je ne pouvais pas savoir quoi faire. Dois-je utiliser svn switchou svn switch --relocate? Dois- je également changer de racine svn someaddress.com.tr ou la branche de projet someaddress.com.tr/project ?

Ange déchu
la source

Réponses:

208

Étant donné que le serveur Apache Subversion sera déplacé vers ce nouvel alias DNS sub.someaddress.com.tr::

  • Avec Subversion 1.7 ou supérieur, utilisez svn relocate. Relocate est utilisé lorsque l'emplacement du serveur SVN change. switchn'est utilisé que si vous souhaitez modifier votre copie de travail locale vers une autre branche ou un autre chemin. Si vous utilisez TortoiseSVN, vous pouvez suivre les instructions du manuel TortoiseSVN . Si vous utilisez l'interface de ligne de commande SVN, reportez-vous à cette section de la documentation SVN . La commande devrait ressembler à ceci:

    svn relocate svn://sub.someaddress.com.tr/project

  • Continuez à utiliser /projectétant donné que le contenu réel de votre référentiel ne changera probablement pas.

Remarque: svn relocaten'est pas disponible avant la version 1.7 (merci à ColinM pour l'info). Dans les anciennes versions, vous utiliseriez:

    svn switch --relocate OLD NEW
Juanal
la source
36
svn relocate n'est pas disponible avant la version 1.7. Pour la version antérieure à 1.7, vous utiliseriezsvn switch --relocate OLD NEW
ColinM
Les liens TortoiseSVN supplémentaires sont très utiles, merci pour cela
MOnsDaR
Je ne connaissais pas la switchcommande, toute la documentation que j'ai trouvée en ligne concerne les versions plus récentes.
Dustin Cook
Cela est pratique lorsque j'ai besoin de déplacer de l'URL + ssh vers une URL non SSH ou vice versa, par exemple: svn switch --relocate svn + ssh: // _ svn_server _ / _ svn_project _ / _ svn_branch_ svn: // _ svn_server _ / _ svn_project _ / _ svn_branch_. Le dernier est particulièrement utile si vous effectuez une vérification automatisée en tant que svn + ssh sur plusieurs nœuds à l'aide de l'API Jenkins et certains d'entre eux (nœuds Windows) n'ont pas SSH, mais vous devez vous connecter à la machine de construction et "svn update" manuellement pour tester une solution rapide.
Alexander Samoylov
11

La saisie de l'URL avant et après peut vous donner une certaine tranquillité d'esprit:

svn info | grep URL

  URL: svn://svnrepo.rz.mycompany.org/repos/trunk/DataPortal
  Relative URL: (...doesn't matter...)

Et vérifier votre version (pour être> 1.7) pour vous assurer, svn relocateest la bonne chose à utiliser:

svn --version

Enfin, en ajoutant à ce qui précède, si le changement d'URL de votre référentiel implique également un changement de protocole, vous devrez peut-être indiquer l' url avant et après ( voir également ici )

svn relocate svn://svnrepo.rz.mycompany.org/repos/trunk/DataPortal
    https://svngate.mycompany.org/svn/repos/trunk/DataPortal

Le tout en une seule ligne bien sûr, ensuite, ressentez le bon sentiment que tout s'est bien passé:

svn info | grep URL:

Si vous en avez envie, un peu plus d'assurance, la nouvelle URL svn repo est connectée et fonctionne:

svn status --show-updates
svn diff
Frank Nocke
la source
5

Dans mon cas, la svn relocatecommande (ainsi que svn switch --relocate) a échoué pour une raison quelconque (peut-être que le dépôt n'a pas été déplacé correctement, ou autre chose). J'ai fait face à cette erreur:

$ svn relocate NEW_SERVER
svn: E195009: The repository at 'NEW_SERVER' has uuid 'e7500204-160a-403c-b4b6-6bc4f25883ea', but the WC has '3a8c444c-5998-40fb-8cb3-409b74712e46'

Je ne voulais pas retélécharger tout le référentiel, j'ai donc trouvé une solution de contournement. Cela a fonctionné dans mon cas, mais en général, je peux imaginer que beaucoup de choses peuvent se briser (alors sauvegardez votre copie de travail ou soyez prêt à revérifier l'ensemble du dépôt si quelque chose ne va pas).

L'adresse du dépôt et son UUID sont enregistrés dans le .svn/wc.dbfichier de base de données SQLite dans votre copie de travail. Ouvrez simplement la base de données (par exemple dans SQLite Browser), parcourez la table REPOSITORY et remplacez les valeurs de colonne rootet uuidpar les nouvelles. Vous pouvez trouver l'UUID du nouveau repo en émettant svn info NEW_SERVER.

Encore une fois, considérez cela comme une méthode de dernier recours.

Martin Pecka
la source
@IgorGanapolsky: Pourriez-vous être plus précis?
Martin Pecka
1
Si vous lisez attentivement mon message, je ne suggère d'exécuter aucune commande. Je suggère de modifier la base de données SQLite.
Martin Pecka
Mais l'édition de la base de données SQLite implique l'exécution de commandes. Commandes SQL.
Peter Flynn
Il s'avère que vous ne pouvez pas utiliser sqlite; vous devez utiliser sqlitebrowser comme suggéré. Bizarre.
Peter Flynn
1

Si vous voulez vous engager dans un nouveau repo vide, vous pouvez extraire le nouveau repo vide et vous engager dans un nouveau repo distant.
chekout un nouveau Repo vide ne supprimera pas vos fichiers locaux.
essayez ceci: par exemple, URL du dépôt distant: https://example.com/SVNTest cd [YOUR PROJECT PATH] rm -rf .svn svn co https://example.com/SVNTest ../[YOUR PROJECT DIR NAME] svn add ./* svn ci -m"changed repo url"

leo.tan
la source
Qu'est-ce que cela va faire à l'histoire?
MattBianco