Files
recommend/git_push.py
赵杰 Jie Zhao (雄狮汽车科技) 7ab87e8f15 优化注册功能
2025-11-03 12:29:32 +08:00

139 lines
4.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Git 自动上传脚本(跨平台)
支持 Windows、Linux、Mac
"""
import os
import sys
import subprocess
import platform
from datetime import datetime
# 颜色输出Windows 10+ 支持 ANSI
def print_color(text, color="white"):
colors = {
"red": "\033[0;31m",
"green": "\033[0;32m",
"yellow": "\033[1;33m",
"blue": "\033[0;34m",
"reset": "\033[0m"
}
if platform.system() == "Windows":
# Windows 10+ 支持 ANSI需要启用
try:
import ctypes
kernel32 = ctypes.windll.kernel32
kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7)
except:
pass
color_code = colors.get(color.lower(), colors["reset"])
reset = colors["reset"]
print(f"{color_code}{text}{reset}")
def run_command(cmd, check=True):
"""执行命令并返回结果"""
try:
result = subprocess.run(
cmd,
shell=True,
check=check,
capture_output=True,
text=True,
encoding='utf-8'
)
return result.returncode == 0, result.stdout.strip(), result.stderr.strip()
except subprocess.CalledProcessError as e:
return False, e.stdout.strip() if hasattr(e, 'stdout') else "", e.stderr.strip() if hasattr(e, 'stderr') else ""
def main():
print_color("=== Git 自动上传脚本 ===", "green")
# 检查是否在 git 仓库中
if not os.path.exists(".git"):
print_color("错误: 当前目录不是 git 仓库", "red")
sys.exit(1)
# 获取当前分支
success, branch, _ = run_command("git branch --show-current", check=False)
if not success:
success, branch, _ = run_command("git rev-parse --abbrev-ref HEAD", check=False)
if not branch:
print_color("错误: 无法获取当前分支", "red")
sys.exit(1)
print_color(f"当前分支: {branch}", "yellow")
# 检查是否有未提交的更改
success, status, _ = run_command("git status --porcelain", check=False)
if not status:
print_color("没有需要提交的更改", "yellow")
response = input("是否继续检查远程更新? (y/n) ").strip().lower()
if response == 'y':
print_color("拉取远程更新...", "green")
run_command(f"git pull origin {branch}", check=False)
sys.exit(0)
# 显示当前状态
print_color("当前更改状态:", "yellow")
success, status_output, _ = run_command("git status --short", check=False)
print(status_output)
# 询问是否继续
response = input("是否继续提交并推送? (y/n) ").strip().lower()
if response != 'y':
print_color("操作已取消", "yellow")
sys.exit(0)
# 获取提交信息
if len(sys.argv) > 1:
commit_msg = " ".join(sys.argv[1:])
else:
default_msg = f"chore: update code {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
user_msg = input(f"请输入提交信息(或直接按回车使用默认信息): ").strip()
commit_msg = user_msg if user_msg else default_msg
# 添加所有更改
print_color("添加文件到暂存区...", "green")
success, _, error = run_command("git add -A")
if not success:
print_color(f"添加文件失败: {error}", "red")
sys.exit(1)
# 提交更改
print_color("提交更改...", "green")
success, _, error = run_command(f'git commit -m "{commit_msg}"')
if not success:
if "nothing to commit" in error.lower():
print_color("没有需要提交的更改", "yellow")
sys.exit(0)
print_color(f"提交失败: {error}", "red")
sys.exit(1)
print_color("提交成功!", "green")
# 推送到远程
print_color("推送到远程仓库...", "green")
success, _, error = run_command(f"git push origin {branch}")
if not success:
print_color(f"推送失败: {error}", "red")
print_color(f"提示: 可以手动执行 'git push origin {branch}'", "yellow")
print_color("可能需要设置远程仓库地址或进行身份验证", "yellow")
sys.exit(1)
print_color("✓ 推送成功!", "green")
print_color("=== 完成 ===", "green")
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print_color("\n操作已取消", "yellow")
sys.exit(0)
except Exception as e:
print_color(f"发生错误: {e}", "red")
sys.exit(1)