Domanda

Sto cercando di implementare un hook post-commit per aggiornare una copia funzionante.Per quanto ho capito, l'hook post commit è in esecuzione (ho scritto qualcosa in un file per verificarlo) ma il comando update non è stato eseguito.

All'inizio l'ho fatto

cd /home/user/working/copy
svn update

ma non ha funzionato, poi ho letto che devi dare il percorso completo a svn:

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

ma ancora non ha funzionato.

Ho cambiato le autorizzazioni in 777 e ho eseguito lo script in un ambiente vuoto ...e funziona.

È stato utile?

Soluzione 5

la soluzione finale che ho ottenuto lavorando era un mix alcune delle risposte che ho ricevuto. Il mio server era in esecuzione Apache come nessuno, così ho fatto la copia di lavoro essere di proprietà di nessuno e il nome utente gruppo e poi chmod a 775. In questo modo il gancio funzionerà e anche il nome utente avrà anche permision per aggiornare i file tramite FTP.

Altri suggerimenti

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

Il codice precedente dovrebbe funzionare come un gancio post-commit.

Aggiungi --username & opzioni --password se necessario.

Modifica

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

Il programma server di eseguire il commit (svnserve o Apache) è lo stesso programma che eseguirà lo script hook post-commit. Ciò significa che questo programma deve avere autorizzazioni appropriate per aggiornare la copia di lavoro.

Se il 'copia di lavoro' che deve essere aggiornato è di proprietà dello stesso utente, quindi non è necessario preoccuparsi di nome utente e password.

Il Subversion FAQ suggerisce di utilizzare Setuid con il seguente programma 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 copia di lavoro è nella home directory di un utente. Se il server SVN viene eseguito come un utente diverso, dire "svnserver", allora la-commit Post Script hook verrà eseguito come "svnserver". Ha senso che un utente non può modificare o leggere i file di un altro utente a meno che le impostazioni di autorizzazione sui file sono tali che questo è permesso.

Non si dovrebbe condividere copie di lavoro tra più utenti . Se davvero si deve, quindi semplicemente dando lettura / scrittura per ogni utente non è sufficiente. Si sarebbe anche necessario assicurarsi che nessuno degli utenti creano file che sono inaccessibili ad altri utenti. Per ottenere che si avrebbe bisogno di scrivere script wrapper per i comandi svn che impostare la corretta umask , o dare a tutti gli utenti interessati la possibilità di agire come un utente specifico tramite sudo .

Se non si utilizza l'workingcopy da soli, puoi chown il workingcopy per l'utente che corre il gancio-script

Anch'io ho riscontrato lo stesso problema e ho provato (incluso quello nelle FAQ ufficiali) tutti i metodi senza fortuna

ovviamente eseguo anche chmod -R e chown -R www-data:www-data ogni volta secondo necessità.

Nella maggior parte dei casi, il comando di aggiornamento è stato eseguito, nessun errore di autorizzazione, nessun altro messaggio di errore, ma la copia di lavoro non viene aggiornata.

finalmente i passaggi seguenti funzionano bene per me:

nell'esecuzione del hook post-commit

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

una volta, quindi aggiorna l'hook post-commit a

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

ora funziona e sono troppo stanco per trovare la causa principale.ho passato l'intera giornata solo su 'svn update'

La risposta di wcoenen è sicuramente sulla strada giusta. Il modo più semplice per aggirare questo problema potrebbe essere quella di aggiungere l'utente SVN per il vostro gruppo. Diciamo che il tuo post-commit hook è di proprietà dell'utente e del gruppo someuser someuser. Aggiunta del server SVN al gruppo QualcheUtente e chmodding tuo post-commit hook script di essere gruppo-eseguibile, avrebbe risolto il problema.

Spero che aveva un senso: P

Questo script è meglio perché aggiorna solo i file necessari ... http://vidax.net/blog/en/2010 / 03 / eversione-post-commit-gancio /

Credo che il post-commit in realtà viene eseguito prima che il commit si rende visibile. E 'strano, ma dire che si revisione impegnato 30. Il post-commit sarebbe ancora vedere 29 come l'ultima revisione. Una volta che il post-commit script è fatto, si vedrà 30 come la revisione testa.

potrei sbagliarmi. Questo è rigorosamente dalla memoria. Qualcosa da provare almeno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top