回答
要点: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