2013-05-02 59 views
6

我想在我的網站上顯示git版本號。我想在我的網站上顯示git版本

我發現它是一個提交散列,這不適合非技術用戶參考。

我創建了這個類來顯示當前git的版本號。

+5

所以,你現在想與世界分享?然後你應該分解這個:制定你的問題,然後離開決議作爲答案。見http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ – hakre 2013-05-02 09:16:24

+0

['git describe'](https://www.kernel.org /pub/software/scm/git/docs/git-describe.html)與[標籤](http://git-scm.com/book/en/Git-Basics-Tagging)一起使用會更有意義。 – Joe 2013-05-02 13:59:34

+0

而不是rev​​-list HEAD管道到頭,只需使用'git rev-parse HEAD' – 2013-05-02 16:18:12

回答

14

要點: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

所以你的版本號只是計數提交。如果你從不使用任何分支和合並,這將工作得很好。如果有任何分支,數字不一定唯一標識一次提交。可以試着用點符號來解決這個問題。例如。 4.1.5表示從4根提交後,取第一個分支並提前5個提交。這就要求分支是按例如通過承諾時間。 Git不保證新的提交有更新的提交時間,你需要通過你的程序來保證。編碼這樣的編號方案需要更多的工作。 – 2013-05-03 14:19:07

+0

其實第一個分支是默認分支。 (有些VCS會把它稱爲trunk,但是在git中,一切都是分支)。因此,在提交4之後,第一個分支中的提交將是編號5.如果分支由提交4構成,它將成爲第二個分支。第二個分支中的第一個提交當然是4.1.1。所以第一個分支並不反映在編號中,它是默認的。第n個分支在編號中顯示爲n-1。 – 2013-05-03 14:29:50

+0

實際上,一個git樹可以有多個根。也許不是一個很常見的情況,但是對於一個通用的解決方案,人們需要指出從哪個根開始。在這種情況下,第一個根不能像第一個分支那樣優雅地隱藏起來,或者您需要用字母指定第二個根。 – 2013-05-03 15:26:32

29

首先,一些git命令來獲取版本信息:

  • 提交散列長
    • git log --pretty="%H" -n1 HEAD
  • 提交散列短
    • git log --pretty="%h" -n1 HEAD
  • 提交日期
    • git log --pretty="%ci" -n1 HEAD
  • 標籤
    • git describe --tags --abbrev=0
  • 標籤長,哈希
    • git describe --tags

其次,簡單地使用exec()與您所選擇的git的命令,從上面的組合,從而構建版本標識符:

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

更好的解決方案!非常感謝! – 2017-12-22 10:26:46

1

簡單的方法:

  • 短哈希$rev = exec('git rev-parse --short HEAD');
  • 完整的哈希值$rev = exec('git rev-parse HEAD');
相關問題