Ho un problema con il gancio di 'aggiornamento'. Nel caso di una nuova filiale, ottiene un 0000000000000000000000000000000000000000 come 'oldrev'. E non so come gestire quel caso.Git ricevere/aggiornare ganci e nuovi rami
Abbiamo il requisito che ogni messaggio di commit faccia riferimento a un problema Jira valido. Quindi ho installato un hook di "aggiornamento" sul nostro repository centrale. Quel gancio ottiene un "oldrev" e un "newrev". Ho poi trasferirà a "git rev-list" come questo:
git rev-list $oldrev..$newrev
Questo mi dà l'elenco di tutti i regimi, che posso poi scorrere, e fare tutto ciò che devo fare.
Il problema è che, quando l'utente preme un nuovo ramo, il gancio ottiene 0000000000000000000000000000000000000000 come oldrev. E "git rev-list" semplicemente si lamenta con:
fatal: Invalid revision range 0000000000000000000000000000000000000000..21bac83b2
così come faccio a ottenere l'elenco di tutti i giri che si trovano su quel nuovo ramo? Ho cercato la rete per un bel po 'di tempo e non ho trovato nulla. L'esempio ganci ho trovato sia
- non gestire il problema, e non con il messaggio di errore di cui sopra
- in modo non corretto cercare di risolvere il problema impostando l'oldrev su "", che restituisce i risultati errati dal rev -list
- semplicemente rinunciare quando incontrano che oldrev
Nessuno di questi suono particolarmente emozionante.
Quindi qualcuno ha qualche idea su come ottenere la risposta giusta in questo caso? Stavo pensando di interrogare git per "dammi tutti i giri che sono raggiungibili da newrev, ma non da nessuno degli altri rami (= tutti i rami eccetto quello nuovo)". Ma anche questo darebbe la risposta sbagliata se ci fosse stata una fusione tra il nuovo ramo e uno qualsiasi di quelli vecchi.
Non sono sicuro che si tratti di qualcosa di strano con il mio ambiente o di un aggiornamento di git, ma la negazione sta rimuovendo i riferimenti sul ramo corrente. Devo fare qualcosa del genere: 'git rev-list $ (git for-each-ref --format = '% (refname)'" refs/heads/* "| grep -v '$ ref' | sed 's/^/\^/') "$ newrev" ' – mmalone
Per l'uso negli hook' update' (e 'pre-receive'), come specificato nella domanda, queste risposte sono tutte più complicate e costose. La risposta di Joseph sotto è la più semplice e più efficiente; quella dovrebbe essere la risposta scelta IMO. – MadScientist
@mmalone hai ragione. Ho dovuto aggiungere "| grep -v '$ rev'". Altrimenti ho sempre ottenuto risultati empy – dritan