一个用于简化 GitLab 仓库管理的交互式命令行工具。
git-tool 是一个专为简化 GitLab 发版流程而设计的自动化工具,解决以下痛点:
- 合代码繁琐:每次发版需要在多个仓库之间切换,手动合并分支,容易遗漏
- 打标签麻烦:需要逐个仓库创建标签,操作重复且耗时
- 人工核对困难:难以快速确认哪些仓库包含待发布的分支
- 操作风险高:手动操作容易出错,可能导致发版失败
- 智能搜索 - 快速查找包含指定分支的所有仓库,支持项目名关键字过滤
- 批量打标签 - 一键为多个仓库创建标签,自动命名规范(如
master-20240213) - 批量合并 - 批量创建合并请求(Merge Request),支持自定义目标分支
- 交互式界面 - 友好的菜单选择,支持全选/取消全选/单选,操作直观
- 状态记忆 - 返回上一步时保留之前的选择状态,无需重新勾选
- 安全可靠 - Access Token 加密存储,绑定当前机器用户
- 高效过滤 - 通过项目名关键字缩小搜索范围,搜索速度提升 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]:
- 下载
git-tool.exe到本地 - 双击运行程序
- 首次运行会提示配置:
- 输入 GitLab URL(默认:
http://gitlab.lzstack.com) - 输入 GitLab Access Token
- 输入 GitLab URL(默认:
- 配置完成后进入主菜单,按提示操作即可
# 克隆或下载源码
cd git-tool-cli
# 安装依赖
pip install -r requirements.txt
# 运行程序
python git_tool/cli.py程序首次运行时会自动引导配置:
- GitLab URL - 服务器地址,例如
http://gitlab.lzstack.com - Access Token - 访问令牌,用于 API 认证
如何获取 Access Token:
- 登录 GitLab
- 点击右上角头像 →
User Settings→Access Tokens - 创建新 Token,勾选以下权限:
api- 完整 API 访问权限read_repository- 读取仓库信息
- 复制生成的 Token 粘贴到程序中
注意:Token 会加密存储在本地,绑定当前机器用户,换机器需要重新配置。
快速查找包含指定分支的所有仓库。
操作步骤:
- 主菜单选择
1. 搜索分支 - 输入要搜索的分支名
- 输入项目名关键字(可选,直接回车搜索所有项目)
- 查看搜索结果
为多个仓库批量创建标签。
操作步骤:
- 主菜单选择
2. 打标签 - 输入源分支名称(从哪个分支创建标签)
- 输入项目名关键字过滤(可选)
- 选择要操作的仓库:
- 使用
全选所有仓库/取消全选快速操作 - 或手动空格勾选单个仓库
- 选择
确认选择并完成
- 使用
- 选择基准分支(master / main / 其他)
- 如需返回重新选择仓库,选择
返回上一步
- 如需返回重新选择仓库,选择
- 确认已选仓库列表,输入
Y创建标签 - 查看执行结果
标签命名规则:
- 格式:
{基准分支}-{YYYYMMDD} - 示例:
master-20240213
批量创建合并请求。
操作步骤:
- 主菜单选择
3. 合并代码 - 输入源分支名称(要合并的分支)
- 输入项目名关键字过滤(可选)
- 选择要操作的仓库
- 选择目标分支(sit / dev / master / 其他)
- 如需返回重新选择仓库,选择
返回上一步
- 如需返回重新选择仓库,选择
- 确认已选仓库列表,输入
Y创建合并请求 - 查看执行结果(包含 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