2011-06-14 2 views
1

Je suis un développeur web.J'écris des fichiers dans une copie de travail svn locale sur ma propre machine, notre serveur de développement est un disque partagé via samba, et le Le répertoire racine du serveur est également une copie de travail, ce que je veux faire est d'utiliser un crochet svn post-commit côté client pour mettre automatiquement à jour la copie de travail sur le serveur chaque fois qu'un développeur commet du code.J'ai trouvé deux lots fichier peut le faire correctement, l'un utilise le subversion command, l'autre utilise Tortoise SVN command, mais le problème est à la fois mise à jour de fichier batch l'ensemble de la copie de travail autre que les fichiers modifiés, ce qui est très lent, prend souvent une ou deux minutes. pense que cela peut être plus rapide si je ne peux que mettre à jour les fichiers modifiés. Ou mybe est-il préférable de faire le fichier batch à ssh vers le serveur et mettre à jour directement autre que par le biais de samba? Et comment faire cela?Comment écrire un fichier de commandes pour mettre à jour des fichiers qui ont été validés sur un serveur

Désolé pour mon anglais pauvre, toute aide serait grandement appréciée.

Répondre

1

Vous pouvez faire les étapes suivantes: 1. Utilisez
commande svnlook pour trouver les fichiers qui ont été modifiés

svnlook changed REPOSITORY NAME 
  1. obtenir la sortie de la commande dans un fichier.
  2. Lisez ce fichier dynamiquement et récupérez-le dans la commande de mise à jour SVN.

Je peux vous dire comment faire cela sous Linux, mais pas sur les fichiers batch.

1

J'ai eu un problème similaire mais avec Linux Server hébergeant SVN. Peut être que vous pouvez prendre quelques indices à partir d'ici et le modifier pour correspondre à votre système Windows.

POST_COMMIT

#!/bin/sh 
wget http://localhost/update_svn.php 

update_svn.php

<?php 
$output = shell_exec('/media/disk3/velsvn/projects/hooks/svn_update_step1.sh'); 
echo "<pre>$output</pre>"; 
?> 

svn_update_step1.sh

ssh -i /media/d/mykey/id_rsa [email protected] /media/disk3/velsvn/projects/hooks/svn_update_step2.sh 

    svn_update_step2.sh 

#!/bin/sh 
cd /media/disk3/velsvn/projects/hooks 
rm -f filelist 
rm -f log 
whoami >> log 

    svnlook dirs-changed /media/disk3/velsvn/projects/ | sed "s/^..//" | awk '{ print substr($0, 9) }' >> /media/disk3/velsvn/projects/hooks/filelist; sed -i -e 's#^#/media/disk2/www/htdocs#' filelist; cat /media/disk3/velsvn/projects/hooks/filelist | xargs /usr/bin/svn up -N >> /media/disk3/velsvn/projects/hooks/log 

Remarque: 1./media/d/mykey/id_rsa est la clé générée pour l'accès SSH. Cela garantit que le système n'attend pas que l'utilisateur fournisse un mot de passe pour se connecter à SVN et exécute des scripts shell. 2. Le fichier POST-COMMIT et les fichiers shell sh1 et sh2 ont reçu + x mod afin qu'ils puissent être exécutés.

N'hésitez pas à commenter cet article et à fournir une meilleure solution. Tout ce que je sais maintenant, c'est que cette solution fonctionne :)

Questions connexes