本地上传远程库
1、git add 文件夹/ -f //上传整个文件夹,文件夹不能为空 git add aa.php -f //上传aa.php文件 git add *.php -f //上传所有后缀为.php的文件
2、git commit -m ""
3、git pull //提交前先更新代码
4、git push //提交代码
从远程库拉取代码到服务器
1、git push //服务器代码上传到远程库
2、git pull // 远程库代码拉取到服务器
$ git config --global user.name "你的GitHub登陆名"
$ git config --global user.email "你的GitHub注册邮箱"
!.gitignore
git reset --hard FETCH_HEAD
git fetch origin dev:dev
拉取远程dev分支,并在本地创建dev分支和远程的分支匹配
git branch 查看本地分支
git branch 分支名 创建分支
git merge pu_git 合并pu_git分支
git remote add origin 远程分支地址 与远程分支建立连接
git push origin master:dev 把本地master分支代码推送到远程dev分支
git checkout --track origin/远程分支名 拉取指定分支
git clone -b 分支名 地址 clone指定分支
git fetch origin 远程分支名 把远程分支拉到本地
git checkout -b 本地分支名 origin/远程分支名 在本地创建分支,并切换到该分支
Git pull origin 远程分支名 把远程分支上的内容拉倒本地
本地:
ssh-keygen -t rsa -C "" //生成sshkey
ssh-agent -s
//打开C盘–>用户–>你的用户名–>找到.ssh文件夹(linux下为cat ~/.ssh/id_rsa.pub)。找到id_rsa.pub
服务端:
1、生成ssh密匙对
# 生成ED25519密钥(推荐)
ssh-keygen -t ed25519 -C "server@$(hostname)" -f ~/.ssh/id_ed25519_server
# 查看公钥内容(需添加到GitHub/GitLab等)
cat ~/.ssh/id_ed25519_server.pub
提示:将输出的公钥内容添加到远程仓库的 Deploy Keys 或 SSH Keys 设置中
2、验证并添加密钥到SSH代理
# 检查已加载的密钥
ssh-add -l
# 若提示"Could not open a connection",先启动SSH代理
eval "$(ssh-agent -s)"
# 若未显示您的密钥,执行添加(以ED25519_server为例)
ssh-add ~/.ssh/id_ed25519_server
3、配置ssh免密登录
# 创建SSH配置文件(避免密钥冲突)
vim ~/.ssh/config
#添加以下内容
Host git@github.com //此处可以修改;如改为github-ssh;同时执行:git remote set-url origin github-ssh:username/repo.git HostName github.com User git IdentityFile ~/.ssh/id_ed25519_server IdentitiesOnly yes
#测试链接
ssh -T github-ssh
#成功应该显示:Hi!username!You`ve successfully.....
4、关联远程仓库
1.服务器没有代码,拉取远程仓库 #进入到你的项目根目录 cd /project #初始化 git init # 使用SSH协议克隆 git clone git@github-server:username/repo.git . # 或指定分支克隆
git clone -b main git@github-server:username/repo.git .
2.服务器已有代码,关联远程仓库
# 添加远程仓库
git remote add server git@github-server:username/repo.git
#修改远程仓库
git remote set-url origin git@github.com:user/new-repo.git
git@github-server:username/repo.git .在github代码仓库获取
5、自动化同步脚本
Python 3 Flask Webhook 自动部署脚本(建议 Python 3.9+)
yum install python3 -y # CentOS
pip3 install flask gitpython #安装 Flask
创建 Flask Webhook 自动部署脚本vim /www/wwwroot/project/webhook_server.py
添加如下内容
#!/usr/bin/env python3
# =====================================================
# GitHub Webhook 自动部署服务
# 目录: /www/wwwroot/project/webhook_server.py
# 日志: /www/wwwroot/logs/git_auto_sync.log
# =====================================================
from flask import Flask, request, jsonify
import subprocess
import hashlib
import hmac
import os
from datetime import datetime
# === 配置区域 ===
REPO_DIR = "/www/wwwroot/project"
LOG_FILE = "/www/wwwroot/logs/git_auto_sync.log"
SECRET = "" # 可选: 在GitHub Webhook中设置同样的 secret(留空则不验证)
# GIT_SSH_HOST = "github-ssh" # 你 ~/.ssh/config 里配置的 Host
GIT_SSH_HOST = "git@github.com"
app = Flask(__name__)
def log(msg):
"""写入日志"""
with open(LOG_FILE, "a") as f:
f.write(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] {msg}\n")
@app.route("/", methods=["POST"])
def webhook():
# 验证签名(如果设置了 SECRET)
if SECRET:
signature = request.headers.get("X-Hub-Signature-256", "")
payload = request.data
digest = "sha256=" + hmac.new(SECRET.encode(), payload, hashlib.sha256).hexdigest()
if not hmac.compare_digest(signature, digest):
log("签名验证失败,拒绝请求。")
return jsonify({"status": "error", "message": "Invalid signature"}), 403
# 执行 Git 拉取操作
log("收到 GitHub 推送事件,开始同步...")
try:
# 设置 GIT_SSH_COMMAND 使用指定 Host
env = os.environ.copy()
# env['GIT_SSH_COMMAND'] = f'ssh -o "StrictHostKeyChecking=no" -F ~/.ssh/config'
env['GIT_SSH_COMMAND'] = 'ssh -i /home/www/.ssh/id_rsa -o StrictHostKeyChecking=no'
result = subprocess.run(
["git", "-C", REPO_DIR, "pull", f"{GIT_SSH_HOST}:username/project.git", "main"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True,
timeout=60,
env=env
)
if result.returncode == 0:
log("同步成功:\n" + result.stdout)
return jsonify({"status": "ok"}), 200
else:
log("同步失败:\n" + result.stderr)
return jsonify({"status": "error", "output": result.stderr}), 500
except Exception as e:
log("异常: " + str(e))
return jsonify({"status": "error", "message": str(e)}), 500
@app.route("/", methods=["GET"])
def index():
return "GitHub Webhook Service is running."
if __name__ == "__main__":
app.run(host="0.0.0.0", port=9000)
后台运行(自动守护)
nohup python3 /www/wwwroot/project/webhook_server.py > /www/wwwroot/logs/webhook_server.out 2>&1 &
1) 进入你的仓库 → Settings → Webhooks → Add webhook
2) 填写:
Payload URL: http://你的服务器IP:9000/(9000端口要打开,检查防火墙,安全组)
Content type: application/json
Secret:(如使用,在脚本中也要填写 SECRET = "同样的值")
触发事件: 选择「Just the push event」
3) 保存。GitHub 会发送一个测试事件。
查看日志:/www/wwwroot/logs/git_auto_sync.log
收到 GitHub 推送事件,开始同步...
同步成功:
Already up to date.
感谢博主,喝杯咖啡~
1 条评论