这个类可以获取信息的一个Git仓库。 它使用的Git客户端程序查询库来获得某些类型的统计信息。 目前,它可以得到所有提交给定的分支,得到的最新提交的哈希,一个给定的分支的数量提交并获得一个给定的分支版本。 PHP 源码与演示: 源码出处演示出处 ?phprequi
这个类可以获取信息的一个Git仓库。它使用的Git客户端程序查询库来获得某些类型的统计信息。
目前,它可以得到所有提交给定的分支,得到的最新提交的哈希,一个给定的分支的数量提交并获得一个给定的分支版本。 PHP
源码与演示:源码出处 演示出处

<?php require_once("git.class.php"); $repo_path = "/home/git/repositories/"; $git = new git; $repos = $git->get_repos("/home/git/projects.list"); if(isset($_GET['git']) && in_array($_GET['git'], $repos) && file_exists($repo_path.$_GET['git']."/refs/heads/master")) { if(isset($_GET['header']) && !empty($_GET['header']) && file_exists($repo_path.$_GET['git']."/refs/heads/".$_GET['header'])) { $header=$_GET['header']; } else { $header="master"; } echo $git->get_version($repo_path.$_GET['git'], $header); } else { echo "404 Not Found - No such project"; } ?>
<?php class git { /** * parse all commits from repo * * @param string $repo * @param int $count * @param string $branch * @return array */ public function get_commits ($repo, $count = -1, $branch = "master") { $data = array(); if(!$data) { $cmd = "git --git-dir=".$repo." rev-list --header --max-count=".$count." ".$branch." "; $rev_list = shell_exec($cmd); foreach(explode("\000", $rev_list) as $rev) { $commit = array(); $rev_lines = explode("\n", str_replace("\r", "", $rev)); $commit['id'] = $rev_lines[0]; foreach($rev_lines as $rev_line) { if(substr($rev_line, 0, 4) == " ") { if(isset($commit['text'])) { $commit['text'] .= "\n".substr($rev_line, 4); } else $commit['text'] = substr($rev_line, 4); } else { $opt = explode(" ", $rev_line); if($opt[0] == "tree") { $commit['tree'] = $opt[1]; } else if($opt[0] == "parent") { $commit['parent'][] = $opt[1]; } else if($opt[0] == "author") { $commit['author'] = $opt[1]; $commit['author_mail'] = $opt[2]; $commit['author_time'] = $opt[3]; } else if($opt[0] == "committer") { $commit['committer'] = $opt[1]; $commit['committer_mail'] = $opt[2]; $commit['committer_time'] = $this->get_age($opt[3]); } } } $data[] = $commit; } } return $data; } /** * get latest commit hash * * @param string $repo * @param string $branch * @raturn string */ public function get_hash ($repo, $branch = "master") { $hash = shell_exec('git --git-dir='.$repo.' rev-list -n 1 --pretty="format:%h" --header '.$branch.' | grep "^[0-9a-f]*$"'); $hash = str_replace("\r","",str_replace("\n","",$hash)); return $hash; } /** * get commit count * * @param string $repo * @param string $branch * @raturn string */ public function get_count ($repo, $branch = "master") { $count = shell_exec('git --git-dir='.$repo.' rev-list --oneline --first-parent --header '.$branch.' | wc -l | sed "s/[ \t]//g"'); $count = str_replace("\r","",str_replace("\n","",$count)); return $count; } /** * get commit version * * @param string $repo * @param string $branch * @raturn string */ public function get_version ($repo, $branch = "master") { return "git-".$this->get_count($repo, $branch)."-".$this->get_hash($repo, $branch); } /** * get commit age * * @param string $age * @raturn string */ public function get_age($age) { $age= time() - $age; if ($age > 60*60*24*365*2) { $age_str = floor($age/60/60/24/365); $age_str .= " years ago"; } else if ($age > 60*60*24*(365/12)*2) { $age_str = floor($age/60/60/24/(365/12)); $age_str .= " months ago"; } else if ($age > 60*60*24*7*2) { $age_str = floor($age/60/60/24/7); $age_str .= " weeks ago"; } else if ($age > 60*60*24*2) { $age_str = floor($age/60/60/24); $age_str .= " days ago"; } else if ($age > 60*60*2) { $age_str = floor($age/60/60); $age_str .= " hours ago"; } else if ($age > 60*2) { $age_str = floor($age/60); $age_str .= " min ago"; } else if ($age > 2) { $age_str = $age; $age_str .= " sec ago"; } else { $age_str = "right now"; } return $age_str; } /** * get repo list from projects.list file * * @param string $path * @raturn array */ public function get_repos ($path) { $repo_list = file_get_contents($path); $repo_list = explode("\n", $repo_list); $data = array(); foreach($repo_list as $id => $repo) { $test = explode(" ",$repo); $data[] = $test[0]; } return $data; } } //end FROM http:www.codepearl.com ?>
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
刺客信条阴影:贝壳谜语解决方案
2 周前ByDDD
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

Atom编辑器mac版下载
最流行的的开源编辑器

Dreamweaver CS6
视觉化网页开发工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能