2010-12-26 5 views
10

Wie ändern wir die Version (jeweils +1) mit git bei jedem Push?update version jedes mal git push ist fertig?

Beispiel habe ich eine 2 PHP-Datei

libs/lib1.php 
libs/lib2.php 

auf jedem Kopf in der Regel gibt es einige Informationen wie

/** 
* 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 
*/ 

können wir suchen und hinzufügen +1 Version schieben wir jedes Mal tun?

+1

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

Antwort

13

Worum Sie bitten, ist im Wesentlichen Keyword-Erweiterung. Um zu beginnen, werfen Sie einen Blick auf die Git FAQ Frage "Does git have keyword expansion?". Es heißt:

Keyword-Erweiterung wird nicht empfohlen. Die Schlüsselworterweiterung verursacht alle möglichen seltsamen Probleme und ist sowieso nicht wirklich nützlich, besonders im Kontext eines SCM. Sie können die Schlüsselwort-Erweiterung außerhalb von Git mithilfe eines benutzerdefinierten Skripts durchführen. Das Linux-Kernel-Export-Skript führt dies aus, um die Variable EXTRA_VERSION im Makefile zu setzen.

Siehe gitattributes(5), wenn Sie dies wirklich tun möchten. Wenn Ihre Übersetzung nicht reversibel ist (zB SCCS Keyword Expansion), kann dies problematisch sein. (Hinweis: die mitgelieferte $Id$-expansion setzt den 40-stelligen hexadezimalen Blob-Objektnamen in die ID; Sie können herausfinden, welche Commits diesen Blob enthalten, indem Sie ein Skript wie this verwenden.)

Siehe here for a discussion und here on how GIT may help anyway.

Also git hat etwas wie Keyword-Erweiterung, obwohl es nicht empfohlen wird. Git hat auch nicht das Konzept einer "Dateirevision" (was Ihre @version Nummer zu sein scheint), so dass dies nicht in der Lage wäre, Ihnen genau das zu geben, wonach Sie fragen.

Sie könnten alternativ einen Hook erstellen (wahrscheinlich einen pre-receive-Hook?), Der die Version für Sie erhöht. Dies ist nur eine ausführbare Datei (also kann es eine Shell sein/Python/Perl/Ruby/was auch immer - Sie sind komfortabel - mit Skript), die automatisch ausgeführt wird, wenn Sie einen Push ausführen. Siehe die githooks man page.

Ihr Hook-Skript würde:

  • Dateien identifizieren, die im Begriff sind, geändert werden.
  • Von denen, finden Sie diejenigen, die das Muster enthalten @version \d+
  • Inkrementieren Sie die Version. Sie möchten den Wert im übergeordneten Commit erhöhen, nicht den Wert, der sich derzeit in der Datei befindet!

Beachten Sie, dass dies als unter dem Stichwort Expansion mindestens so schlecht ist, dass die Git FAQ gegen empfiehlt, und möglicherweise noch viel schlimmer. Dies wird wahrscheinlich zu störenden Merge-Konflikten führen. Sie könnten auch leicht mit irreführenden Versionsnummern in Ihrem Code enden, besonders wenn Sie jemals einen Bugfix zu einer älteren Version machen müssen, obwohl es wahrscheinlich auch passieren wird, wenn Sie Änderungen aus mehreren Repos/Zweigen zusammenführen (was bei den meisten ziemlich üblich ist) Git Workflows), wenn Sie nicht vorsichtig sind.

+0

also besser nicht? , ich meine es manuell machen? –

+2

Nun, es liegt an Ihnen zu entscheiden, aber persönlich, ich denke @author und @version sind am besten ganz aus dem Code heraus.Anstatt Dinge zu speichern, die Ihr SCCS im Code kennt, fragen Sie Ihren SCCS. –