|
| 1 | +# FIT Framework 项目规则 |
| 2 | + |
| 3 | +## 文件权限管理规则 |
| 4 | + |
| 5 | +### 规则 1: 新增和修改文件的所有权 |
| 6 | + |
| 7 | +**重要:** 所有新增或修改的文件必须设置正确的所有者权限,确保用户可以自主修改。 |
| 8 | + |
| 9 | +**原则:** 不要硬编码用户名和用户组,而是从项目中已有文件动态获取权限信息。 |
| 10 | + |
| 11 | +**动态获取权限的方法:** |
| 12 | + |
| 13 | +```bash |
| 14 | +# 方法1: 从项目根目录的 pom.xml 获取所有者 |
| 15 | +REF_FILE="pom.xml" # 或其他稳定存在的文件 |
| 16 | +OWNER=$(ls -l $REF_FILE | awk '{print $3}') |
| 17 | +GROUP=$(ls -l $REF_FILE | awk '{print $4}') |
| 18 | + |
| 19 | +# 方法2: 获取当前工作目录的所有者 |
| 20 | +OWNER=$(ls -ld . | awk '{print $3}') |
| 21 | +GROUP=$(ls -ld . | awk '{print $4}') |
| 22 | + |
| 23 | +# 方法3: 使用 stat 命令(更可靠) |
| 24 | +OWNER=$(stat -f "%Su" $REF_FILE) # macOS |
| 25 | +GROUP=$(stat -f "%Sg" $REF_FILE) # macOS |
| 26 | +# 或 |
| 27 | +OWNER=$(stat -c "%U" $REF_FILE) # Linux |
| 28 | +GROUP=$(stat -c "%G" $REF_FILE) # Linux |
| 29 | +``` |
| 30 | + |
| 31 | +**实施方法:** |
| 32 | + |
| 33 | +```bash |
| 34 | +# 1. 先获取参考文件的所有者 |
| 35 | +OWNER_GROUP=$(ls -l pom.xml | awk '{print $3":"$4}') |
| 36 | + |
| 37 | +# 2. 应用到新文件 |
| 38 | +sudo chown $OWNER_GROUP <file_path> |
| 39 | + |
| 40 | +# 或者分步执行 |
| 41 | +OWNER=$(ls -l pom.xml | awk '{print $3}') |
| 42 | +GROUP=$(ls -l pom.xml | awk '{print $4}') |
| 43 | +sudo chown $OWNER:$GROUP <file_path> |
| 44 | +``` |
| 45 | + |
| 46 | +**检查清单:** |
| 47 | +- [ ] 使用 Write 工具创建新文件后,立即从已有文件获取权限并设置 |
| 48 | +- [ ] 使用 Edit 工具修改文件时,确认文件所有者与项目其他文件一致 |
| 49 | +- [ ] 批量创建文件后,统一修改所有权 |
| 50 | +- [ ] 创建目录后,递归修改目录及其内容的所有权 |
| 51 | + |
| 52 | +**完整示例:** |
| 53 | + |
| 54 | +```bash |
| 55 | +# ❌ 错误做法:硬编码用户信息 |
| 56 | +Write(file_path, content) |
| 57 | +Bash("sudo chown jiyujie:staff " + file_path) # 在其他人电脑上会失败 |
| 58 | + |
| 59 | +# ✅ 正确做法:动态获取权限 |
| 60 | +Write(file_path, content) |
| 61 | +# 从项目根目录的 pom.xml 获取所有者信息 |
| 62 | +Bash("OWNER_GROUP=$(ls -l pom.xml | awk '{print $3\":\"$4}') && sudo chown $OWNER_GROUP " + file_path) |
| 63 | + |
| 64 | +# ✅ 更简洁的做法:批量处理 |
| 65 | +Write(file1, content1) |
| 66 | +Write(file2, content2) |
| 67 | +Write(file3, content3) |
| 68 | +Bash("OWNER_GROUP=$(ls -l pom.xml | awk '{print $3\":\"$4}') && sudo chown $OWNER_GROUP file1 file2 file3") |
| 69 | +``` |
| 70 | + |
| 71 | +## Pull Request 提交规范 |
| 72 | + |
| 73 | +### 规则 2: PR 提交必须遵循项目规范 |
| 74 | + |
| 75 | +本项目的 PR 规范定义在 `.github/PULL_REQUEST_TEMPLATE.md` 文件中。 |
| 76 | + |
| 77 | +**强制要求:** |
| 78 | +1. 创建 PR 前,必须先阅读 `.github/PULL_REQUEST_TEMPLATE.md` |
| 79 | +2. PR 描述必须完整填写模板中的所有必填项 |
| 80 | +3. 不需要每次让用户提醒查看 PR 模板 |
| 81 | + |
| 82 | +**PR 模板位置:** |
| 83 | +``` |
| 84 | +.github/PULL_REQUEST_TEMPLATE.md |
| 85 | +``` |
| 86 | + |
| 87 | +**必填项清单:** |
| 88 | + |
| 89 | +1. **相关问题 / Related Issue** |
| 90 | + - [ ] Issue 链接或说明这是微小修改 |
| 91 | + |
| 92 | +2. **变更类型 / Type of Change** |
| 93 | + - [ ] 选择适当的变更类型(Bug修复/新功能/破坏性变更/文档/重构/性能优化/依赖升级/功能增强/代码清理) |
| 94 | + |
| 95 | +3. **变更目的 / Purpose of the Change** |
| 96 | + - [ ] 详细描述变更的目的和必要性 |
| 97 | + |
| 98 | +4. **主要变更 / Brief Changelog** |
| 99 | + - [ ] 列出主要的变更内容 |
| 100 | + |
| 101 | +5. **验证变更 / Verifying this Change** |
| 102 | + - [ ] 测试步骤 |
| 103 | + - [ ] 测试覆盖情况 |
| 104 | + |
| 105 | +6. **贡献者检查清单 / Contributor Checklist** |
| 106 | + - [ ] 基本要求 |
| 107 | + - [ ] 代码质量 |
| 108 | + - [ ] 测试要求 |
| 109 | + - [ ] 文档和兼容性 |
| 110 | + |
| 111 | +**自动化流程:** |
| 112 | + |
| 113 | +当用户要求创建 PR 时: |
| 114 | +1. 自动读取 `.github/PULL_REQUEST_TEMPLATE.md` |
| 115 | +2. 根据当前变更内容填写 PR 模板 |
| 116 | +3. 生成完整的 PR 描述 |
| 117 | +4. 提供推送和创建 PR 的命令 |
| 118 | + |
| 119 | +**示例工作流:** |
| 120 | + |
| 121 | +```bash |
| 122 | +# 1. 自动读取 PR 模板 |
| 123 | +Read(".github/PULL_REQUEST_TEMPLATE.md") |
| 124 | + |
| 125 | +# 2. 分析当前变更 |
| 126 | +Bash("git diff --stat") |
| 127 | +Bash("git log -1") |
| 128 | + |
| 129 | +# 3. 生成 PR 描述(根据模板) |
| 130 | +# ... 填写各个部分 |
| 131 | + |
| 132 | +# 4. 推送并创建 PR |
| 133 | +Bash("git push -u origin <branch>") |
| 134 | +Bash("gh pr create --base <target> --title <title> --body <description>") |
| 135 | +``` |
| 136 | + |
| 137 | +## 通用最佳实践 |
| 138 | + |
| 139 | +### 文件操作 |
| 140 | +- 创建文件后立即检查并修改权限 |
| 141 | +- 使用 `ls -l` 验证文件所有者 |
| 142 | +- 批量操作后统一修改权限 |
| 143 | + |
| 144 | +### Git 操作 |
| 145 | +- 提交前检查 `.github/` 目录中的规范 |
| 146 | +- 遵循项目的 commit message 格式 |
| 147 | +- PR 描述要完整、清晰 |
| 148 | + |
| 149 | +### 文档更新 |
| 150 | +- 修改代码时同步更新相关文档 |
| 151 | +- 确保 README 的准确性 |
| 152 | +- 添加必要的使用示例 |
| 153 | + |
| 154 | +## 项目特定信息 |
| 155 | + |
| 156 | +**项目名称**: FIT Framework |
| 157 | +**主分支**: main |
| 158 | +**开发分支**: 3.5.x |
| 159 | +**仓库**: https://github.com/ModelEngine-Group/fit-framework |
| 160 | + |
| 161 | +**常用命令:** |
| 162 | + |
| 163 | +```bash |
| 164 | +# 编译项目 |
| 165 | +mvn clean install |
| 166 | + |
| 167 | +# 运行测试 |
| 168 | +mvn test |
| 169 | + |
| 170 | +# 启动应用 |
| 171 | +./fit start |
| 172 | + |
| 173 | +# 检查文件权限 |
| 174 | +ls -l <file> |
| 175 | + |
| 176 | +# 动态修改文件权限(从 pom.xml 获取所有者) |
| 177 | +OWNER_GROUP=$(ls -l pom.xml | awk '{print $3":"$4}') |
| 178 | +sudo chown $OWNER_GROUP <file> |
| 179 | +``` |
| 180 | + |
| 181 | +--- |
| 182 | + |
| 183 | +**最后更新**: 2025-11-08 |
| 184 | +**Claude Code 版本**: 最新版 |
0 commit comments