2010-12-26 13 views
10

come ci piace cambiare versione (ogni +1) usando git su ogni push?aggiornamento versione ogni volta che git push è fatto?

esempio ho un file php 2

libs/lib1.php 
libs/lib2.php 

su ogni intestazione di solito ci sono alcune informazioni come

/** 
* LIB1.PHP 
* this libs does something like this 
* and that this is a doc for you 
* @version 145 
* @todo something todo 
* @author DAMS 
*/ 

/** 
* LIB2.PHP 
* this libs does something like this 
* and that this is a doc for you 
* @version 445 
* @todo something todo 
* @author DAMS 
*/ 

possiamo cercare e aggiungere +1 fare versione ogni volta che ci spingiamo?

+1

Vedere anche http://stackoverflow.com/questions/1127177/to-put-the-prefix-revision-number-to-codes-by-git-svn – VonC

risposta

13

Quello che stai chiedendo è essenzialmente l'espansione delle parole chiave. Per iniziare, dare un'occhiata alla domanda Git FAQ "Does git have keyword expansion?". Dice:

L'espansione della parola chiave non è consigliata. L'espansione delle parole chiave causa ogni sorta di strani problemi e non è comunque molto utile, specialmente nel contesto di un SCM. Puoi eseguire l'espansione delle parole chiave al di fuori di git usando uno script personalizzato. Lo script di esportazione del kernel di Linux esegue questa operazione per impostare la variabile EXTRA_VERSION nel Makefile.

Vedere gitattributes(5) se si vuole veramente farlo. Se la traduzione non è reversibile (ad es. Espansione della parola chiave SCCS), ciò potrebbe essere problematico. Suggerimento: lo $Id$-expansion fornito inserisce il nome dell'oggetto blob esadecimale di 40 caratteri nell'ID, è possibile capire quali commit includono questo blob utilizzando uno script come this.

Vedere here for a discussion e here on how GIT may help anyway.

Quindi git ha qualcosa come espansione di parole chiave, anche se non è raccomandato. Git inoltre non ha il concetto di una "revisione dei file" (che è il numero del tuo numero), quindi questo non sarebbe in grado di darti esattamente quello che stai chiedendo.

In alternativa è possibile creare un gancio (probabilmente un gancio di pre-ricezione?), Che incrementerebbe la versione per voi. Questo è solo un eseguibile (quindi può essere uno shell/Python/Perl/Ruby/qualunque-you-are-comfortable-script) che verrà eseguito automaticamente quando si esegue una push. Vedi lo githooks man page.

Lo script gancio sarebbe:

  • identificare i file che stanno per essere modificati.
  • Di quelli, trova quelli che contengono il modello @version \d+
  • Incrementa la versione. Si desidera incrementare il valore nel commit parent e non il valore attualmente nel file!

Si noti che questo è almeno così male come usare la sostituzione di parole chiave che la FAQ Git raccomanda contro, e forse molto peggio. Ciò potrebbe portare a fastidiosi conflitti di fusione. Potresti anche finire facilmente con numeri di versione fuorvianti nel tuo codice, specialmente se dovessi mai eseguire una correzione per una versione precedente, anche se probabilmente si verificherà anche ogni volta che unirai le modifiche da più repos/filiali (che è piuttosto comune con la maggior parte git workflows) se non stai attento.

+0

quindi meglio di no? , voglio dire farlo manualmente? –

+2

Bene, dipende da voi decidere, ma personalmente, penso che @author e @version siano meglio lasciati fuori dal codice interamente.Piuttosto che memorizzare le cose che il tuo SCCS conosce nel codice, chiedi al tuo SCCS. –

Problemi correlati