1.服务器配置码云
地址:

2.创建文件夹

cd /data/XXX/xxx #项目运行的目录
mkdir xxxx //创建文件夹 xxxx 代表文件夹名称随便起

3.执行git命令下载代码

cd xxxx #上一步创建的文件夹
 
    //1.配置码云用户名
    
	git config --global user.name "XXX" #自己的码云名称
	
	//2. 配置码云邮箱
	
	git config --global user.email "XXX@qq.com" 
	
	//3.对当前目录进行初始化。输入:
	
	git init
	
	//4.链接为的项目链接
	
	git remote add origin  https://gitee.com/xxx/xxx.git
	
	// https://github.com/a2547/admin.git
	
	//5.码云代码更新到本地 
	
    git pull origin  master

配置码云hook
网上都有教程,自己百度一下怎么配置码云的hook吧~~~

php代码
在项目根目录创建hook.php文件,或者你可以把它封装成方法调用

<?php
//git webhook 自动部署脚本

$git = "/usr/local/git/bin/git"; //默认是用git全局变量,有的环境可能要指明具体安装路径
$branch = ""; //指定pull分支,为空就是默认分支
$savePath = "/data/wwwroot/tp6/"; //网站根目录,初次克隆确保目录为空 最好先给777权限做测试用
$gitSSHPath = "https://name:password@gitee.com/xxx/xxx.git";//代码仓库SSH地址 name 码云账号  password 码云登录密码 
$password = "xxx"; //在GITEE设置的密码
$is_test = false;//测试模式,无需密码:true打开,平时false关闭
$isCloned = true;//设置是否已经Clone到本地,true:已经clone,直接pull,false:先clone.
$logPath = "/data/wwwlogs"; // 项目存放物理路径,改为你的地址


//生成日志
$logDir = $logPath  . '/webhook/' . date('Ymd') . '/';
//这块需要做错文件相关权限 我直接给$logPath 777 权限了
if (!is_dir($logDir)) {
    mkdir($logDir, 0755, true);
}

$logName = date('h') . '.log';
$logName = $logDir.$logName;

//如果已经clone过,则直接拉去代码
if ($isCloned) {
    $requestBody = file_get_contents("php://input");
    if (empty($requestBody) && empty($is_test)) {
        die('send fail');
    }
    //解析码云发过来的JSON信息
    $content = json_decode($requestBody, true);
    $name = $content['project']['owner']['login']; //获取到的用户名
    $email = $content['project']['owner']['email'];
    //若是主分支且提交数大于0
    //密码要正确
    if ($content['password'] == $password ) {
        if ($content['total_commits_count'] > 0 || !empty($is_test)) {
            if ($content['ref'] == "refs/heads/$branch" || !$branch || !empty($is_test)) {
                $git = '/usr/local/git/bin/git'; // 后台运行不能直接用git  必须更上全路径
                $branch = 'https://'.$name.':password@gitee.com/xxxx/xxx.git master';
                $res_log = "[ PULL START ]" . PHP_EOL;
                $res_log .= shell_exec("cd /data/wwwroot/tp6") . PHP_EOL;
                $cmd = "$git pull $branch 2>&1";
                $res_log .= '操作时间:'.date('Y-m-d H:i:s') . PHP_EOL;
                $res_log .= '用户名:'.$name ."       邮箱:".$email . PHP_EOL;
                $res_log .= '向' . $content['repository']['name'] .
                '项目的' . $content['ref'] . '分支pull了' .
                $content['total_commits_count'] . '个commit:' . PHP_EOL;
                $res_log .= $cmd . PHP_EOL;
                $res_log .= "错误提示". shell_exec($cmd) . PHP_EOL;
                $res_log .= "[ PULL END ]" . PHP_EOL;
                $res_log .= PHP_EOL . PHP_EOL;
                file_put_contents($logName , $res_log, FILE_APPEND);//写入日志
                echo 'ork';
            }
        }
    } else {
        file_put_contents($logName, '密码错误!', FILE_APPEND);
        echo '密码错误!!!!';
    }

} else {
    $res = "[ CLONE START ]" . PHP_EOL;
    $res .= shell_exec("$git clone $gitSSHPath $savePath") . PHP_EOL;
    $res .= "[ CLONE END ]" . PHP_EOL;
    file_put_contents($logName, $res, FILE_APPEND);//写入日志
}

码云WebHook通知服务器拉取代码:

关键函数:shell_exec

注意:开放shell_exec这个php函数是非常危险的,因此切记不要在生产环境开放这个函数,更加不能用root权限去执行php。
建议将以下代码放到一个单独配置的测试用网站环境,除log日志文件以外,此环境下所有文件禁止www用户的写入和修改。
说明:我用的是root账号直接配置的,没有配置www用户,有兴趣的童鞋可以自己去找找资料

借鉴地址:
腾讯云文库centos git安装