一个基于 Python 的 GitLab 代码检索工具:
- 支持按关键字搜索
- 支持搜索全部项目或单个项目
- 支持单分支或全部分支搜索
- 支持并发检索(默认
--workers 8) - 支持并发进度条(默认显示)
- 自动导出 Excel 结果
- 支持
serve后台模式和本地 WebUI
- 多关键字搜索:
-w 'a,b' -w 'c' - 单项目搜索:
-u直接传项目 URL - 全分支搜索:
--all-branches - 并发检索:
--workers(默认 8) - 进度条开关:
--no-progress(关闭进度条) - 多格式导出:
--format(xlsx/csv/json) - 结果导出:
YYYY_MM_DD_HH_MM.xlsx
- Python 3.9+
- 建议使用虚拟环境(如
.venv)
.venv/bin/python -m pip install -e .安装后命令入口为:
.venv/bin/gcs查看版本:
.venv/bin/gcs --version
./dist/gcs --version开始使用前,请先创建 GitLab Token:
.venv/bin/gcs serve \
--workdir ./gcs_workspace \
--admin-token 'your_admin_pat' \
--gitlab-url 'https://gitlab.example.com'说明:
--workdir必填,用于保存 SQLite 数据库与导出文件--workdir现在也会保存serve登录后的 GitLab PAT,必须放在受限目录,不应共享、打包进产物或提交到仓库- 首次启动建议显式传
--gitlab-url - 同一个
workdir会锁定管理员身份,后续不能换成其他管理员账号启动 - Web 登录同样需要用户自己的 GitLab PAT;如果没有,可按登录页指引去 GitLab 创建
- 如果从旧版 macOS Keychain 方案升级到当前版本,历史 Web 会话会统一失效,用户需要重新登录一次
- 打包后仍然只有一个可执行文件:
dist/gcs
.venv/bin/gcs search \
-u 'https://gitlab.example.com' \
-t 'your_token' \
-w 'businessSearch'默认不带 -b 时,按项目主分支检索(例如 main/master)。
.venv/bin/gcs search \
-u 'https://gitlab.example.com/group/subgroup/project' \
-t 'your_token' \
-w 'businessSearch'.venv/bin/gcs search \
-u 'https://gitlab.example.com/group/subgroup/project' \
-t 'your_token' \
-w 'businessSearch' \
-b 'main'.venv/bin/gcs search \
-u 'https://gitlab.example.com/group/subgroup/project' \
-t 'your_token' \
-w 'businessSearch' \
--all-branches默认并发(等价于 --workers 8):
.venv/bin/gcs search \
-u 'https://gitlab.example.com/group/subgroup/project' \
-t 'your_token' \
-w 'businessSearch' \
--all-branches默认会显示并发任务进度条(包含完成比例、速度、ETA)。
指定并发:
.venv/bin/gcs search \
-u 'https://gitlab.example.com/group/subgroup/project' \
-t 'your_token' \
-w 'businessSearch' \
--all-branches \
--workers 16关闭进度条:
.venv/bin/gcs search \
-u 'https://gitlab.example.com/group/subgroup/project' \
-t 'your_token' \
-w 'businessSearch' \
--all-branches \
--no-progress.venv/bin/gcs search -u 'https://gitlab.example.com' -t 'your_token' -w 'a,b,c'
.venv/bin/gcs search -u 'https://gitlab.example.com' -t 'your_token' -w 'a,b' -w 'c'默认只搜索代码内容。可以通过 --target commit 搜索 Git commit message;也可以同时搜索代码内容和 commit message:
.venv/bin/gcs search -u 'https://gitlab.example.com' -t 'your_token' -w 'businessSearch' --target commit
.venv/bin/gcs search -u 'https://gitlab.example.com' -t 'your_token' -w 'businessSearch' --target code,commitCommit Message 搜索会遵守默认分支、指定分支、全部分支这些分支范围。大仓库或 --all-branches 场景可能更慢,因为工具需要按分支拉取提交历史并在本地过滤 message。
默认(不传 --format,仅导出 xlsx):
.venv/bin/gcs search -u 'https://gitlab.example.com' -t 'your_token' -w 'businessSearch'仅导出 JSON:
.venv/bin/gcs search -u 'https://gitlab.example.com' -t 'your_token' -w 'businessSearch' --format json导出 CSV + JSON:
.venv/bin/gcs search -u 'https://gitlab.example.com' -t 'your_token' -w 'businessSearch' --format csv --format json一次导出 XLSX + CSV + JSON:
.venv/bin/gcs search -u 'https://gitlab.example.com' -t 'your_token' -w 'businessSearch' --format xlsx,csv,json- 执行完成后会在当前目录生成导出文件(默认 xlsx,可按
--format输出 csv/json) - 同一次检索使用统一时间戳文件名:
YYYY_MM_DD_HH_MM.xlsxYYYY_MM_DD_HH_MM.csvYYYY_MM_DD_HH_MM.json
- 表头/字段顺序保持一致:关键字、分支、项目信息、文件名、代码链接、命中内容
- 纯代码搜索保持旧表头;如果结果中包含 commit message 命中,会额外导出结果类型和 commit 元数据字段
安装打包工具(在 .venv 内):
.venv/bin/python -m pip install pyinstaller构建:
./scripts/build_macos.sh产物:
dist/gcs默认推荐直接使用 GitHub Action 发布到 GHCR 的镜像,不需要先下载二进制。
- 准备环境变量:
cp .env.example .env
# 把 GCS_IMAGE 改成仓库实际发布出来的 GHCR 镜像地址- 启动
serve:
docker compose up -d- 查看日志:
docker compose logs -f gcs-serve说明:
compose.yaml默认直接拉取 GHCR 镜像,别人只需要填.env就可以启动GCS_WORKDIR_HOST会映射到容器内/data,其中包含 SQLite、导出文件和serve持久化 PAT,应放在私有目录- 当前 GitHub Action 发布的是
linux/amd64镜像;在 Apple Silicon 上可以继续用 Docker Desktop 模拟运行
仓库已配置工作流:
- 文件:
.github/workflows/release.yml - 触发条件:推送
v*格式的 tag(例如v0.1.0) - 自动构建平台:
- macOS Intel(x86_64)
- macOS Apple Silicon(arm64)
- Linux x86_64
- Windows x86_64
- 自动构建并推送 Docker 镜像到 GitHub Container Registry(GHCR)
- 自动创建 GitHub Release 并上传二进制附件
触发示例:
git tag v0.1.0
git push origin v0.1.0- 不要把真实 token 写入代码或提交到 Git 仓库
- 建议通过环境变量传 token,或运行时手动传入
serve --workdir会持久化保存 PAT,应放在当前机器的私有目录并限制访问权限- 若 token 曾暴露,请立即在 GitLab 端执行 rotate/revoke
本项目是对 eryajf/gitlabCodeSearch 的 Python 改写版本并添加了全部分支搜索功能。
