Domanda

Sto usando git con trac.Dopo il push voglio due cose da fare:

  1. L'invio di e-mail al team di sviluppo, con diff
  2. Se c'è qualche frase speciale nel messaggio di commit (come "vedere il #1"), quindi voglio che il messaggio di commit a essere messo in biglietto trac.

La prima cosa è risolto da git commit-notifier.Funziona perfettamente dopo che ho creato il post-ricevere gancio:

#!/bin/sh

/var/lib/gems/1.8/bin/git-commit-notifier /etc/git-commit-notifier.yml

Il mio secondo requisito può essere risolto come vedi a http://trac-hacks.org/wiki/GitPlugin#post-receivehookscripts.Funziona perfettamente con tale post-ricevere gancio:

#!/bin/sh

/var/trac/testgit/commit-updater

Entrambi sono 2 cose che funziona quando si sono separati.Ma ho bisogno di combinarli.Così ho creato il post-ricevere gancio:

#!/bin/sh

/var/trac/testgit/commit-updater
/var/lib/gems/1.8/bin/git-commit-notifier /etc/git-commit-notifier.yml

È molto divertente, ma questo non funziona.I comandi funzionano perfettamente bene quando eseguite separatamente, ma solo prima lavora quando essi sono posti in post-ricevere gancio.

Se ho hook:

#!/bin/sh

/var/trac/testgit/commit-updater
/var/lib/gems/1.8/bin/git-commit-notifier /etc/git-commit-notifier.yml

Ricevo il seguente errore

/var/lib/gems/1.8/gems/git-commit-notifier-0.8.0/bin/git-commit-notifier:12: undefined method `strip' for nil:NilClass (NoMethodError)
        from /var/lib/gems/1.8/bin/git-commit-notifier:19:in `load'
        from /var/lib/gems/1.8/bin/git-commit-notifier:19

Ma se cambio l'ordine di questo 2 comandi non ricevo errori, ma solo il primo comando funziona.

Io apprezzo qualsiasi aiuto.Sto cercando di risolvere questo problema per un lungo periodo di tempo e non ho idee.

È stato utile?

Soluzione

Supponendo che il mio commento è corretta, e commit-updater sta mangiando tutto stdin, questo dovrebbe fare il trucco:

#!/bin/sh

FILE=`mktemp`
cat - > $FILE
cat $FILE | /var/trac/testgit/commit-updater
cat $FILE | /var/lib/gems/1.8/bin/git-commit-notifier /etc/git-commit-notifier.yml
rm $FILE

Altri suggerimenti

Ho trovato ngoozeff soluzione utile, ma ho dovuto fare un paio di aggiunte.In un primo momento, lo script dovrebbe fallire se il gancio non riesce.In secondo luogo, alcuni ganci può aspettare argomenti.Nel mio caso il gitzilla gancio era così.

Per me, ha lavorato per la combinazione gitzilla e gitolite ganci:

#!/bin/sh

FILE=`mktemp`
cat - > $FILE
cat $FILE | $GIT_DIR/hooks/update.gitzilla $* || exit 1 
cat $FILE | $GIT_DIR/hooks/update.gitolite $* || exit 1
rm $FILE

Nota il $* e l'uscita dichiarazioni.È inoltre possibile utilizzare il $GIT_DIR variabile.L'aggiornamento.gitzilla e di aggiornamento.gitolite file sono collegamenti simbolici.

Un'alternativa all'utilizzo di un file potrebbe essere:

#!/bin/sh

while read oldrev newrev refname
do
   echo $oldrev $newrev $refname | /var/trac/testgit/commit-updater
   echo $oldrev $newrev $refname | /var/lib/gems/1.8/bin/git-commit-notifier /etc/git-commit-notifier.yml
done

Fonte: http: //mmm.beachtemple .com / blog / 2009/04/06 / git-post-ricevere-gancio /

Dal momento che i dati di input non è poi così grande, si può andare senza file temporaneo e mantenere i dati nella shell:

#!/bin/sh

refs=$(cat)
/var/trac/testgit/commit-updater <<END
$refs
END
/var/lib/gems/1.8/bin/git-commit-notifier /etc/git-commit-notifier.yml <<END
$refs
END
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top