Skip to content

Commit 5a783c3

Browse files
CodeCasterXclaude
andcommitted
docs: 补充 commit 命令的版权头年份更新规则
在 /commit 命令执行流程中添加版权头年份检查和更新的强制规则: 1. 在 .claude/commands/commit.md 中添加详细的检查流程和示例 2. 在 .agent/workflows/commit.md 中添加 CRITICAL 步骤 3. 强制要求动态获取当前年份,禁止硬编码 4. 只更新当前修改的文件,不批量更新 5. 提供完整的检查清单和示例代码 确保每次提交前都会检查并更新版权头年份,避免版权声明过时。 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
1 parent e49f1db commit 5a783c3

File tree

2 files changed

+178
-3
lines changed

2 files changed

+178
-3
lines changed

.agent/workflows/commit.md

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,56 @@ description: 使用标准消息格式提交变更到 git
66
- `run_command("git status")`
77
- `run_command("git diff --stat")`
88

9-
2. 识别未追踪的文件。
9+
2. **⚠️ CRITICAL: 检查并更新版权头年份**
10+
11+
**步骤 2.1:获取当前年份**
12+
- `run_command("date +%Y")` - 动态获取当前年份,**绝对不要硬编码**
13+
14+
**步骤 2.2:检查修改的文件**
15+
- `run_command("git status --short")` - 查看修改的文件
16+
- `run_command("git diff --cached --name-only")` - 查看已暂存的文件
17+
18+
**步骤 2.3:检查版权头**
19+
- 对于每个修改的文件,检查是否包含版权头:
20+
```bash
21+
grep -l "Copyright" <modified_file>
22+
```
23+
- 如果包含版权头,检查年份:
24+
```bash
25+
grep "Copyright.*[0-9]\{4\}" <modified_file>
26+
```
27+
28+
**步骤 2.4:更新版权头年份**
29+
- 如果版权头年份不是当前年份,使用 `Edit` 工具更新
30+
- 常见格式:
31+
- `Copyright (C) 2024-2025``Copyright (C) 2024-<CURRENT_YEAR>`
32+
- `Copyright (C) 2024``Copyright (C) 2024-<CURRENT_YEAR>`
33+
- **重要**:只更新当前修改的文件,不批量更新所有文件
34+
35+
**示例**
36+
```python
37+
# 假设当前年份为 2026
38+
Edit(
39+
file_path="src/example.java",
40+
old_string="Copyright (C) 2024-2025 FIT Framework",
41+
new_string="Copyright (C) 2024-2026 FIT Framework"
42+
)
43+
```
44+
45+
**检查清单**
46+
- [ ] 已动态获取当前年份
47+
- [ ] 已检查所有修改文件的版权头
48+
- [ ] 已更新过时的版权年份
49+
- [ ] 只更新了修改的文件,未批量更新
50+
- [ ] 未硬编码年份
51+
52+
3. 识别未追踪的文件。
1053
- 如果有未追踪的文件(排除 `.agent/``.claude/` 如果它们被忽略),询问用户是否应该添加它们。
1154

12-
3. 将文件添加到暂存区。
55+
4. 将文件添加到暂存区。
1356
- `run_command("git add <files>")`
1457

15-
4. 提交变更。
58+
5. 提交变更。
1659
- 根据变更生成清晰、简洁的提交消息。
1760
- 确保消息遵循 conventional commits 规范(例如:`feat:`, `fix:`, `docs:`)。
1861
- 添加 Co-Authored-By 签名。

.claude/commands/commit.md

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,138 @@
3030

3131
---
3232

33+
## ⚠️ 提交前的版权头年份检查(CRITICAL)
34+
35+
**强制要求**:在执行提交之前,**必须**检查并更新所有修改文件的版权头年份。参见项目规则第 5 条。
36+
37+
### 检查流程
38+
39+
**步骤 1:获取当前年份**
40+
```bash
41+
# 动态获取当前年份(绝对不要硬编码)
42+
CURRENT_YEAR=$(date +%Y)
43+
echo "当前年份: $CURRENT_YEAR"
44+
```
45+
46+
**步骤 2:检查修改的文件**
47+
```bash
48+
# 查看即将提交的文件
49+
git status --short
50+
51+
# 或查看已暂存的文件
52+
git diff --cached --name-only
53+
```
54+
55+
**步骤 3:检查版权头**
56+
57+
对于每个修改的文件:
58+
```bash
59+
# 检查文件是否包含版权头
60+
grep -l "Copyright" <modified_file>
61+
62+
# 查看版权年份
63+
grep "Copyright.*[0-9]\{4\}" <modified_file>
64+
```
65+
66+
**步骤 4:更新版权年份**
67+
68+
如果文件包含版权头且年份不是当前年份,使用 `Edit` 工具更新:
69+
70+
**常见格式:**
71+
- `Copyright (C) 2024-2025``Copyright (C) 2024-<CURRENT_YEAR>`
72+
- `Copyright (C) 2024``Copyright (C) 2024-<CURRENT_YEAR>`
73+
- `Copyright (C) 2025``Copyright (C) <CURRENT_YEAR>`(如果已是当前年)
74+
75+
**示例:**
76+
```bash
77+
# 假设当前年份为 2026
78+
79+
# 格式 1:年份范围
80+
Edit(
81+
file_path="src/example.java",
82+
old_string="Copyright (C) 2024-2025 FIT Framework",
83+
new_string="Copyright (C) 2024-2026 FIT Framework"
84+
)
85+
86+
# 格式 2:单一年份
87+
Edit(
88+
file_path="src/another.java",
89+
old_string="Copyright (C) 2024 FIT Framework",
90+
new_string="Copyright (C) 2024-2026 FIT Framework"
91+
)
92+
```
93+
94+
### 检查清单
95+
96+
在执行 `git commit` 之前,必须确认:
97+
98+
- [ ] 已使用 `date +%Y` 动态获取当前年份
99+
- [ ] 已检查所有即将提交的修改文件
100+
- [ ] 对于包含版权头的文件,已检查年份是否为当前年份
101+
- [ ] 如果年份不是当前年份,已使用 `Edit` 工具更新
102+
- [ ] **绝对不要**硬编码年份(如 2026)
103+
- [ ] **只更新修改的文件**,不批量更新项目中所有文件
104+
105+
### 为什么必须这样做
106+
107+
- **法律合规**:确保版权声明的准确性和法律有效性
108+
- **项目规范**:遵循 FIT Framework 的项目规范
109+
- **自动化**:动态获取年份确保在任何时间点执行都是正确的
110+
- **避免遗漏**:提交前检查确保不会遗漏任何文件
111+
112+
### 完整示例
113+
114+
```bash
115+
# 1. 获取当前年份
116+
CURRENT_YEAR=$(date +%Y)
117+
# 输出:2026
118+
119+
# 2. 查看修改的文件
120+
git status --short
121+
# M src/main/java/com/fit/Example.java
122+
# M src/test/java/com/fit/ExampleTest.java
123+
124+
# 3. 检查第一个文件的版权头
125+
grep "Copyright" src/main/java/com/fit/Example.java
126+
# Copyright (C) 2024-2025 FIT Framework
127+
128+
# 4. 更新版权头(使用 Edit 工具)
129+
Edit(
130+
file_path="src/main/java/com/fit/Example.java",
131+
old_string="Copyright (C) 2024-2025 FIT Framework",
132+
new_string="Copyright (C) 2024-2026 FIT Framework"
133+
)
134+
135+
# 5. 检查第二个文件的版权头
136+
grep "Copyright" src/test/java/com/fit/ExampleTest.java
137+
# Copyright (C) 2024-2025 FIT Framework
138+
139+
# 6. 更新版权头(使用 Edit 工具)
140+
Edit(
141+
file_path="src/test/java/com/fit/ExampleTest.java",
142+
old_string="Copyright (C) 2024-2025 FIT Framework",
143+
new_string="Copyright (C) 2024-2026 FIT Framework"
144+
)
145+
146+
# 7. 验证更新
147+
grep "Copyright" src/main/java/com/fit/Example.java
148+
# Copyright (C) 2024-2026 FIT Framework
149+
150+
# 8. 现在可以安全提交
151+
/commit
152+
```
153+
154+
### 违反此规则的后果
155+
156+
如果不更新版权头年份:
157+
- 版权声明过时,可能影响法律效力
158+
- 违反项目规范,PR 审查不通过
159+
- 需要额外的修复提交,增加工作量
160+
161+
**这是一个 CRITICAL 规则,必须在每次提交前执行。**
162+
163+
---
164+
33165
## ⚠️ 提交后的任务状态更新(CRITICAL)
34166

35167
提交代码后,你**必须**根据情况更新任务状态。参见规则 7。

0 commit comments

Comments
 (0)