2015-12-04 18 views
7

Sto eseguendo questo script di shell ogni volta che eseguo uno git commit -m "msg" che scrive il log di commit in un file php. Voglio che includa anche il messaggio di commit corrente che sto facendo in quel momento.Utilizzo di un hook Git per creare un registro di commit e aggiunta al commit corrente

mio script di shell:

#!/bin/sh 
path="path/to/gitlog.php" 
echo "<?php $git_log = array(" > $path 
git log --date=iso --pretty=format:'array("%h","%an","%ad","%s"),' >> $path 
echo ");" >> $path 

Il gitlog.php viene salvato al mio repository, che io poi git push.

Attualmente l'ho nel gancio 'pre-commit', c'è un modo per ottenere il messaggio di commit all'interno di questo hook?

mio caso d'uso

Io sono l'unico sviluppatore del progetto. C'è poco tempo! è per gli altri che sono coinvolti nel progetto per vedere i progressi e leggere i registri di commit descrittivi senza che il sovraccarico di me debba raddoppiare. Il registro viene emesso in una dashboard a cui tutti hanno accesso.

Git non è in esecuzione sul server cruscotto, ei file vengono distribuiti da un repository società di hosting (Beanstalk)

+0

Un hook di pre-commit viene eseguito prima del commit, quindi non può includere il commit stesso. Puoi creare un nuovo commit aggiuntivo * dopo * che hai effettuato il commit e puoi anche fare in modo che quel nuovo commit abbia un genitore diverso dal commit più recente (questo è il modo in cui 'git commit --amend' funziona), ma non è possibile modificare il commit esistente. Se stai cercando di includere le informazioni sulla versione, il solito metodo con git è di mantenere quel file fuori da git, specialmente se l'intero file è generato da un commit (come questo sarebbe). Per visualizzare un vecchio commit fai il checkout, quindi esegui la tua "versione generica". – torek

+0

@torek, thks - non c'è un hook che viene chiamato prima dell'esecuzione del commit effettivo e viene passato il dato del messaggio, che posso aggiungere manualmente il messaggio di commit e la data al log, ri-eseguire il 'git add. ' e infine continuare con l'impegno? – digout

+0

Aha, sì, c'è l'hook 'commit-msg'. Ha lo scopo di consentire di modificare il messaggio (per gli standard di formattazione) o di rifiutare il commit se il messaggio è sbagliato. Non ho mai utilizzato questo hook personalmente ma funziona al punto giusto nel processo di commit. Consiglierei di non fare 'git add .' (che potrebbe aggiungere file che si sta deliberatamente lasciando modificati ma non modificati) ma' git add $ path' potrebbe funzionare correttamente qui. (Suggerisco di provare anche con commit di file specifici, e/o 'git commit -a', per vedere se funziona proprio lì.) – torek

risposta

0

Dato il vostro caso d'uso, vorrei suggerire:
spostare il vostro gancio pre-commit sulla vostra macchina locale al post-checkout gancio sul server di cruscotto (ero lì immagino è un clone del repo dietro quel sito Dashboard?)

+0

No, i file vengono distribuiti nel 'dashboard server' da un hoster repo (Beanstalk) – digout

1

Un'altra opzione potrebbe essere quella di creare un gancio appropriato che scrive il changelog in un file di fuori tua pronti contro termine, e quindi spinge il file in qualche luogo accessibile da utenti esterni . Non c'è bisogno di impegnare il changelog, che è la causa dei problemi.

Problemi correlati