git操作基本命令

Git / 1068人浏览 / 1人评论


本地上传远程库
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 &

6、GitHub Webhook 配置

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 条评论

啊啊额
3年前
大苏打

发表评论 取消回复

记住我的信息,方便下次评论
有人回复时邮件通知我