2010-08-04 48 views
1

J'essaie de faire en sorte que subversion déploie automatiquement la copie de travail actuelle lors de la validation. Par exemple, si quelqu'un extrait le repo 'public_html' puis valide une modification, j'ai besoin de SVN pour exécuter automatiquement svn update/path/to/public_html/'sur le serveur qui exécute svn.Subversion échoue sur le crochet post-commit?

J'ai mis en place un crochet post-commit qui appelle:

/usr/bin/svn update/chemin/vers/public_html/

J'ai assurer la post-commit hook est exécutable , et si je lance manuellement le script via SSH, il fonctionne correctement et met à jour le/path/to/public_html/dir, donc nous savons que le script post-commit fonctionne bien.

Le problème que je rencontre est que chaque fois que je commets, je reçois cette erreur:

Transmitting file data .svn: Commit failed (details follow): 
svn: MERGE of '/svn/public_html': 200 OK (http://ourdomain.com) 

La chose est, SVN est couché à travers ses dents: la commettras ne fait pas l'échec - si je mets à jour manuellement dir (ou exécutez manuellement le script post-commit) la mise à jour se termine et les modifications sont répercutées sur le serveur. Donc, est-ce que quelqu'un sait pourquoi mon hook de post-commit échoue?

J'ai vu pas mal de messages à ce sujet mais aucun ne semble avoir de solutions à part "essayer de lancer le script post-commit manuellement" que j'ai essayé et ça marche bien. commit script n'est pas le problème, il semble y avoir un problème avec SVN lui-même.

Toute aide serait grandement appréciée !!

+0

Cela ne répond pas directement à votre question, donc je l'inclue dans un commentaire plutôt que dans une réponse - je vous déconseille d'exécuter votre contenu de serveur http public directement sur un référentiel svn. Au lieu de cela, vous devez utiliser un script build-and-deploy, qui empaquette votre code et contenu et le déplace vers un emplacement de publication. Faire un lien automatique pour commettre des sons particulièrement effrayant - que se passe-t-il si quelqu'un vérifie une erreur de code, ou une faute de frappe grossière dans un écrit? Vous n'avez jamais l'occasion de tester les changements avant qu'ils ne soient mis en ligne. – Ether

Répondre

1

Vous devez être conscient que dans le script hook aucun environnement n'existe ... ce qui signifie que vous devez utiliser des chemins absolus dans vos scripts au lieu de la commande, parce que vous n'avez aucun chemin non plus. Etes-vous sûr d'utiliser un post-commit, car le post-commit ne peut pas échouer à une validation, alors que pre-commit et start-commit peuvent faire une telle chose.

+0

+1, les codes de sortie et la sortie des post-validés doivent être ignorés par svn. – Wrikken

+0

Merci, et oui le commit réussit bien que SVN dise que c'est un échec, c'est juste le hook post-commit qui échoue. Je suis conscient qu'il n'y a pas d'environnement. Le contenu du script est: --- #/bin/sh /usr/bin/svn update /web/ourdomain.com/dev/public_html --- – 1337ingDisorder

0

Vérifiez si l'ID utilisateur du processus du serveur svn a suffisamment de droits sur/path/to/public_html/pour écrire des fichiers et des répertoires.

Une autre idée: Il doit également avoir accès à son propre référentiel, comme indiqué dans la copie de travail "/ path/to/public_html /". Si vous utilisez le protocole svn + ssh ou http, vous voudrez peut-être changer cela en protocole de fichier - c'est sur le même serveur quand même.

+0

Permission sont tous ok. Je ne savais pas que vous pouviez mettre à jour une copie extraite d'un repo en utilisant le fichier: // Donc, si le chemin est /web/ourdomain.com/dev/public_html/ Je pourrais simplement utiliser file: /// web /ourdomain.com/dev/public_html/ au lieu du chemin brut et SVN le traiterait différemment? – 1337ingDisorder

+0

utiliser '' svn switch '' ou '' svn switch --relocate '' –

+0

Non que je n'utilise pas une copie de travail en tant que racine publique html, mais une exportation (via "svn export") car cela permettra d'éliminer ceux-ci ". svn/"entrées du répertoire. –