SVN: Pouvez-vous supprimer des répertoires à partir d'un local de la caisse seulement (et non pas à partir 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>
Ce vérifie 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.
- Je pense que c'est la même question que ces deux: stackoverflow.com/questions/862950/..., stackoverflow.com/questions/635446/...
- Tout d'abord, pourquoi ne pas vous écrire cela comme une réponse? Deuxièmement: Ces deux questions sont sur la prévention de quelque chose d'être commis. Cela n'a rien à voir avec mon problème. Même si je ne svn delete sur le répertoire et empêcher cela d'engagés, le répertoire ne va pas disparaître. Avez-vous seulement lu ma question ou juste le titre?
- J'ai lu votre question, même si je l'avoue en toute hâte. J'ai pensé vous demandez comment faire pour supprimer un contrôle de version dir dans la copie locale sans affecter la version du dépôt, et sans avoir la dir de retour dans la prochaine mise à jour. Bien que je n'ai pas essayé, il me semble que faire de tout autre membre de une liste de modification permettra de faire exactement cela. Je n'ai pas écrit cela comme une réponse car il existe déjà dans les deux autres questions (j'ai pensé que c'étaient les mêmes) - Si j'étais de droite, je venais d'arriver rep pour quelqu'un d'autre travail. Désolé si ce n'est d'aucune utilité pour vous.
- Si vous n'écrivez pas une vraie réponse, vous ne pouvez pas obtenir upvotes et je ne peux pas directement des commentaires sur ce que vous écrivez. Même si la question a été répondue par ailleurs, toujours écrire une vraie réponse. Si ma question est donc pas fermé comme dupe dans le temps, je ne peux accepter votre réponse comme "la réponse", même si elle vient de me dirige d'ailleurs. Pas juste? Je pense qu'il est. Après tout juste de répondre en donnant un lien vous donne également rep pour quelqu'un d'autre travail.
Vous devez vous connecter pour publier un commentaire.
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, si.
Contrairement à SVN 1.5, SVN 1.6 pouvez réduire la profondeur sur un répertoire
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.
Pour toute personne qui vient à travers cela plus tard, et utilise TortoiseSVN, ici, c'est comment faire la même chose...
(Note: Ceci a été fait avec TortoiseSVN 1.7.5, et peut varier pour d'autres versions.)
Mise à jour: je suis en cours d'exécution SVN 1.6.11 et j'ai été en mesure de télescope à l'aide de
svn up --set-depth empty dir
plutôt que d'avoir àexclude
le répertoire.Avec svn 1.6,
--set-depth
est la réponse.Avec svn < 1.6, vous pouvez obtenir éparses extractions en abusant de
svn switch
: Créer un répertoire vide quelque part dans votre référentiel, etswitch
les sous-répertoires que vous n'avez pas besoin maintenant à point à qui au lieu de leur "vraie" de l'URL.Vous pouvez essayer ce astuce impliquant un dépôt local et svn:externes déclarations.
N'ai pas essayé moi-même.