1158 字
6 分钟
本地git服务器搭建
我的博客丢在自己的vps服务器上但是每次构建完还要手动上传觉得麻烦,就打算尝试配置个git后期直接push然后利用钩子自动构建发布。
PS:捣鼓的时候发现,我vps内存只有1G这完全导致我的钩子在运行构建就会出现内存溢出的报错,然后现在只能改进push目标,我本地构建完直接上传dist构建好的内容,然后用钩子粘贴到网页的存放路径。。。。
服务端Ubuntu20.04
1、安装git服务
$ apt install -y git2、创建git用户并创建密码
$ adduser git$ passwd git3、创建Git仓库
$ mkdir -p /home/git/blog.git$ cd /home/git/blog.git$ git init --bare$ chown -R git:git /home/git/blog.git配置Nginx服务用来测试,后续无问题切换到对应的路径
$ apt install -y nginx$ systemctl start nginx$ chmod -R 775 /var/www/html/$ chown -R git:git /var/www/html/4、配置Git钩子
$ cd /home/git/blog.git/hooks$ cat > post-receive << 'EOF'#!/bin/bash
TEMP_DIR="/tmp/blog_deploy_$(date +%s)"PROD_DIR="/var/www/html/"GIT_REPO="$HOME/blog.git"
error_exit() { echo "❌ $1" [ -d "$TEMP_DIR" ] && rm -rf "$TEMP_DIR" exit 1}
echo "🚀 开始部署"mkdir -p "$TEMP_DIR" || error_exit "创建临时目录失败"cd "$TEMP_DIR" || error_exit "进入目录失败"git --work-tree="$TEMP_DIR" --git-dir="$GIT_REPO" checkout -f || error_exit "检出代码失败"[ ! -d "dist" ] && error_exit "未找到 dist 目录,请本地构建后推送"
echo "部署到生产目录..."mkdir -p "$PROD_DIR"rm -rf "$PROD_DIR"/*cp -r dist/* "$PROD_DIR/" || error_exit "文件复制失败"rm -rf "$TEMP_DIR"
echo "✅ 部署成功"echo "📁 目录: $PROD_DIR"exit 0EOF$ chmod +x post-receive$ chown git:git post-receive客户端
1、进入博客项目检查是否已存在git仓库
$ git status2、没有初始化,先初始化
$ git init3、添加服务端仓库
$ git remote add vps git@服务器IP地址:/home/git/blog.git4、将本地代码推送到服务端
$ git add .$ git commit -m "初始化博客"# 一般情况分支要么是master要么是main$ git push vps master5、(可选)设置免密Push
- 打开 PowerShell 或 Git Bash
- 生成 SSH 密钥(如果还没有)
$ ssh-keygen -t ed25519 -C "your_email@example.com"- 查看生成的密钥(id_ed25519.pub),路径:C:\Users\User.ssh
- 复制密钥内容
- 在VPS中,进入git用户
$ mkdir -p ~/.ssh$ echo "粘贴你复制的公钥内容" >> ~/.ssh/authorized_keys$ chmod 600 ~/.ssh/authorized_keys- 可锁定git账户的密码
# 锁定 git 用户的密码,使其无法使用密码登录sudo passwd -l git
# 验证用户状态sudo passwd -S git# 应该显示 "L" 或 "LK",表示密码被锁定可能遇到的问题
1.切换远程仓库地址
$ git remote set-url vps git@新服务器IP地址:/home/git/blog.git2.如果触发报错二次上传没触发钩子解决办法
$ git add .$ git commit -m "fix: 触发重新部署"$ git push vps master3.手动测试钩子流程如下
先push仓库然后回到服务端
$ su - git$ cd /home/git/blog.git$ ./hooks/post-receiveGit 基础使用手册
一、基础操作
1.1 基本配置
# 设置用户名git config --global user.name "你的姓名"
# 设置邮箱git config --global user.email "你的邮箱"
# 查看配置git config --list1.2 创建仓库
# 初始化新仓库git init
# 克隆现有仓库git clone <仓库URL>1.3 常用命令
# 查看状态git status
# 添加文件到暂存区git add 文件名git add . # 添加所有文件git add *.txt # 添加所有txt文件
# 提交更改git commit -m "提交说明"
# 查看提交历史git loggit log --oneline # 简洁版git log --graph # 图形化显示
# 推送到远程仓库git push origin 分支名git push # 如果已设置上游分支
# 从远程拉取更新git pullgit pull origin 分支名二、分支管理
# 查看分支git branch # 本地分支git branch -a # 所有分支(包括远程)
# 创建分支git branch 分支名
# 切换分支git checkout 分支名git checkout -b 分支名 # 创建并切换
# 合并分支git checkout maingit merge 分支名
# 删除分支git branch -d 分支名 # 安全删除git branch -D 分支名 # 强制删除三、.gitignore文件
创建.gitignore文件来忽略不需要版本控制的文件:
# 编译文件*.class*.exe*.dll
# 依赖目录node_modules/target/
# 编辑器文件.vscode/.idea/*.swp
# 系统文件.DS_StoreThumbs.db
# 日志文件*.log四、常用命令速查表
| 命令 | 说明 |
|---|---|
git init | 初始化仓库 |
git clone <url> | 克隆仓库 |
git add <file> | 添加文件到暂存区 |
git commit -m "msg" | 提交更改 |
git push | 推送到远程 |
git pull | 从远程拉取 |
git status | 查看状态 |
git log | 查看历史 |
git branch | 分支管理 |
git checkout | 切换分支 |
git merge | 合并分支 |
git diff | 查看差异 |
git remote -v | 查看远程仓库 |