回答
要點: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;
}
}
所以你的版本號只是計數提交。如果你從不使用任何分支和合並,這將工作得很好。如果有任何分支,數字不一定唯一標識一次提交。可以試着用點符號來解決這個問題。例如。 4.1.5表示從4根提交後,取第一個分支並提前5個提交。這就要求分支是按例如通過承諾時間。 Git不保證新的提交有更新的提交時間,你需要通過你的程序來保證。編碼這樣的編號方案需要更多的工作。 – 2013-05-03 14:19:07
其實第一個分支是默認分支。 (有些VCS會把它稱爲trunk,但是在git中,一切都是分支)。因此,在提交4之後,第一個分支中的提交將是編號5.如果分支由提交4構成,它將成爲第二個分支。第二個分支中的第一個提交當然是4.1.1。所以第一個分支並不反映在編號中,它是默認的。第n個分支在編號中顯示爲n-1。 – 2013-05-03 14:29:50
實際上,一個git樹可以有多個根。也許不是一個很常見的情況,但是對於一個通用的解決方案,人們需要指出從哪個根開始。在這種情況下,第一個根不能像第一個分支那樣優雅地隱藏起來,或者您需要用字母指定第二個根。 – 2013-05-03 15:26:32
首先,一些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)
更好的解決方案!非常感謝! – 2017-12-22 10:26:46
簡單的方法:
- 短哈希:
$rev = exec('git rev-parse --short HEAD');
- 完整的哈希值:
$rev = exec('git rev-parse HEAD');
- 1. 我想讓我的網站在瀏覽器中顯示完整的版本
- 2. 我想在我的網站上顯示div填充全部
- 3. 我想在我的網站上顯示我的Facebook朋友的生日
- 4. 在我的網站上顯示twitter updtaes
- 5. 在我的網站上顯示Twitter Feed
- 6. 在我的網站上顯示文件
- 7. 我想讓我的網站語言代碼顯示在URL中?
- 8. 我的網站在移動設備上顯示爲桌面版
- 9. 網站我有一點想版本我的Web API的問題API版本URL
- 10. 我想在我的網站上執行python腳本的按鈕
- 11. 我想在我的網站上顯示臉書頁面狀態和評論
- 12. 如何在網站上顯示我的google +網站的帖子
- 13. Git承諾在網站上顯示
- 14. 我如何版本我的asp.net網站?
- 15. Facebook標籤在我的網站沒有顯示我的網站
- 16. 我想在我的網站上顯示一個數據,這是來自其他網站的形式
- 17. 我想在我的粉絲頁上發佈我的網站
- 18. 在我的網站上使用我的時區顯示推文
- 19. 我的Google play徽章沒有顯示在我的網站上
- 20. 身份驗證在我的網站上顯示我的牆
- 21. 如何在我的網站上顯示我的Facebook圖片
- 22. 我的Photoshop圖像不會顯示在我的網站上
- 23. 我想在網站上重播動作
- 24. 感謝git生成我的網站的版本號?
- 25. 非www。版本的網站不顯示
- 26. Safari顯示網站的移動版本
- 27. IE9顯示扭曲版本的網站
- 28. 我正在賣我的網站上顯示易趣項目
- 29. 在我的網站上動態顯示,不是我
- 30. 什麼版本的網站將會在iPad mini上顯示?
所以,你現在想與世界分享?然後你應該分解這個:制定你的問題,然後離開決議作爲答案。見http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ – hakre 2013-05-02 09:16:24
['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
而不是rev-list HEAD管道到頭,只需使用'git rev-parse HEAD' – 2013-05-02 16:18:12