2013-05-02 12 views
6

Ich möchte die git Versionsnummer auf meiner Website anzeigen.Ich möchte die Git-Version auf meiner Website anzeigen

Ich fand, dass es ein Commit-Hash war und dies war nicht geeignet für nicht-technische Benutzer zu verweisen.

Ich habe diese Klasse erstellt, um die Versionsnummer des aktuellen git local dieses Skripts anzuzeigen.

+5

So mögen Sie jetzt mit der Welt teilen? Dann sollten Sie das aufteilen: Formulieren Sie Ihre Frage und lassen Sie dann die Auflösung als Antwort. Siehe http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ – hakre

+0

['git describe'] (https://www.kernel.org /pub/software/scm/git/docs/git-describe.html) ist bei Verwendung mit [tagging] (http://git-scm.com/book/en/Git-Basics-Tagging) viel sinnvoller. – Joe

+0

Anstatt Rev-Liste HEAD piped zu Kopf, verwenden Sie einfach 'git rev-parse HEAD' –

Antwort

14

Gist: https://gist.github.com/lukeoliff/5501074

<?php 

class QuickGit { 

    public static function version() { 
    exec('git describe --always',$version_mini_hash); 
    exec('git rev-list HEAD | wc -l',$version_number); 
    exec('git log -1',$line); 
    $version['short'] = "v1.".trim($version_number[0]).".".$version_mini_hash[0]; 
    $version['full'] = "v1.".trim($version_number[0]).".$version_mini_hash[0] (".str_replace('commit ','',$line[0]).")"; 
    return $version; 
    } 

} 
+3

Also zählt deine Versionsnummer nur die Commits. Dies funktioniert gut, wenn Sie niemals Verzweigungen und Zusammenführungen verwenden. Wenn es Verzweigungen gibt, wird die Nummer nicht unbedingt eindeutig eine einzelne Festschreibung identifizieren. Man könnte versuchen, das Problem mit einer Punktnotation zu lösen. Z.B. 4.1.5 bedeutet nach 4 commits von der Wurzel, nimm die erste Verzweigung und füge 5 commits vor. Dies würde erfordern, dass Zweige z. durch Commit-Zeit. Git garantiert nicht, dass neuere Commits eine neuere Commit-Zeit haben, Sie müssten dies durch Ihren Prozess garantieren. Die Codierung eines solchen Nummerierungsschemas erfordert mehr Arbeit. –

+0

Eigentlich ist der erste Zweig der Standard. (Manche VCS würden es trunk nennen, aber in git ist alles eine Verzweigung.) Also wäre nach dem Commit 4 das Commit in der ersten Verzweigung die Nummer 5. Wenn eine Verzweigung von Commit 4 gemacht wird, wäre dies die zweite Verzweigung. Das erste Commit in der zweiten Verzweigung wäre natürlich 4.1.1. Der erste Zweig wird also nicht in der Nummerierung angezeigt, es ist der Standardwert. Der n-te Zweig wird in der Nummerierung als n-1 angezeigt. –

+0

Und eigentlich kann ein Git Baum mehr als eine Wurzel haben. Das ist vielleicht kein sehr gewöhnlicher Fall, aber für eine allgemeine Lösung müsste man angeben, von welcher Wurzel man anfangen soll. In diesem Fall kann die erste Wurzel nicht so elegant wie die erste Verzweigung ausgeblendet werden oder Sie müssen die zweite Wurzel mit einem Buchstaben kennzeichnen. –

29

Zunächst einige git Befehle Versionsinformationen abzurufen:

  • begehen Hash lange
    • git log --pretty="%H" -n1 HEAD
  • commit Hash kurzen
    • git log --pretty="%h" -n1 HEAD
  • commit Datum
    • git log --pretty="%ci" -n1 HEAD
  • tag
    • git describe --tags --abbrev=0
  • Tag lang mit Hash-
    • git describe --tags

Zweitens einfach exec() mit den git Befehle Ihrer Wahl von oben kombiniert verwenden zu bauen die Versionskennung:

class ApplicationVersion 
{ 
    const MAJOR = 1; 
    const MINOR = 2; 
    const PATCH = 3; 

    public static function get() 
    { 
     $commitHash = trim(exec('git log --pretty="%h" -n1 HEAD')); 

     $commitDate = new \DateTime(trim(exec('git log -n1 --pretty=%ci HEAD'))); 
     $commitDate->setTimezone(new \DateTimeZone('UTC')); 

     return sprintf('v%s.%s.%s-dev.%s (%s)', self::MAJOR, self::MINOR, self::PATCH, $commitHash, $commitDate->format('Y-m-d H:m:s')); 
    } 
} 

// Usage: echo 'MyApplication ' . ApplicationVersion::get(); 

// MyApplication v1.2.3-dev.474a1d0 (2016-11-02 14:11:22) 
+0

Bessere Lösung! Danke, Mutti! –

1

einfache Art und Weise:

  • Short Hash: $rev = exec('git rev-parse --short HEAD');
  • Voll Hash: $rev = exec('git rev-parse HEAD');
Verwandte Themen