这个类可以获取信息的一个Git仓库。
它使用的Git客户端程序查询库来获得某些类型的统计信息。
目前,它可以得到所有提交给定的分支,得到的最新提交的哈希,一个给定的分支的数量提交并获得一个给定的分支版本。
测试类
<?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"; } ?>
git类
<?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; } } ?>
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事
アサシンのクリードシャドウズ:シーシェルリドルソリューション
1 か月前ByDDD
Atomfallのクレーンコントロールキーカードを見つける場所
1 か月前ByDDD
Inzoi:学校と大学への応募方法
3週間前ByDDD

ホットツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ドリームウィーバー CS6
ビジュアル Web 開発ツール

ホットトピック
Gmailメールのログイン入り口はどこですか?
7767
15


Java チュートリアル
1644
14


CakePHP チュートリアル
1399
52


Laravel チュートリアル
1293
25


PHP チュートリアル
1234
29

