2010-10-06 4 views
0

Je veux fondamentalement faire une exportation SVN dans le cadre d'un processus de construction par script, mais sans avoir à récupérer tout le repo à chaque fois, ce qui est lent et mange de la bande passante ... sans parler de faire du test du script une douleur dans le dos s'il le fait chaque fois que nous peaufinons quelque chose ou repérer une faute de frappe dans les scripts.Faire un dossier de travail SVN identique à la version du référentiel

Existe-t-il un moyen évident de faire une exportation dans un répertoire existant, de sorte que seuls les fichiers différents sont récupérés et les fichiers non repo supprimés, ce qui donne une exportation propre mais intelligente? Windows est préféré, mais je suppose que Cygwin est une option.

Répondre

3

Je pense que la seule façon de faire cela est de vérifier une copie de travail, et de mettre à jour & rétablir cela. La mise à jour d'un WC n'obtient que les changements. L'exportation svn ne sait pas quels fichiers sont modifiés, et pour comparer les fichiers, vous devez d'abord les récupérer tous. Il serait également difficile d'obtenir des fichiers qui ont été supprimés ou renommés de votre répertoire 'export'.

2

Contrôlez une copie de travail, puis exportez de votre copie de travail. La mise à jour de SVN sur la copie de travail sera alors rapide et la lumière de commutateur de bande. Ensuite, vous pouvez supprimer l'exportation d'origine et la réexporter à partir de la copie de travail.

Toutes les opérations gourmandes en bande passante sont optimisées. La suppression et la recréation de main lourde sont les mêmes qu'avant, mais elles sont maintenant toutes locales, ce qui devrait être beaucoup plus rapide.

De plus, vous avez la possibilité d'apporter des modifications à la copie de travail exportée, mais vous voudrez peut-être faire attention à cela et prendre en compte l'impact de conflits lors de votre mise à jour svn.

+0

L'export à partir du WC local ne considérera-t-il que les fichiers SVN, ou si quelque chose d'autre arrive dans le WC, sera-t-il également copié? –

+0

La commande export ne regarde que les fichiers sous le contrôle de svn et ignore tout le reste. –

0

Je ne sais pas si j'ai bien compris votre question. Pour le reformuler. Je pense que vous voudriez avoir la copie locale de repo mise à jour sur une base régulière. Cependant, vous voudriez que la copie de travail soit vierge pour que la construction résultante soit propre. Considérant que c'est votre question ci-dessous est ce que je suggérerais. À ma connaissance, svn export n'est peut-être pas la meilleure option pour cela. Parce que le but de svn export est d'obtenir une copie de travail non-versionnée du svn repo. Comme il n'est pas versionné, svn client ne sait pas vraiment d'où il doit lancer la mise à jour.

La meilleure option à laquelle je peux penser est la suivante. Commander la copie du repo (copie locale, LC) dans un endroit. Ce CL devrait être mis à jour pendant le processus de construction. Faites une copie du LC dans un endroit différent et utilisez-le pour effectuer la construction. Voici les commandes que vous auriez besoin

1. svn update <arbitrary path>(in the working copy) 
2. copy <arbitrary path> <build path> 
3. find <build path> -type 'd' -name '.svn' (if you would like to remove the .svn hidden files, but they are not going to really hurt the build process) 

Quelques options pour éliminer les temps de copie de prise en compte du temps de processus de construction

  1. Si vous souhaitez enregistrer le temps de copie pendant le processus de construction probablement vous peut faire cette opération de copie après chaque construction et svn mettre à jour la copie juste avant de construire (supposons que les dossiers .svn sont conservés).

  2. Sur Linux, deux dossiers peuvent être synchronisés à l'aide de rsync. La copie de construction peut être faite pour refléter les mises à jour dans la copie vierge.

  3. Sous Windows, il existe quelques outils pour réaliser la synchronisation suggérée ci-dessus.Je ne les ai pas utilisés mais je vous fournirai les liens pour l'essayer vous-même.
    http://lifehacker.com/326199/synchronize-folders-with-synctoy-20 http://www.techsupportalert.com/best-free-folder-synchronization-utility.htm

0

Une autre option consiste à utiliser la caisse et revenir/mise à jour, mais aussi utiliser quelque chose comme la bibliothèque SharpSvn pour créer un script qui supprimera les fichiers non contrôlés par la source. De cette façon, les artefacts de construction comme le code compilé seront supprimés et les fichiers versionnés seront retournés à l'état de base par le retour/mise à jour.

Si vous avez beaucoup de répertoires et de fichiers, cette analyse peut être lente, mais si vous êtes sûr que les répertoires contiendront des artefacts de construction, vous pouvez simplement les analyser.

Questions connexes