2012-04-15 15 views
7

Sto sviluppando convalida e rilascio di fibre di utilità per essere integrato con vari commettere ganci, tra cui Git unoGit pre-commit hook: ottenere l'elenco dei file modificati

https://github.com/miohtama/vvv

Attualmente validatori e linters vengono eseguite tutta codice di progetto su ogni commit. Tuttavia, sarebbe molto più ottimale eseguirli solo contro i file modificati. Per questo, avrei bisogno di sapere lista dei file modificati nel mio gancio precommit Git (in Python)

https://github.com/miohtama/vvv/blob/master/vvv/hooks/git.py

Quali opzioni devo estrarre l'elenco dei file modificati (in Python se quello che conta)?

risposta

5

Il pre-commit hook è un po 'di dolore, se si vuole veramente a far funzionare le cose "giusto", perché ciò che è nella struttura di lavoro non è necessariamente lo stesso di ciò che deve essere impegnato:

$ echo morestuff >> file1; echo morestuff >> file2 
$ git add file1 # but not file2 
$ git commit -m 'modified two files but check in just one' 

È possibile utilizzare git diff-index --cached HEAD per ottenere un elenco di "cosa sta per essere archiviato". Vedi anche, ad es., http://newartisans.com/2009/02/building-a-better-pre-commit-hook-for-git/.

+0

Per il collegamento dell'articolo: è piuttosto difficile mantenere la seconda copia del repository solo per verificare quali file sono stati modificati :( –

+0

Non è necessaria una seconda copia del repository, ma è possibile (a seconda di cosa 'stai facendo) bisogno di un secondo albero di lavoro Ci sono fondamentalmente due alternative: controlla l'indice altrove, in modo da ottenere un albero di lavoro che corrisponda a ciò che deve essere controllato, o, verificare che l'albero di lavoro corrente sia "pulito" ", in modo da poter utilizzare la directory corrente (l'hook di pre-commit viene eseguito nell'albero di lavoro) – torek

+0

Funziona perfettamente, fino a qui. Ecco la soluzione completa https://github.com/miohtama/vvv/blob/ master/vvv/hooks/git.py –