Question

Je suis en train de mettre en œuvre un post-commit hook de mettre à jour une copie de travail. Pour autant que je peux comprendre le poste engager crochet est en cours d'exécution (je l'ai écrit quelque chose dans un fichier pour le vérifier), mais la commande de mise à jour n'a pas été exécutée.

Au début, je

cd /home/user/working/copy
svn update

mais cela ne fonctionne pas, alors je lis que vous devez donner le chemin complet svn:

cd /home/user/working/copy
/usr/bin/svn update

mais il n'a pas fonctionné.

J'ai changé permisions à 777 et ont exécuter le script dans un vide ... et enviroment il fonctionne.

Était-ce utile?

La solution 5

la solution finale que je suis un mélange de travail a été quelques-unes des réponses que j'ai. Mon serveur avait apache comme personne courir, donc je fait la copie de travail est la propriété de personne et dans le groupe UserName puis chmod à 775. De cette façon, le crochet fonctionne et aussi le nom d'utilisateur aura également permision de mettre à jour des fichiers par FTP.

Autres conseils

#!/bin/bash
/usr/bin/svn update /home/user/working/copy

Le code ci-dessus devrait fonctionner comme un crochet post-commit.

Ajouter --username et --password si nécessaire.

Modifier:

Voir http://subversion.tigris.org/faq.html#website-auto-update

Le programme serveur effectuant la commettras (svnserve ou apache) est le même programme qui exécutera le script post-commit hook. Cela signifie que ce programme doit disposer des autorisations adéquates pour mettre à jour la copie de travail.

Si la « copie de travail » qui doit être mis à jour est la propriété par le même utilisateur, alors vous ne devez pas vous soucier de nom d'utilisateur et mot de passe.

La FAQ Subversion suggère d'utiliser Setuid avec le programme C.

#include <stddef.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
execl("/usr/local/bin/svn", "svn", "update", "/home/joe/public_html/",
    (const char *) NULL);
return(EXIT_FAILURE);
}

La copie de travail est dans le répertoire d'un utilisateur. Si le serveur SVN fonctionne en tant qu'utilisateur différent, dites « svnserver », le script de post-commit hook sera exécuté comme « svnserver ». Il est logique qu'un utilisateur ne peut pas modifier ou lire les fichiers d'un autre utilisateur à moins que les paramètres d'autorisation sur les fichiers sont tels que cela est permis.

Vous ne devriez pas partager des copies de travail entre plusieurs utilisateurs . Si vous devez vraiment, alors simplement donner la permission de lecture / écriture à chaque utilisateur ne suffit pas. Vous devez également vous assurer qu'aucun des utilisateurs de créer des fichiers qui sont inaccessibles aux autres utilisateurs. Pour ce faire, vous devez écrire des scripts wrapper pour les commandes svn qui définissent le bon umask , ou donner tous les utilisateurs concernés la capacité d'agir comme un utilisateur spécifique par sudo.

Si vous n'utilisez pas le workingcopy par vous-même, vous pouvez chown workingcopy à l'utilisateur qui exécute le script crochet

Je lance également en même question, et a essayé (y compris celui de FAQ officiel) toute méthode sans chance

Bien sûr, je lance aussi chmod -R et chown -R www-data: www-data. Au besoin à chaque fois

Dans la plupart des cas, la commande mise à jour exécutée, aucune erreur d'autorisation, pas un autre message d'erreur, mais la copie de travail est pas mis à jour.

Enfin, les étapes ci-dessous fonctionne bien pour moi:

dans l'essai de crochet post-commit

export LC_CTYPE=en_US.UTF-8
cd [/working-copy-folder/] # heading tail slash
/usr/bin/svn checkout [source path]

une fois, puis mettre à jour crochet post-commit à

export LC_CTYPE=en_US.UTF-8
cd [/working-copy-folder/]
/usr/bin/svn update

maintenant il travaille, et je suis trop fatigué pour trouver la cause racine. passé toute la journée sur seulement 'svn update'

La réponse de wcoenen est certainement sur la bonne voie. La meilleure façon de contourner ce problème serait d'ajouter l'utilisateur SVN à votre groupe. Disons que votre crochet post-commit appartient à l'utilisateur someUser et le groupe someUser. Ajout du serveur SVN au groupe someUser et chmodding votre script hook post-commit à être un groupe-exécutable, résoudrait votre problème.

J'espère que cela avait un sens: P

Ce script est préférable, car il met à jour uniquement les fichiers nécessaires ... http://vidax.net/blog/en/2010 / 03 / subversion commit-post-crochet /

Je crois que le post-commit est effectivement exécuté avant que la livraison est rendue visible. Il est étrange, mais dites-vous engagé une révision 30. Le post-commit serait encore voir 29 comme étant la dernière révision. Une fois que le script post-commit est fait, vous verrez 30 que la révision de la tête.

Je peux me tromper. Ceci est strictement de la mémoire. Quelque chose à essayer au moins.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top