2009-08-30 3 views
10

Dans mon dépôt, permet de dire que j'ai ceci:Subversion - Regler un répertoire parent

Animal 
    Dog 
    Beagle 
    Hound 
    ... 

Disons que j'ai vérifié chien à un répertoire de travail et je me suis rendu, oups, je voulais vraiment à la caisse animale.

Je peux supprimer ma copie de travail, le répertoire Chien, et extraire Animal, mais est-ce que je peux le faire sans supprimer et vérifier à nouveau?

Si ma copie de travail de Dog a Animal comme dossier parent et que je clique sur Animal sans supprimer Dog, je reçois quelque chose comme "subversion n'a pas réussi à ajouter le répertoire versionné déjà le même nom". J'utilise aussi la tortue. Merci.

+3

Quel est le problème avec la suppression et la vérification à nouveau? Si vous avez déjà apporté des modifications, engagez-les, puis recommencez. – kajaco

+1

Ce n'est pas un problème. C'est ce que j'ai fait et ça a marché. Je me demandais juste s'il y avait un meilleur moyen, ou s'il y avait une façon plus correcte de le faire. – Steve

Répondre

4

Ce n'est pas possible directement. La méthode la plus simple consiste à supprimer votre copie de travail et à effectuer une nouvelle extraction à Animal.

Si vous avez des changements dans Dog que vous souhaitez conserver, déplacer Dog vers un emplacement temporaire, la caisse Animal puis copier Dog nouveau dans le répertoire Animal.

2

Vous recherchez svn switch, qui met à jour votre copie de travail pour refléter un nouveau chemin. Les fichiers modifiés ne sont pas touchés, cependant. Dans TortoiseSVN, faites un clic droit et sélectionnez "Switch ..." dans le menu contextuel.

Le cas d'utilisation le plus courant pour svn switch consiste à basculer entre les branches qui proviennent du même point, de sorte que vous pouvez avoir différentes vues du même code. Mais vous pouvez basculer entre des chemins arbitraires dans votre référentiel.

+1

Mais mon répertoire parent, Animal, n'est pas sous contrôle de version, donc je ne peux pas basculer dessus, du moins pas depuis Tortoise. Peut-être via une ligne de commande? – Steve

+1

Je suis confus. Comment votre référentiel peut-il contenir Animal s'il n'est pas sous contrôle de version? Est-ce une faute de frappe? –

+1

J'ai fait une copie (branche) pour créer Animal. Dans ma copie de travail, Animal n'a pas le répertoire .svn. C'est un dossier qui a le même nom que le dossier du référentiel. Donc, mon répertoire de travail est une copie exacte de la structure du dépôt, mais j'ai vérifié Dog to Dog. J'espère que cela a du sens. – Steve

0

J'ai trouvé pour éviter de télécharger sur le serveur svn ce qui est déjà sur mon disque, puis la mise à jour ou la vérification est faite en utilisant --depth empty. Donc quelque chose comme: svn co --depth empty Animal ; cd Animal ; svn update --depth empty Dog

Quoi qu'il en soit, l'idée est d'obtenir Dog comme un répertoire dans Animal/.svn/entries.

Ce « --depth empty » permet de rester svn de télécharger le contenu réel, mais svn ne fait le sous-répertoire (dans ce cas, Dog) et svn ne met une entrée pour le sous-répertoire dans DogAnimal/.svn/entries.

Remplacez ensuite le sous-répertoire Chien par la copie que vous possédez déjà.

Vous pouvez vérifier que cela fonctionne en tapant l'un des fichiers quelque part dans Dog et en faisant un svn update dans le répertoire Animal. Le fichier whacké doit être retiré du serveur svn.

+0

Ne fonctionne pas: alors vous obtenez 'Mise à jour '.': 'Tronc' sauté - Une copie de travail obstructive a été trouvée À la révision 13370. Résumé des conflits: Saut des chemins: 1' en faisant' svn up' dans 'Animal'. –

+0

Été longtemps, donc je ne suis pas sûr de savoir quel est le problème. SVN devrait faire les répertoires Animal et Chien, n'est-ce pas? Il ne devrait donc pas y avoir de copie de travail obstructive. Une autre idée est peut-être que SVN a changé depuis '13 donc cette astuce ne fonctionne plus. –

0

Oui, vous pouvez mapper le répertoire parent.

Pour ce faire, il vous suffit de supprimer le répertoire .svn du répertoire "Chien" (enfant) et de faire SVN Update dans le répertoire Parent. Il fera le fichier existant comme Versioned copie et téléchargera le contenu delta du répertoire Dog du serveur SVN.

Veuillez noter: Vous devriez avoir une structure de répertoire exacte comme structure de répertoire SVN.