首页 php教程 php手册 PHP的Git类

PHP的Git类

Jun 06, 2016 pm 07:39 PM
git php 个人 主要 命令 执行 编写

个人编写,用PHP执行GIT命令 主要编写目地是利用git的push钩子访问该PHP能实现push触发自动部署 只实现了pull方法,其余方法可以以类似方法实现 ?php/** * Class Git * @author Jacky.Zhuo * @time 2015-11-01 *///Git操作类class Git { private $_path; priva

个人编写, 用PHP执行GIT命令
主要编写目地是利用git的push钩子访问该PHP能实现push触发自动部署

只实现了pull方法, 其余方法可以以类似方法实现

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

<?php

/**

 * Class Git

 * @author Jacky.Zhuo

 * @time 2015-11-01

 */

 

//Git操作类

class Git {

    private $_path;

    private $_projectName;

    private $_owner;

    private $_username;

    private $_password;

    private $_host;

    private $_suffix = 'git';

    private $_isHttps = false;

     

    private $_url = '';

     

    private $_log;

    private $_output;

     

    private $_descriptorspec;

     

    /**

     * 构造函数

     *

     * 设置git参数

     *

     * @param string $path 项目本地路径

     * @param string $projectName 项目名

     * @param string $owner 拥有者

     * @param string $username 帐号用户名

     * @param string $password 帐号密码

     * @param string $host 项目所在地址

     * @param string $suffix 项目后缀

     * @param boolen $isHttps 项目协议是否为https

     * @param string $log 访问日志文件路径

     * @param string $output 命令日志文件路径

     * @return void

     */

    public function __construct($path = __DIR__, $projectName, $owner, $username, $password, $host, $suffix = false, $isHttps = false, $log = false, $output = false) {

        $configFields = array('path', 'projectName', 'owner', 'username', 'password', 'host');

 

        //设置项目信息

        foreach($configFields as $field) {

            if(empty($$field)) {

                throw new Exception("{$field} is empty!");

                return false;

            }

             

            $this->{'_' . $field} = $$field;

        }

         

        //设置路径协议

        if($isHttps) {

            $this->_isHttps = true;

        }

         

        //设置项目后缀

        if($suffix) {

            $this->_suffix = $suffix;

        }

         

        //设置log地址

        if($log) {

            $this->_log = $log;

        } else {

            $this->_log = __DIR__ . '/git_log.txt';

        }

         

        //设置git命令返回记录文件地址

        if($output) {

            $this->_output = $output;

        } else {

            $this->_output = __DIR__ . '/git_output.txt';

        }

         

        //设置git命令参数

        $this->_descriptorspec = array(

            0 => array('pipe', 'r'),

            1 => array('pipe', 'w'),

            2 => array('file', $this->_output, 'a')

        );

         

        //生成远程url

        $this->_createUrl();

    }

     

    /**

     * pull方法

     *

     * 从服务器中pull到本地

     *

     * @param string $branch 默认为 origin master

     * @return boolen

     */

    public function pull($branch = 'origin master') {

        $cmd = 'git pull ' . $this->_url . ' ' . $branch;

        return $this->_runCmd($cmd);

    }

     

    public function fetch() {

         

    }

     

    public function push() {

         

    }

     

    public function gclone() {

         

    }

     

    /*

     * 生成git地址url

     *

     * git地址格式 [https://][username]:[password]@[host]/[owner]/[projectName].[suffix]

     *

     * @reutrn void

     */

    private function _createUrl() {

        $url = '';

         

        //添加协议

        if($this->_isHttps) {

            $url .= 'https://';

        } else {

            $url .= 'http://';

        }

         

        //添加用户名密码

        $url .= urlencode($this->_username) . ':' . urlencode($this->_password);

 

        //添加地址

        $url .= '@' . $this->_host . '/';

 

        //添加项目地址

        $url .= $this->_owner . '/' . $this->_projectName;

 

        //添加项目后缀

        $url .= '.' . $this->_suffix;

 

        $this->_url = $url;

    }

     

    /*

     * log方法

     *

     * 记录访问日志

     *

     * @param string $msg 日志

     * @return void

     */

    private function _writeLog($msg) {

        $log = date('Y-m-d H:i:s') . ":\n";

        $log .= $msg;

        $log .= "-------------------------------------\n";

         

        file_put_contents($this->_log, $log, FILE_APPEND | LOCK_EX);

    }

     

    /*

     * 运行命令行

     *

     * 该方法可以运行命令行, 并会自动记录命令行日志

     *

     * @param string $cmd 要运行的命令行

     * @return boolen

     */

    private function _runCmd($cmd) {

        file_put_contents($this->_output, date('Y-m-d H:i:s') . ":\n", FILE_APPEND);

         

        $process = proc_open($cmd, $this->_descriptorspec, $pipes, $this->_path);

        if(is_resource($process)) {

            $output = stream_get_contents($pipes[1]);

            fclose($pipes[1]);

        } else {

            $output = 'no command';

        }

         

        $returnValue = proc_close($process);

         

        file_put_contents($this->_output, "---------------------------------\n", FILE_APPEND);

         

        if($returnValue) {

            $this->_writeLog('Command faild.' . "\n");

            return false;

        } else {

            $this->_writeLog('Command success: ' . $output);

            return true;

        }

    }

}

 

try {

    $git = new Git(__DIR__, 'project', 'owner', 'username', 'password', 'host', 'suffix', true);

} catch(Exception $e) {

    echo $e->getMessage();

    die;

}

 

$git->pull('test');

登录后复制

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PHP和Python:解释了不同的范例 PHP和Python:解释了不同的范例 Apr 18, 2025 am 12:26 AM

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

在PHP和Python之间进行选择:指南 在PHP和Python之间进行选择:指南 Apr 18, 2025 am 12:24 AM

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

PHP和Python:深入了解他们的历史 PHP和Python:深入了解他们的历史 Apr 18, 2025 am 12:25 AM

PHP起源于1994年,由RasmusLerdorf开发,最初用于跟踪网站访问者,逐渐演变为服务器端脚本语言,广泛应用于网页开发。Python由GuidovanRossum于1980年代末开发,1991年首次发布,强调代码可读性和简洁性,适用于科学计算、数据分析等领域。

git怎么下载项目到本地 git怎么下载项目到本地 Apr 17, 2025 pm 04:36 PM

要通过 Git 下载项目到本地,请按以下步骤操作:安装 Git。导航到项目目录。使用以下命令克隆远程存储库:git clone https://github.com/username/repository-name.git

git怎么更新代码 git怎么更新代码 Apr 17, 2025 pm 04:45 PM

更新 git 代码的步骤:检出代码:git clone https://github.com/username/repo.git获取最新更改:git fetch合并更改:git merge origin/master推送更改(可选):git push origin master

PHP的影响:网络开发及以后 PHP的影响:网络开发及以后 Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

git怎么合并代码 git怎么合并代码 Apr 17, 2025 pm 04:39 PM

Git 代码合并过程:拉取最新更改以避免冲突。切换到要合并的分支。发起合并,指定要合并的分支。解决合并冲突(如有)。暂存和提交合并,提供提交消息。

git commit怎么用 git commit怎么用 Apr 17, 2025 pm 03:57 PM

Git Commit 是一种命令,将文件变更记录到 Git 存储库中,以保存项目当前状态的快照。使用方法如下:添加变更到暂存区域编写简洁且信息丰富的提交消息保存并退出提交消息以完成提交可选:为提交添加签名使用 git log 查看提交内容

See all articles