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 操作规范

  1. 禁止直接操作主干分支:不得在 main/master/develop/prod 上直接 commit 或 push
  2. 识别主干分支:创建工作分支前,先用 git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null || git remote show origin | grep 'HEAD branch' 识别仓库的主干分支名,不要假设都是 main
  3. 修改代码必须用 worktree 隔离:通过 git worktree add 创建独立工作目录到仓库内 wt/ 下,避免多会话并发冲突。只读浏览可直接在仓库主目录操作
  4. 工作分支命名:格式 agent/<日期>/<功能描述>,如 agent/20260404/fix-login-api
  5. push 后创建 MR:不得直接合并到主干,必须通过 GitLab MR 流程
  6. 只使用 SSH 认证:服务器已配置 SSH Key,clone 时使用 SSH 地址(git@git.17zjh.com:...
  7. 推荐浅克隆:使用 --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 步骤)

跨仓库操作

进行跨仓库分析或修改时:

  1. 先确认所有相关仓库都已在 $REPOS_DIR 下就绪
  2. 分析接口一致性时,对照前端调用和后端实现逐个比对
  3. 跨仓库修改时,在每个仓库分别创建工作分支,确保改动可以独立回滚
Installs
2
First Seen
Apr 8, 2026