Rumah php教程 php手册 最近都在使用 Git@OSC 代码托管,分享一个php写的获取git仓库信

最近都在使用 Git@OSC 代码托管,分享一个php写的获取git仓库信

Aug 04, 2016 am 08:54 AM
p kod guna kongsi hosting

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

这个类可以获取信息的一个Git仓库。

它使用的Git客户端程序查询库来获得某些类型的统计信息。

目前,它可以得到所有提交给定的分支,得到的最新提交的哈希,一个给定的分支的数量提交并获得一个给定的分支版本。 PHP

源码与演示:源码出处 演示出处

最近都在使用 Git@OSC 代码托管,分享一个php写的获取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";
}

?>
Salin selepas log masuk
<?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
?>
Salin selepas log masuk
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk berkongsi Quark Netdisk ke Baidu Netdisk? Bagaimana untuk berkongsi Quark Netdisk ke Baidu Netdisk? Mar 14, 2024 pm 04:40 PM

Quark Netdisk dan Baidu Netdisk adalah kedua-dua alat storan yang sangat mudah Ramai pengguna bertanya sama ada kedua-dua perisian ini boleh dikendalikan? Bagaimana untuk berkongsi Quark Netdisk ke Baidu Netdisk? Biarkan laman web ini memperkenalkan kepada pengguna secara terperinci cara menyimpan fail Quark Network Disk ke Baidu Network Disk. Cara menyimpan fail dari Cakera Rangkaian Quark ke Cakera Rangkaian Baidu Kaedah 1. Jika anda ingin tahu cara memindahkan fail dari Cakera Rangkaian Quark ke Cakera Rangkaian Baidu, mula-mula muat turun fail yang perlu disimpan pada Cakera Rangkaian Quark, dan kemudian buka klien Cakera Rangkaian Baidu , pilih folder tempat fail yang dimampatkan akan disimpan dan klik dua kali untuk membuka folder. 2. Selepas membuka folder, klik "Muat naik" di penjuru kiri sebelah atas tetingkap. 3. Cari fail termampat yang perlu dimuat naik pada komputer anda dan klik untuk memilihnya.

Apakah perisian crystaldiskmark? -Bagaimana menggunakan crystaldiskmark? Apakah perisian crystaldiskmark? -Bagaimana menggunakan crystaldiskmark? Mar 18, 2024 pm 02:58 PM

CrystalDiskMark ialah alat penanda aras HDD kecil untuk pemacu keras yang cepat mengukur kelajuan baca/tulis berurutan dan rawak. Seterusnya, biarkan editor memperkenalkan CrystalDiskMark kepada anda dan cara menggunakan crystaldiskmark~ 1. Pengenalan kepada CrystalDiskMark CrystalDiskMark ialah alat ujian prestasi cakera yang digunakan secara meluas yang digunakan untuk menilai kelajuan baca dan tulis serta prestasi pemacu keras mekanikal dan pemacu keadaan pepejal (SSD Prestasi I/O rawak. Ia adalah aplikasi Windows percuma dan menyediakan antara muka mesra pengguna dan pelbagai mod ujian untuk menilai aspek prestasi cakera keras yang berbeza dan digunakan secara meluas dalam ulasan perkakasan

Bagaimana untuk memuat turun foobar2000? -Cara menggunakan foobar2000 Bagaimana untuk memuat turun foobar2000? -Cara menggunakan foobar2000 Mar 18, 2024 am 10:58 AM

foobar2000 ialah perisian yang boleh mendengar sumber muzik pada bila-bila masa Ia membawakan anda semua jenis muzik dengan kualiti bunyi tanpa kehilangan Versi pemain muzik yang dipertingkatkan membolehkan anda mendapatkan pengalaman muzik yang lebih komprehensif dan selesa mainkan audio lanjutan pada komputer Peranti dipindahkan ke telefon mudah alih untuk memberikan pengalaman main balik muzik yang lebih mudah dan cekap Reka bentuk antara muka adalah ringkas, jelas dan mudah digunakan Ia menggunakan gaya reka bentuk minimalis tanpa terlalu banyak hiasan dan operasi yang menyusahkan untuk bermula dengan cepat. Ia juga menyokong pelbagai kulit dan Tema, memperibadikan tetapan mengikut pilihan anda sendiri, dan mencipta pemain muzik eksklusif yang menyokong main balik berbilang format audio. Ia juga menyokong fungsi perolehan audio untuk melaraskan kelantangan kepada keadaan pendengaran anda sendiri untuk mengelakkan kerosakan pendengaran yang disebabkan oleh kelantangan yang berlebihan. Seterusnya, izinkan saya membantu anda

Cara berkongsi Muzik Awan NetEase ke WeChat Moments_Tutorial untuk berkongsi Muzik Awan NetEase ke Momen WeChat Cara berkongsi Muzik Awan NetEase ke WeChat Moments_Tutorial untuk berkongsi Muzik Awan NetEase ke Momen WeChat Mar 25, 2024 am 11:41 AM

1. Mula-mula, kami masukkan Muzik Awan NetEase, dan kemudian klik pada antara muka laman utama perisian untuk memasuki antara muka main balik lagu. 2. Kemudian dalam antara muka main balik lagu, cari butang fungsi perkongsian di bahagian atas sebelah kanan, seperti yang ditunjukkan dalam kotak merah dalam rajah di bawah, klik untuk memilih saluran perkongsian dalam saluran perkongsian, klik pilihan "Kongsi ke". bahagian bawah, dan kemudian pilih "WeChat Moments" yang pertama membolehkan anda berkongsi kandungan ke WeChat Moments.

Cara menggunakan NetEase Mailbox Master Cara menggunakan NetEase Mailbox Master Mar 27, 2024 pm 05:32 PM

NetEase Mailbox, sebagai alamat e-mel yang digunakan secara meluas oleh netizen Cina, sentiasa memenangi kepercayaan pengguna dengan perkhidmatannya yang stabil dan cekap. NetEase Mailbox Master ialah perisian e-mel yang dicipta khas untuk pengguna telefon mudah alih. Ia sangat memudahkan proses menghantar dan menerima e-mel dan menjadikan pemprosesan e-mel kami lebih mudah. Jadi bagaimana untuk menggunakan NetEase Mailbox Master, dan apakah fungsi khusus yang ada di bawah, editor tapak ini akan memberi anda pengenalan terperinci, dengan harapan dapat membantu anda. Mula-mula, anda boleh mencari dan memuat turun aplikasi NetEase Mailbox Master di gedung aplikasi mudah alih. Cari "Induk Peti Mel NetEase" dalam App Store atau Baidu Mobile Assistant, dan kemudian ikut gesaan untuk memasangnya. Selepas muat turun dan pemasangan selesai, kami membuka akaun e-mel NetEase dan log masuk. Antara muka log masuk adalah seperti yang ditunjukkan di bawah

Cara menggunakan aplikasi Baidu Netdisk Cara menggunakan aplikasi Baidu Netdisk Mar 27, 2024 pm 06:46 PM

Storan awan telah menjadi bahagian yang amat diperlukan dalam kehidupan dan kerja harian kita pada masa kini. Sebagai salah satu perkhidmatan storan awan terkemuka di China, Baidu Netdisk telah memenangi hati sebilangan besar pengguna dengan fungsi storan yang berkuasa, kelajuan penghantaran yang cekap dan pengalaman operasi yang mudah. Dan sama ada anda ingin menyandarkan fail penting, berkongsi maklumat, menonton video dalam talian atau mendengar muzik, Baidu Cloud Disk boleh memenuhi keperluan anda. Walau bagaimanapun, ramai pengguna mungkin tidak memahami penggunaan khusus aplikasi Baidu Netdisk, jadi tutorial ini akan memperkenalkan anda tentang cara menggunakan aplikasi Baidu Netdisk secara terperinci Jika anda masih keliru, sila ikuti artikel ini untuk mengetahui lebih lanjut! Cara menggunakan Cakera Rangkaian Awan Baidu: 1. Pemasangan Mula-mula, semasa memuat turun dan memasang perisian Baidu Cloud, sila pilih pilihan pemasangan tersuai.

Tutorial BTCC: Bagaimana untuk mengikat dan menggunakan dompet MetaMask pada pertukaran BTCC? Tutorial BTCC: Bagaimana untuk mengikat dan menggunakan dompet MetaMask pada pertukaran BTCC? Apr 26, 2024 am 09:40 AM

MetaMask (juga dipanggil Little Fox Wallet dalam bahasa Cina) ialah perisian dompet penyulitan percuma dan diterima baik. Pada masa ini, BTCC menyokong pengikatan pada dompet MetaMask Selepas mengikat, anda boleh menggunakan dompet MetaMask untuk log masuk dengan cepat, menyimpan nilai, membeli syiling, dsb., dan anda juga boleh mendapatkan bonus percubaan 20 USDT untuk pengikatan pertama. Dalam tutorial dompet BTCCMetaMask, kami akan memperkenalkan secara terperinci cara mendaftar dan menggunakan MetaMask, dan cara mengikat dan menggunakan dompet Little Fox dalam BTCC. Apakah dompet MetaMask? Dengan lebih 30 juta pengguna, MetaMask Little Fox Wallet ialah salah satu dompet mata wang kripto yang paling popular hari ini. Ia percuma untuk digunakan dan boleh dipasang pada rangkaian sebagai sambungan

Cara berkongsi fail dengan rakan di Baidu Netdisk Cara berkongsi fail dengan rakan di Baidu Netdisk Mar 25, 2024 pm 06:52 PM

Baru-baru ini, klien Android Baidu Netdisk telah memperkenalkan versi baharu 8.0.0 Versi ini bukan sahaja membawa banyak perubahan, tetapi juga menambah banyak fungsi praktikal. Antaranya, yang paling menarik perhatian ialah peningkatan fungsi perkongsian folder. Kini, pengguna boleh dengan mudah menjemput rakan untuk menyertai dan berkongsi fail penting dalam kerja dan kehidupan, mencapai kerjasama dan perkongsian yang lebih mudah. Jadi bagaimana anda berkongsi fail yang anda perlukan untuk berkongsi dengan rakan-rakan anda Di bawah, editor laman web ini akan memberikan pengenalan terperinci kepada anda. 1) Buka Baidu Cloud APP, mula-mula klik untuk memilih folder yang berkaitan pada halaman utama, dan kemudian klik ikon [...] di penjuru kanan sebelah atas antara muka (seperti yang ditunjukkan di bawah) 2) Kemudian klik [+] masuk; lajur "Ahli Dikongsi" 】, dan akhirnya semak semua

See all articles