2010-03-11 4 views
0

Pour faire des builds, empaqueter des fichiers, etc., il est nécessaire d'avoir une version complètement propre de SVN. Il ne peut pas y avoir de fichiers non versionnés qui circulent, par exemple test.png peut être empaqueté si tous les fichiers PNG sont saisis. Mais pour obtenir une toute nouvelle commande, il faut du temps et de la bande passante. Donc est-il un moyen de prendre un répertoire de travail et l'obtenir exactement identique à un contrôle propre, la suppression des fichiers non versionnés ainsi que faire une mise à jour svn?Créer un répertoire de travail SVN contient EXACTEMENT la même chose qu'une commande propre

Répondre

2

Si vous voulez:

  • obtenir ce qui est sur le SVN
  • et rien d'autre
  • et, idéalement, pas .svn répertoires

Ensuite, la meilleure solution est de utilisez svn export. Oui, il exportera tous les fichiers du SVN, ce qui signifie que cela prendra du temps et qu'il faudra consommer un peu de bande passante; mais c'est probablement la meilleure solution pour éviter tout problème.

Et, en tant que sidenote: il vous permet de créer vos archives à partir de votre machine de développement, sans avoir à revenir sur votre travail actuel.


Sinon, vous aurez à:

  • faire une svn revert, d'annuler les modifications effectuées sur votre copie de travail et n'a pas commis.
  • Ensuite, assurez-vous que tous les répertoires .svn sont exclus de votre archive.
+2

Notez que svn revert ne supprimera pas les fichiers non-versionnés, il ne supprimera que l'instruction "add" des méta-données svn. –

+0

.svn dirs ne sont pas un problème, ils sont cachés IIRC et facile à filtrer. Mais de toute façon, il semble que je n'ai pas d'autre choix que de télécharger une copie propre dans un sens ou dans l'autre? –

0

Vous pouvez écrire un script qui efface tous les fichiers qui ne se trouvent pas dans un répertoire .svn et tous les répertoires sans sous-répertoire .svn. Ensuite, exécutez 'up', et tout ce qu'il fera est de recopier les fichiers sur les copies dans le répertoire .svn. Cependant, tous ces répertoires .svn ont toujours le potentiel de vous donner du gaz, alors lisez la réponse de Pascal, même si cela prend beaucoup de temps.

+0

Comment ce script peut-il fonctionner? Je n'ai pas de méta-données svn sur ce PC, liste-t-il simplement les fichiers là-bas? –

+0

Comment ne pas avoir de svn metadata, à moins que vous n'ayez lancé svn export en premier lieu. svn co TOUJOURS fait cette copie supplémentaire avec les métadonnées dans les répertoires .svn. – bmargulies

+0

@John votre question initiale dit que vous avez couru un svn co. Je reste fidèle à ma remarque. Chaque fois que vous lancez un svn co, vous obtenez des métadonnées.Si vous n'avez pas de svn metadata, vous n'avez pas exécuté co, et donc toute votre question est trompeuse et impossible à répondre. – bmargulies

2

Here est une commande qui répertorie tous les fichiers versionnés dans un répertoire subversion:

svn status --no-ignore | grep '^\?' | sed 's/^\?  //' 

Faire la mise à jour et la suppression des fichiers ressemblerait à ceci:

svn update && svn status --no-ignore | grep '^\?' | sed 's/^\?  //' | xargs rm -rf 

Vous pouvez faire un retour au lieu de la mise à jour si vous voulez exactement la même version. Le meilleur moyen serait probablement d'utiliser svn export.

+0

Ai-je dit que je courais * nix? Mais je suis sûr que quelqu'un le trouvera utile, merci quand même. –

+0

Non, vous n'avez rien dit à propos de votre système d'exploitation. Btw, peut-être si une vérification SVN est tellement consommatrice de bande passante, vous devriez vérifier si tous les fichiers appartiennent réellement au contrôle de version (comme les Java JARs que vous n'avez pas besoin d'archiver quand vous utilisez un outil de construction comme Maven) – Daff

+1

@John svn commande fonctionne bien sur Windows si vous avez cygwin. Le sarcasme n'est pas appelé. – bmargulies

Questions connexes