完整参考文章:宝塔利用 Git + WebHook 实现与码云同步【自动部署】

该文章自动部署脚本有问题,修改后的脚本如下:

#!/bin/bash

echo ""
# 输出当前时间
date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"
echo "Start"

# git 分支名称
branch="master"
# git 项目路径(改成你自己的)
gitPath="/www/wwwroot/xxx"
# git 仓库地址(改成你自己的)
gitHttp="https://gitee.com/fendouweiqian/xxx.git"

echo "Web站点路径:$gitPath"

# 判断项目路径是否存在
if [ -d "$gitPath" ]; then
    echo "项目目录存在,切换到 $gitPath"
    cd $gitPath || { echo "切换到目录 $gitPath 失败"; exit 1; }

    # 判断是否存在 .git 目录
    if [ ! -d ".git" ]; then
        echo "在该目录下克隆 git 仓库"
        sudo git clone $gitHttp gittemp
        sudo mv gittemp/.git .
        sudo rm -rf gittemp
    fi

    echo "拉取最新的项目文件"
    sudo git remote add origin $gitHttp 2>/dev/null || echo "远程仓库已存在"
    # 将当前分支 $branch(如 master)与远程分支 origin/$branch 建立“跟踪关系”(tracking relationship)。跟踪关系允许你简化后续的 git pull 或 git push 操作,而无需每次都指定远程分支。
    git branch --set-upstream-to=origin/$branch $branch 2>/dev/null || echo "分支已设置"
    # 将本地分支 $branch 的代码强制重置为远程分支 origin/$branch 的最新状态。本地所有未提交的修改都会被丢弃。
    sudo git reset --hard origin/$branch
    sudo git pull origin $branch 2>&1

    echo "设置目录权限"
    sudo chown -R www:www $gitPath
else
    echo "项目路径不存在,新建项目目录"
    mkdir -p $gitPath || { echo "创建目录 $gitPath 失败"; exit 1; }
    cd $gitPath || { echo "切换到目录 $gitPath 失败"; exit 1; }

    # 克隆 git 仓库
    echo "在该目录下克隆 git 仓库"
    sudo git clone $gitHttp gittemp
    sudo mv gittemp/.git .
    sudo rm -rf gittemp

    echo "拉取最新的项目文件"
    sudo git pull origin $branch 2>&1

    echo "设置目录权限"
    sudo chown -R www:www $gitPath
fi

echo "End"
exit

测试脚本是否正常:
在这里插入图片描述
测试webhook请求是否正常:
在这里插入图片描述

git 一些命令

  1. 不需要每次拉取都输入密码,输入一次后,将用户名和密码缓存
git config --global credential.helper store
  1. 克隆指定文件夹内容
    大概就是在 git 中加入一个类似配置文件,写入你需要的克隆的目录即可
git config core.sparseCheckout true
echo "server/" >> .git/info/sparse-checkout
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐