46 votes

SVN crée un répertoire trunk sur un dépôt existant

Je travaille sur un projet qui n'a pas de structure de répertoire trunk / branches / tags - c'est-à-dire que tout est dans la racine du repo svn.

Je voudrais créer un répertoire tronc et dans le répertoire racine, et déplacer tout ce qui se trouve dans le répertoire racine dans le nouveau répertoire tronc.

Quelle est la meilleure façon de procéder ?

La première chose à laquelle j'ai pensé est

svn mkdir trunk
(for each file or directory that is not called trunk: )
svn mv FILEorDIR trunk/

Mais cette méthode a pour effet de supprimer tous les fichiers, puis de les ajouter à nouveau. Existe-t-il un meilleur moyen ?

Merci.

22voto

jxmallett Points 607

J'ai eu exactement le même problème et je l'ai résolu après avoir parcouru plusieurs pages différentes (dont celle-ci). Voici ma solution :

Note : Avant de commencer, si vous prévoyez d'utiliser svn switch pour conserver votre copie de travail et éviter de vérifier à nouveau le dépôt, il est préférable de s'assurer que votre copie de travail est à jour et ne comporte pas de modifications non validées.

Continuons avec la solution...

//REPO_URL = The URL for the repo on the SVN server.
//In my case it was https://IP_ADDRESS:PORT/svn/my_repo

//Make the trunk dir in the root of your SVN repo
svn mkdir REPO_URL/trunk -m "making trunk dir"

//Move everything from your root dir to your new trunk dir
svn move REPO_URL/A_FOLDER REPO_URL/trunk/A_FOLDER -m "moving folders to trunk"
svn move REPO_URL/ANOTHER_FOLDER REPO_URL/trunk/ANOTHER_FOLDER -m "blah"
svn move REPO_URL/A_FILE.TXT REPO_URL/trunk/A_FILE.TXT -m "moving files to trunk"
//Keep going until you've moved everything from your root dir to the trunk dir...

Donc maintenant, sur votre serveur SVN, tout est dans le dossier trunk. Super !

Mais mon repo fait 60 Go et se trouve sur un serveur distant. Je préfère ne pas le vérifier à nouveau. svn switch vous permettra de faire pointer votre copie de travail existante vers la nouvelle trunk dir pour que vous puissiez continuer à travailler avec la copie que vous avez. Allez dans le dossier racine de votre copie de travail et exécutez svn switch REPO_URL/trunk --ignore-ancestry . Il devrait dire At revision XX est la révision après que vous ayez déplacé tous vos fichiers du répertoire Root vers le répertoire trunk. C'est tout ! Peut-être faire une mise à jour SVN pour faire bonne mesure :)

10voto

Greg Hewgill Points 356191

C'est la même chose que ce que j'ai fait dans le passé. En fait, votre solution copies chaque fichier, puis supprime l'original. En raison de la façon dont Subversion implémente les copies, l'historique de chaque fichier est préservé.

Après avoir effectué cette opération, vous pouvez diriger les caisses existantes vers le nouvel emplacement en utilisant la fonction svn switch .

0 votes

Pouvez-vous donner la commande exacte pour svn switch ? De plus, existe-t-il un moyen de forcer switch à ne pas mettre à jour la dernière révision dans la copie de travail où il est exécuté ?

0 votes

@Vijay Dev : Je recommande le svn switch documentation pour tous les détails.

3voto

AmBaltimore Points 31

Si vous utilisez l'IDE eclipse et Subclipse pour SVN, vous pouvez créer des dossiers dans SVN et déplacer tous les fichiers/répertoires de Root vers le répertoire trunk, puis extraire le ProjectName/trunk de votre espace de travail eclipse...

1 votes

De plus, si vous avez l'intention de copier vers un dépôt propre (un dépôt qui n'a pas de projet enregistré, donc pas de structure trunk/branches/tags), dans Eclipse vous pouvez créer la structure trunk/branches/tags avec Repo>Nouveau>Structure du projet...>Monolithique. Après cela, il suffit de copier/coller tous les éléments du repo source.

1voto

BarclayVision Points 505

Vieux post mais moi aussi j'ai eu le même problème avec tous mes dépôts qui étaient dans la racine et non dans les troncs. Cela a posé un problème lorsque j'ai essayé un simple git svn clone commande. Après des heures d'essais et d'erreurs, c'était simple :

git svn clone --username byname http://www.MySVNserver.com:81/repos/project1 --no-metadata --trunk=.

1voto

J'ai fait cela moi-même plusieurs fois et j'ai appris ceci : Si vous voulez conserver l'historique du répertoire racine SVN précédent + conserver toutes les propriétés SVN (telles que ignorer ), vous devez procéder de la manière suivante. Remarquez : J'ai fait tout cela avec TortoiseSVN, parce que c'est très facile de cette façon. Mais vous pouvez aussi avoir du succès avec la ligne de commande. Ci-dessous vous trouverez une description pour le faire avec CLI aussi.

N'oubliez pas d'ajouter des messages SVN appropriés à chaque action, afin que vous sachiez plus tard, de façon claire et nette, ce qui a été fait.

Exemple de dépôt : /svn/mon_projet

Étapes pour TortoiseSVN :

  1. Renommer répertoire actuel du projet /svn/my_project vers le tronc /svn/trunk
  2. Créer un nouveau répertoire /svn/my_project
  3. Déplacements /svn/trunk a /svn/my_project
  4. Interrupteur les copies de travail vers le nouveau chemin. Cochez la case "Ingore ancestry".
  5. Détente

Étapes pour le CLI (non testé !) :

  1. Copie le répertoire vers un nouveau répertoire /svn/trunk/
  2. Supprimer l'ancien répertoire /svn/my_project/
  3. Copie le site /svn/trunk/ vers un nouveau répertoire /svn/my_project/trunk
  4. Supprimer le site /svn/trunk/ répertoire
  5. Interrupteur copies de travail dans le nouveau répertoire

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X