Skip to content

JRGavin/git-tool-cli

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Git Tool

一个用于简化 GitLab 仓库管理的交互式命令行工具。

版本 Python Platform

项目简介

git-tool 是一个专为简化 GitLab 发版流程而设计的自动化工具,解决以下痛点:

  • 合代码繁琐:每次发版需要在多个仓库之间切换,手动合并分支,容易遗漏
  • 打标签麻烦:需要逐个仓库创建标签,操作重复且耗时
  • 人工核对困难:难以快速确认哪些仓库包含待发布的分支
  • 操作风险高:手动操作容易出错,可能导致发版失败

功能特点

  1. 智能搜索 - 快速查找包含指定分支的所有仓库,支持项目名关键字过滤
  2. 批量打标签 - 一键为多个仓库创建标签,自动命名规范(如 master-20240213
  3. 批量合并 - 批量创建合并请求(Merge Request),支持自定义目标分支
  4. 交互式界面 - 友好的菜单选择,支持全选/取消全选/单选,操作直观
  5. 状态记忆 - 返回上一步时保留之前的选择状态,无需重新勾选
  6. 安全可靠 - Access Token 加密存储,绑定当前机器用户
  7. 高效过滤 - 通过项目名关键字缩小搜索范围,搜索速度提升 10-50 倍

界面预览

主菜单

=========================================
         git-tool v1.5.2
=========================================

请选择操作:

> 1. 搜索分支 (Search)
  2. 打标签 (Tag)
  3. 合并代码 (Merge)
  4. 配置设置 (Config)
  5. 退出 (Exit)

(使用上下箭头键选择)

仓库选择界面

找到 5 个仓库,请选择要操作的仓库 (空格=选择/取消,回车=确认):

[ ] 全选所有仓库
[ ] 取消全选
--------------------------------------------------
[v] repo1
[v] repo2
[ ] repo3
[v] repo4
[v] repo5
--------------------------------------------------
[ ] 确认选择并完成
[ ] 取消并返回

(按空格键选择/取消,回车键确认,选择 确认选择并完成 结束)

确认页面

准备创建 Tag,已选择的仓库:
------------------------------------------------------------
1. repo1
2. repo2
3. repo4
4. repo5
------------------------------------------------------------

是否在以上 4 个仓库上创建 Tag 'master-20240213'? [Y/n]:

快速开始

方式一:直接运行可执行文件(推荐)

  1. 下载 git-tool.exe 到本地
  2. 双击运行程序
  3. 首次运行会提示配置:
    • 输入 GitLab URL(默认:http://gitlab.lzstack.com
    • 输入 GitLab Access Token
  4. 配置完成后进入主菜单,按提示操作即可

方式二:从源码运行

# 克隆或下载源码
cd git-tool-cli

# 安装依赖
pip install -r requirements.txt

# 运行程序
python git_tool/cli.py

详细使用说明

首次配置

程序首次运行时会自动引导配置:

  1. GitLab URL - 服务器地址,例如 http://gitlab.lzstack.com
  2. Access Token - 访问令牌,用于 API 认证

如何获取 Access Token:

  1. 登录 GitLab
  2. 点击右上角头像 → User SettingsAccess Tokens
  3. 创建新 Token,勾选以下权限:
    • api - 完整 API 访问权限
    • read_repository - 读取仓库信息
  4. 复制生成的 Token 粘贴到程序中

注意:Token 会加密存储在本地,绑定当前机器用户,换机器需要重新配置。

功能使用流程

1. 搜索分支

快速查找包含指定分支的所有仓库。

操作步骤:

  1. 主菜单选择 1. 搜索分支
  2. 输入要搜索的分支名
  3. 输入项目名关键字(可选,直接回车搜索所有项目)
  4. 查看搜索结果

2. 打标签(Tag)

为多个仓库批量创建标签。

操作步骤:

  1. 主菜单选择 2. 打标签
  2. 输入源分支名称(从哪个分支创建标签)
  3. 输入项目名关键字过滤(可选)
  4. 选择要操作的仓库:
    • 使用 全选所有仓库 / 取消全选 快速操作
    • 或手动空格勾选单个仓库
    • 选择 确认选择并完成
  5. 选择基准分支(master / main / 其他)
    • 如需返回重新选择仓库,选择 返回上一步
  6. 确认已选仓库列表,输入 Y 创建标签
  7. 查看执行结果

标签命名规则:

  • 格式:{基准分支}-{YYYYMMDD}
  • 示例:master-20240213

3. 合并代码(Merge)

批量创建合并请求。

操作步骤:

  1. 主菜单选择 3. 合并代码
  2. 输入源分支名称(要合并的分支)
  3. 输入项目名关键字过滤(可选)
  4. 选择要操作的仓库
  5. 选择目标分支(sit / dev / master / 其他)
    • 如需返回重新选择仓库,选择 返回上一步
  6. 确认已选仓库列表,输入 Y 创建合并请求
  7. 查看执行结果(包含 MR 链接)

注意事项:

  • 合并请求创建后需要手动审批和合并
  • 程序只负责创建 MR,不会自动合并
  • 如果检测到冲突,会在结果中显示警告

开发编译指南

环境准备

系统要求:

  • Windows 7/10/11
  • Python 3.8 或更高版本

安装依赖:

# 进入项目目录
cd git-tool-cli

# 安装所有依赖
pip install -r requirements.txt

依赖说明:

依赖包 版本 用途
click >=8.0 命令行界面框架
requests >=2.28 HTTP 请求库
questionary >=1.10 交互式问答界面
PyInstaller >=5.0 打包工具
cryptography >=3.0 Token 加密

从源码运行

# 方法1:作为模块运行
python -m git_tool.cli

# 方法2:直接运行入口文件
python git_tool/cli.py

打包成可执行文件

准备图标:

将图标文件 photo.ico 放在项目根目录(与 git_tool/ 同级)。

执行打包:

# 清理旧构建文件并打包
rmdir /s /q build dist 2>nul
del /q git-tool.spec 2>nul

# 单文件模式打包(推荐)
pyinstaller --onefile --name git-tool --clean --hidden-import=cryptography --icon=photo.ico git_tool/cli.py

打包参数说明:

  • --onefile - 打包成单个可执行文件
  • --name git-tool - 输出文件名为 git-tool.exe
  • --clean - 清理临时文件
  • --hidden-import=cryptography - 显式导入加密库(避免遗漏)
  • --icon=photo.ico - 使用自定义图标
  • git_tool/cli.py - 程序入口文件

输出位置: 打包完成后,可执行文件位于 dist/git-tool.exe

项目结构

git-tool-cli/
├── git_tool/               # 主程序目录
│   ├── __init__.py
│   ├── cli.py             # 交互界面主程序
│   ├── gitlab_api.py      # GitLab API 封装
│   └── config_manager.py  # 配置管理(含加密)
├── photo.ico              # 程序图标
├── requirements.txt       # Python 依赖列表
├── .gitignore            # Git 忽略配置
├── README.md             # 项目说明(本文档)
└── CHANGELOG.md          # 更新日志

配置说明

配置文件位置:

  • 优先:当前目录 config.ini
  • 备选:用户目录 ~/.config/git-tool/config.ini

配置内容:

[GitLab]
gitlab_url = http://gitlab.lzstack.com
access_token = <加密的Token>

安全性说明:

  • Token 使用 Fernet 对称加密算法加密
  • 加密密钥基于当前机器用户名派生
  • 换了电脑或用户无法解密,需重新配置

常见问题

Q: 为什么搜索很慢?
A: 如果没有使用项目名关键字过滤,程序会搜索所有可见项目。建议使用关键字缩小范围,可提速 10-50 倍。

Q: 粘贴长内容后按 Ctrl+C 会退出?
A: 这是 Windows CMD 的特性。建议在粘贴后先按回车确认,不要在长文本状态下按 Ctrl+C。

Q: 可以支持 GitHub 吗?
A: 当前版本针对 GitLab API 开发。如需支持 GitHub,需要修改 gitlab_api.py 中的 API 调用。

Q: 如何更新版本?
A: 下载新版本 exe 覆盖即可,配置会自动保留。

Q: 合并请求能自动合并吗?
A: 不能。程序只负责创建 MR,合并需要人工审批,这是出于安全考虑。

更新日志

详见 CHANGELOG.md

许可证

MIT License


Made with ❤️ for easier GitLab operations

About

批量查找、合并分支,批量打tag

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages