52 votes

SVN: Pouvez-vous supprimer des répertoires d'une extraction locale uniquement (pas du référentiel)?

Supposons que vous disposez d'un répertoire sous le contrôle de subversion, qui contient des fichiers et des tonnes de sous-répertoires, comme ça:

file1.txt
file2.txt
file3.txt
dir1/
dir2/
dir3/
dir4/
:
dirXX/

Maintenant, vous avez besoin des fichiers et certains de la dirs, mais pas tous d'entre eux. Cela peut être fait avec SVN. Il suffit de faire le checkout non-récursive:

svn checkout -N <URL>

Cela permet d'extraire seulement le premier répertoire et les fichiers à l'intérieur. Pas de sous-répertoires sont inclus. Même si vous allez dans la caisse de répertoire et de lancer un "svn up", il suffira de mettre à jour les fichiers extraits précédemment, il ne sera pas ajouter les répertoires. Vous pouvez maintenant sélectivement ajouter les répertoires que vous devez explicitement à la mise à jour de ceux-ci. E. g. si vous avez besoin d'dir2 et dir4 seulement, vous pouvez vous rendre dans la caisse répertoire et exécuter

svn up dir2
svn up dir4

Si vous exécutez un générique "svn up" dans l'avenir, il suffira de mettre à jour les fichiers et ces deux répertoires, il ne sera pas ajouter tous les autres répertoires.

Maintenant le problème: Que faire si je décide plus tard que je n'ai pas besoin dir2 de plus? Comment puis-je me débarrasser de lui? Il n'y a aucun moyen de le faire, d'autres que la suppression de l'ensemble de la caisse et de recommencer à partir de zéro.

Lorsque vous venez de supprimer dir2, la prochaine "svn up" la ramène, comme "svn status" bien sûr, le montre comme absent aujourd'hui ("!" devant son nom). L'exécution d'un "svn remove" supprime, bien sûr, mais sur le prochain commit il va également supprimer à partir du référentiel, qui ne doit pas se produire.

Même le nouveau éparses répertoire ("shallow " checkout") de la fonction de SVN 1.5 est d'aucune utilité ici:

Subversion 1.5 mise en œuvre de peu profondes des caisses est bon mais n'a pas le soutien d'un couple d'intéressant les comportements. Tout d'abord, vous ne pouvez pas de-télescope d'une copie de travail de l'élément. L'exécution de svn update --set-profondeur vide dans une infinie profondeur de la copie de travail sera pas avoir pour effet que de les jeter tout, mais le plus haut -répertoire, il sera tout simplement l'erreur.
- http://svnbook.red-bean.com/en/1.5/svn.advanced.sparsedirs.html

Est-ce impossible avec SVN? Jamais quelqu'un est venu avec un travail intelligent-pour qui?

Juste de la création de la caisse de répertoire (sans SVN) et ensuite de vérifier les différents sous-répertoires à partir du référentiel directement comme des sous-répertoires de ce répertoire de travail pour les répertoires: maintenant, chaque répertoire est une caisse de son propre, peut être mis à jour et une fois n'est pas besoin de plus, vous pouvez simplement le supprimer. Cependant, comment puis-je obtenir les fichiers, puis (par ex. file1.txt)? SVN ne pas permettre à la caisse des fichiers individuels, vous pouvez seulement de la caisse des répertoires complets.

63voto

Mecki Points 35351

Je déteste répondre à mes propres questions... il me fait me sentir tellement stupide. Et je déteste encore plus d'être celui qui offre la meilleure réponse, mais malheureusement, ici, c'est la seule vraie réponse:

Ce que je suis en train de faire ne peut être fait avec Subversion 1.4 ou Subversion 1.5; Période.
Pas de travail existe, c'est juste la façon dont il est.

Il peut être fait avec Subversion 1.6, la pensée.
(ne savais même pas que 1,6 existe déjà)

Contrairement à SVN 1.5, SVN 1.6 peut réduire la profondeur sur un répertoire

svn up --set-depth exclude dir2

c'est la solution. Il définit la profondeur de dir2 à zéro et il sera immédiatement disparaître de la caisse et pas de mise à jour apportera de nouveau, sauf si vous définissez explicitement la profondeur de ce répertoire vers un nouveau (ou tout simplement faire une mise à jour sans option de profondeur, puisque ne donnant aucune profondeur signifie toujours l'infini, à moins d'utiliser des non-récursif, ce qui signifie "fichiers").

ASTUCE:
En fait SVN 1.6 ne peut vraiment réduire la profondeur de la même manière, il peut l'augmenter. Vous pouvez l'augmenter à partir de n'importe quel niveau au plus haut niveau. Vous pouvez seulement de le réduire à "exclure" (le niveau le plus bas de tous). Si vous souhaitez réduire la de "l'infini" (la plus haute) de "fichiers" (quelque part dans le milieu), vous devez d'abord réduire à "exclure" (provoquant le répertoire de disparaître) et puis l'augmenter de nouveau à la "fichiers". C'est un peu un hack, mais il fonctionne très agréable.

41voto

CodingWithSpike Points 17720

Pour quelqu'un qui vient sur cela plus tard, et utilise TortoiseSVN, ici, c'est comment faire la même chose...

  1. Cliquez-droit sur le dossier que vous ne voulez plus vérifié (c'est le dossier que vous souhaitez exclure)
  2. Dans le menu contextuel, choisissez "TortoiseSVN > mise à Jour de la Révision..."
  3. Dans la fenêtre qui apparaît, sélectionner "mise à Jour de la Profondeur" zone de liste déroulante "Exclure"
  4. Cliquez sur "OK". SVN sera automatiquement supprimer le répertoire de votre disque.

(Note: Ceci a été fait avec TortoiseSVN 1.7.5, et peut varier pour d'autres versions.)

13voto

leoger Points 788

Mise à jour: J'utilise SVN 1.6.11 et j'ai réussi à démonter le télescope en utilisant svn up --set-depth empty dir plutôt que de devoir exclude le répertoire.

2voto

slowdog Points 2837

Avec svn 1.6, --set-depth est la réponse.

Avec svn <1.6, vous pouvez obtenir des extras clairsemés en abusant de svn switch : créez un répertoire vide quelque part dans votre référentiel et switch les sous-répertoires dont vous n’avez pas besoin pour le pointer maintenant au lieu de leur "vraie" URL.

1voto

petr k. Points 4890

Vous pouvez essayer cette astuce avec un référentiel local et des déclarations svn: externals .

Je n'ai pas essayé moi-même, cependant.

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