manage-repos
SKILL.md
在服务器上管理和操作多个代码仓库。当用户需要查看、修改跨仓库代码或进行代码审查时使用。
目录规范
仓库统一存放在 $REPOS_DIR 下,扁平结构,禁止在其他位置 clone 或操作仓库。worktree 放在各仓库内部的 wt/ 目录下,用分支名命名:
$REPOS_DIR/
├── frontend-web/
│ ├── src/
│ └── wt/ ← 该仓库的 worktree 目录
│ ├── fix-login-api/
│ └── add-dark-mode/
├── backend-api/
│ ├── src/
│ └── wt/
│ └── fix-cors/
└── mercury-server/
操作步骤
1. 查看已有仓库
ls -la "$REPOS_DIR/"
2. 只读浏览仓库
直接在仓库主目录操作即可:
cd "$REPOS_DIR/repo-name"
git fetch origin
# 浏览代码、搜索、阅读...
3. 修改代码(通过 worktree 隔离)
需要修改代码时,必须创建 worktree:
cd "$REPOS_DIR/repo-name"
git fetch origin
# 确保 wt 在 exclude 中(兼容非本 skill clone 的仓库)
grep -qxF 'wt' .git/info/exclude 2>/dev/null || echo 'wt' >> .git/info/exclude
# 只清理本 skill 创建的过期 worktree(agent/ 前缀分支,超过 7 天)
if [ -d "wt" ]; then
for d in wt/*/; do
[ -d "$d" ] || continue
branch=$(git -C "$d" rev-parse --abbrev-ref HEAD 2>/dev/null)
if [[ "$branch" == agent/* ]] && [ "$(find "$d" -maxdepth 0 -mtime +7)" ]; then
git worktree remove --force "$d"
fi
done
fi
# 识别主干分支
MAIN_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||' || git remote show origin | awk '/HEAD branch/{print $NF}')
# 创建 worktree + 工作分支(worktree 放在仓库内 wt/ 下,用功能名命名)
FEATURE="feature-name"
BRANCH="agent/$(date +%Y%m%d)/$FEATURE"
git worktree add -b "$BRANCH" "wt/$FEATURE" "origin/$MAIN_BRANCH"
# 在 worktree 中操作
cd "wt/$FEATURE"
4. Clone 新仓库
git clone --depth=1 git@git.17zjh.com:group/repo.git "$REPOS_DIR/repo-name"
# 排除 worktree 目录,避免 git status 显示 untracked
echo 'wt' >> "$REPOS_DIR/repo-name/.git/info/exclude"
5. 提交并创建 MR
# 在 worktree 目录中
git add -A
# 使用请求发送者作为 git author(由服务注入 SENDER_NAME 环境变量)
_GIT_AUTHOR="${SENDER_NAME:-Agent}"
git commit --author="$_GIT_AUTHOR <activity-ai-platform@wepie.com>" -m "描述改动内容"
git push origin HEAD
push 完成后输出 GitLab Merge Request 创建链接,提示用户在 GitLab 上创建 MR:
https://git.17zjh.com/<group>/<repo>/-/merge_requests/new?merge_request[source_branch]=<branch>
6. 清理 worktree
cd "$REPOS_DIR/repo-name"
git worktree remove "wt/$FEATURE"
Git 操作规范
- 禁止直接操作主干分支:不得在 main/master/develop/prod 上直接 commit 或 push
- 识别主干分支:创建工作分支前,先用
git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null || git remote show origin | grep 'HEAD branch'识别仓库的主干分支名,不要假设都是 main - 修改代码必须用 worktree 隔离:通过
git worktree add创建独立工作目录到仓库内wt/下,避免多会话并发冲突。只读浏览可直接在仓库主目录操作 - 工作分支命名:格式
agent/<日期>/<功能描述>,如agent/20260404/fix-login-api - push 后创建 MR:不得直接合并到主干,必须通过 GitLab MR 流程
- 只使用 SSH 认证:服务器已配置 SSH Key,clone 时使用 SSH 地址(
git@git.17zjh.com:...) - 推荐浅克隆:使用
--depth=1减少磁盘占用,需要完整历史时再git fetch --unshallow
注意事项
- 仅允许 clone
git.17zjh.com上的团队仓库,来源不明的仓库需先确认归属 - clone 前先检查磁盘用量:
du -sh "$REPOS_DIR" - 操作完成后必须
git worktree remove清理,避免累积 wt/目录不会被 git 自动忽略,clone 后需将wt写入.git/info/exclude(见 Clone 步骤)
跨仓库操作
进行跨仓库分析或修改时:
- 先确认所有相关仓库都已在
$REPOS_DIR下就绪 - 分析接口一致性时,对照前端调用和后端实现逐个比对
- 跨仓库修改时,在每个仓库分别创建工作分支,确保改动可以独立回滚