Skip to content

Commit e362ded

Browse files
committed
feat: commit every modified submodules on task complete
1 parent 49161ab commit e362ded

2 files changed

Lines changed: 140 additions & 1 deletion

File tree

.ai-ready/rules/git-submodule-check.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Git Submodule Check Rule
22

3-
在执行任何开发任务之前,必须先检查并加载所有的 Git Submodules。
3+
在用户与模型首次对话时,必须先检查并加载所有的 Git Submodules。
44

55
## 执行时机
66

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
# Submodule Commit Workflow Rule
2+
3+
当在 Git Submodule 内做了改动时,提交前需要在每个有改动的 submodule 中分别切出新的分支,然后分别 push 每个 submodule。
4+
5+
## 触发条件
6+
7+
当准备提交代码时,检测到以下条件:
8+
1. 项目包含 Git Submodules(存在 `.gitmodules` 文件)
9+
2. 有一个或多个 submodule 内存在未提交的改动
10+
11+
## 检查 Submodule 状态
12+
13+
使用以下命令检查 submodule 是否有改动:
14+
15+
```bash
16+
git submodule foreach 'git status --porcelain'
17+
```
18+
19+
如果输出不为空,说明对应的 submodule 有改动。
20+
21+
## 执行步骤
22+
23+
### 1. 识别有改动的 Submodules
24+
25+
```bash
26+
git submodule foreach --quiet 'if [ -n "$(git status --porcelain)" ]; then echo $name; fi'
27+
```
28+
29+
### 2. 对每个有改动的 Submodule 执行以下操作
30+
31+
#### 2.1 进入 Submodule 目录
32+
33+
```bash
34+
cd <submodule-path>
35+
```
36+
37+
#### 2.2 创建新分支
38+
39+
分支命名规则与主项目一致,参考 `auto-create-branch-on-master.md`
40+
41+
```
42+
YYMMDD-(feat|fix|chore|refactor)-xxxxx-xxxx-xxxx
43+
```
44+
45+
示例:
46+
```bash
47+
git checkout -b 260204-feat-update-component
48+
```
49+
50+
#### 2.3 提交改动
51+
52+
```bash
53+
git add .
54+
git commit -m "<commit message>"
55+
```
56+
57+
#### 2.4 Push 到远程
58+
59+
```bash
60+
git push -u origin <branch-name> -o merge_request.create -o merge_request.title="<auto-generated-from-commit-message>" -o merge_request.description="<auto-generated-from-commit-history>"
61+
```
62+
63+
注:实际执行时,模型应该根据当前commit信息自动生成合适的MR标题和描述,确保内容准确反映代码变更。
64+
65+
#### 2.5 返回主项目目录
66+
67+
```bash
68+
cd -
69+
```
70+
71+
### 3. 更新主项目的 Submodule 引用
72+
73+
在所有 submodule 都提交并 push 后,回到主项目:
74+
75+
```bash
76+
git add <submodule-path>
77+
git commit -m "chore: update submodule <submodule-name> reference"
78+
```
79+
80+
## 完整示例
81+
82+
假设项目有一个名为 `libs/common` 的 submodule,今天是 2026 年 2 月 4 日,修改了其中的组件代码:
83+
84+
```bash
85+
# 1. 进入 submodule
86+
cd libs/common
87+
88+
# 2. 创建新分支
89+
git checkout -b 260204-feat-update-component
90+
91+
# 3. 提交改动
92+
git add .
93+
git commit -m "feat: update button component styles"
94+
95+
# 4. Push 到远程
96+
git push -u origin 260204-feat-update-component -o merge_request.create -o merge_request.title="<auto-generated-from-commit-message>" -o merge_request.description="<auto-generated-from-commit-history>"
97+
98+
注:实际执行时,模型应该根据当前commit信息自动生成合适的MR标题和描述,确保内容准确反映代码变更。
99+
100+
# 5. 返回主项目
101+
cd -
102+
103+
# 6. 更新主项目的 submodule 引用
104+
git add libs/common
105+
git commit -m "chore: update submodule libs/common reference"
106+
```
107+
108+
## 多个 Submodule 的情况
109+
110+
如果有多个 submodule 都有改动,需要依次对每个 submodule 执行上述步骤:
111+
112+
```bash
113+
# 列出所有有改动的 submodules
114+
git submodule foreach --quiet 'if [ -n "$(git status --porcelain)" ]; then echo $name; fi'
115+
116+
# 对每个 submodule 分别执行:创建分支 → 提交 → push
117+
# 最后统一更新主项目的引用
118+
```
119+
120+
## 注意事项
121+
122+
- 每个 submodule 的分支名应该与其改动内容相关,而非简单复制主项目的分支名
123+
- 确保 submodule 的远程仓库有推送权限
124+
- 使用 -o merge_request.create 选项可以在 push 后自动创建 Merge Request
125+
- 使用 -o merge_request.title 和 -o merge_request.description 选项可设置 MR 的标题和描述
126+
- 主项目的 submodule 引用更新应该在所有 submodule 都成功 push 后再进行
127+
- 如果某个 submodule push 失败,需要先解决问题后再继续
128+
129+
## MR 自动化说明
130+
131+
- MR 标题:模型应该根据提交信息的内容自动生成简洁的标题,如 `feat(backend/auth): 用户登录模块实现 oauth2 认证`
132+
- MR 描述:模型应该基于提交历史生成所修改内容的无序列表,便于代码审查人员了解具体改动内容
133+
- 当有多个提交时,模型应该智能合并相关信息,生成清晰的MR概要
134+
- 为避免命令注入风险,不直接使用复杂命令行参数 直接生成 push 命令,而是先执行 `git log --oneline -s` 获取本分支的变更清单,再由模型动态生成合适的标题和描述
135+
136+
## 相关规则
137+
138+
- [auto-create-branch-on-master.md](./auto-create-branch-on-master.md) - 分支命名规范
139+
- [git-submodule-check.md](./git-submodule-check.md) - Submodule 初始化检查

0 commit comments

Comments
 (0)