2008-09-03 7 views
4

J'ai une situation de développement quelque peu intéressante. Le client et le serveur de déploiement sont à l'intérieur d'un pare-feu sans accès au serveur Subversion. Mais les développeurs sont en dehors du pare-feu et peuvent utiliser le serveur Subversion. À l'heure actuelle, la solution que j'ai élaborée consiste à mettre à jour ma copie locale du code, puis à extraire les fichiers les plus récemment mis à jour en utilisant UnleashIT.Subversion Export partiel

La question est de savoir comment obtenir uniquement les fichiers mis à jour à partir de Subversion afin qu'ils puissent être physiquement transportés à travers le pare-feu et mis sur le serveur de déploiement. Je ne m'inquiète pas d'essayer de modifier la configuration du pare-feu ou d'essayer de trouver un moyen plus simple d'accéder au serveur Subversion depuis l'intérieur du pare-feu. Je suis juste intéressé par un moyen d'obtenir une exportation partielle à partir du référentiel des fichiers les plus récemment modifiés.

Y a-t-il d'autres suggestions?

Réponse trouvée: En plus de la réponse que je Marquée comme réponse, je l'ai aussi trouvé ce qui suit ici pour être en mesure de le faire à partir TortoiseSVN:

de http://svn.haxx.se/tsvn/archive-2006-08/0051.shtml

* select the two revisions 
* right-click, "compare revisions" 
* select all files in the list 
* right-click, choose "export to..." 

Répondre

1

J'ai trouvé rsync extrêmement utile pour synchroniser les arborescences de répertoires sur plusieurs systèmes. Si vous avez un accès shell à votre serveur à partir d'un poste de travail de développement, vous pouvez régulièrement extraire le code localement et exécuter rsync, qui ne transférera que les fichiers qui ont été modifiés sur le serveur.

(Cela suppose un environnement Unix sur vos postes de travail de développement. Cygwin fonctionnera très bien.)

cd deploy 
svn update 
rsync -a . server:webdir/ 

Votre question semble que vous n'avez réellement aucun accès direct au réseau de vos postes de travail de développement à votre serveur, et ce que vous recherchez vraiment est un moyen d'obtenir Subversion pour vous dire quels fichiers ont changé. svn export prend en charge un argument pour vous permettre d'extraire uniquement les fichiers qui ont été modifiés entre des révisions particulières. De l'aide svn:

-r [--revision] arg  : ARG (some commands also take ARG1:ARG2 range) 
          A revision argument can be one of: 
           NUMBER  revision number 
           '{' DATE '}' revision at start of the date 
           'HEAD'  latest in repository 
           'BASE'  base rev of item's working copy 
           'COMMITTED' last commit at or before BASE 
           'PREV'  revision just before COMMITTED 

Vous aurez besoin de garder une trace de ce que la dernière version que vous avez copié sur le serveur. En supposant qu'il est révision SVN xxxx:

svn export -r xxxx:HEAD http://svn/ 

Ensuite, il suffit de copier le contenu du déployer répertoire sur votre serveur sur des fichiers existants.

Ceci ne gérera pas les fichiers supprimés, ce qui peut s'avérer problématique dans certains environnements.

-1

Vous n » t fournir des informations sur ce qui est autorisé à travers le pare-feu. Je ne suis pas familier avec UnleashIT.

Je suppose que vous pourriez avoir un script qui exporte de SVN vers un dossier sur le serveur SVN. Le script zippe ensuite les fichiers exportés. Vous pouvez ensuite transporter le fichier ZIP comme vous le souhaitez et l'extraire vers le serveur de déploiement.

TortoiseSVN prend en charge les serveurs proxy afin que vous puissiez utiliser l'un de ceux du côté du client?

0

Vous pouvez essayer de jouer avec la commande svnadmin dump fournie avec les binaires Subversion. Vous pouvez utiliser cette commande pour exporter le référentiel entier vers un fichier, juste une révision ou une série de révisions. Utilisez ensuite svnadmin load pour charger le fichier de vidage dans un nouveau référentiel propre.

Ce n'est pas une solution parfaite car cela fonctionne en termes de référentiel et non de fichiers individuels.

1

Donc, si je comprends bien ...

Disons que vous avez un dépôt qui ressemble à ceci:

/ 
|+-DIR1 
| |- FILEa 
| |- FILEb 
|+-DIR2 
| |- FILEc 
| |- FILEd 
|- FILEe 
|- FILEf 

Et disons que vous mettez à jour les fichiers FILEa, FILEc et FILEf et les commettras retour dans le référentiel. Ensuite, ce que vous voulez exporter hors du dépôt est une structure qui ressemble à ceci:

/ 
|+-DIR1 
| |- FILEa 
|+-DIR2 
| |- FILEc 
|- FILEf 

Est-ce exact?

0

Vous voulez juste que les personnes derrière le pare-feu puissent accéder aux derniers fichiers validés par Subversion, n'est-ce pas?

Pourriez-vous écrire un svn hook script qui utilise une méthode (peut-être scp ou ftp) pour envoyer les fichiers à l'emplacement distant au moment où ils sont validés?

0

Les crochets Subversion semblent très prometteurs. Mais étant relativement mal informés sur la façon de scripter le hook, comment puis-je retirer les fichiers qui ont été commis et les FTP quelque part en maintenant la structure du répertoire? Si je pouvais faire cela, alors quelqu'un à l'intérieur du pare-feu pourrait tirer les fichiers vers le serveur de déploiement et nous serions prêts à partir.

2

svn export n'accepte pas une gamme de révision, essayez-le.

Une solution possible est d'obtenir la liste des fichiers modifiés avec:

svn diff --summarize -rXXX http://svn/... 

puis exporter chacun d'eux.