diff options
Diffstat (limited to '')
7 files changed, 1360 insertions, 0 deletions
diff --git a/.agents/skills/git-workflow/references/advanced-usage.md b/.agents/skills/git-workflow/references/advanced-usage.md new file mode 100644 index 0000000..9e92251 --- /dev/null +++ b/.agents/skills/git-workflow/references/advanced-usage.md @@ -0,0 +1,393 @@ +# Git 高级用法
+
+## 标签管理
+
+### 版本号规范
+
+采用 **语义化版本**(Semantic Versioning):
+
+```
+主版本号.次版本号.修订号[-预发布标识]
+MAJOR.MINOR.PATCH[-PRERELEASE]
+```
+
+| 版本变化 | 说明 | 示例 |
+| :------- | :----------------- | :---------------- |
+| 主版本号 | 不兼容的 API 修改 | `v1.0.0 → v2.0.0` |
+| 次版本号 | 向下兼容的功能新增 | `v1.0.0 → v1.1.0` |
+| 修订号 | 向下兼容的问题修正 | `v1.0.0 → v1.0.1` |
+
+### 预发布标识
+
+- `alpha` - 内测版本
+- `beta` - 公测版本
+- `rc` - 候选版本
+
+```
+v1.0.0-alpha.1 # 第一个内测版本
+v1.0.0-beta.1 # 第一个公测版本
+v1.0.0-rc.1 # 第一个候选版本
+v1.0.0 # 正式版本
+```
+
+### 标签操作
+
+#### 创建附注标签(推荐)
+
+```bash
+git tag -a v1.0.0 -m "release: v1.0.0 正式版本
+
+主要更新:
+- 新增用户管理模块
+- 新增支付功能
+- 优化查询性能"
+```
+
+#### 推送标签
+
+```bash
+# 推送单个标签
+git push origin v1.0.0
+
+# 推送所有标签
+git push origin --tags
+```
+
+#### 查看标签
+
+```bash
+git tag
+git tag -l "v1.*"
+git show v1.0.0
+```
+
+#### 删除标签
+
+```bash
+# 删除本地标签
+git tag -d v1.0.0
+
+# 删除远程标签
+git push origin :refs/tags/v1.0.0
+```
+
+## Git 性能优化
+
+### 大型仓库优化
+
+```bash
+# 浅克隆(只获取最近的提交)
+git clone --depth 1 https://github.com/repo/project.git
+
+# 部分克隆(按需获取)
+git clone --filter=blob:none https://github.com/repo/project.git
+
+# 稀疏检出(只检出需要的目录)
+git clone --filter=blob:none --sparse https://github.com/repo/project.git
+cd project
+git sparse-checkout init --cone
+git sparse-checkout set src/frontend
+```
+
+### 清理仓库
+
+```bash
+# 查看仓库大小
+git count-objects -vH
+
+# 清理无用对象
+git gc --aggressive --prune=now
+
+# 清理远程已删除的分支引用
+git remote prune origin
+
+# 清理本地已合并的分支
+git branch --merged master | grep -v "\\*\\|master\\|develop" | xargs -n 1 git branch -d
+```
+
+### 提升操作速度
+
+```bash
+# 启用文件系统缓存
+git config --global core.fscache true
+
+# 启用并行获取
+git config --global fetch.parallel 4
+
+# 启用未跟踪文件缓存
+git config --global core.untrackedCache true
+```
+
+## Git 安全规范
+
+### 敏感信息保护
+
+```bash
+# 检查历史提交中的敏感信息
+git log -p | grep -E "(password|secret|api_key)"
+
+# 从历史记录中删除敏感文件
+git filter-branch --force --index-filter \
+ 'git rm --cached --ignore-unmatch config/secrets.yml' \
+ --prune-empty --tag-name-filter cat -- --all
+
+# 使用 git-secrets 预防敏感信息提交
+git secrets --install
+git secrets --register-aws
+```
+
+### 签名验证
+
+```bash
+# 配置 GPG 签名
+git config --global user.signingkey YOUR_KEY_ID
+git config --global commit.gpgsign true
+
+# 创建签名提交
+git commit -S -m "feat: 签名提交"
+
+# 验证签名
+git log --show-signature
+```
+
+### 仓库权限控制
+
+| 规则 | master | develop | feature/* |
+| :--------------- | :----- | :------ | :-------- |
+| 禁止强制推送 | ✅ | ✅ | ❌ |
+| 禁止删除 | ✅ | ✅ | ❌ |
+| 必须 Code Review | ✅ | ✅ | ❌ |
+| 必须通过 CI | ✅ | ✅ | ❌ |
+| 必须签名提交 | ✅ | ❌ | ❌ |
+
+## 子模块管理
+
+### 添加子模块
+
+```bash
+git submodule add https://github.com/user/repo.git libs/repo
+
+# 克隆包含子模块的项目
+git clone --recurse-submodules https://github.com/user/project.git
+
+# 初始化已有项目的子模块
+git submodule init
+git submodule update
+```
+
+### 更新子模块
+
+```bash
+# 更新单个子模块
+cd libs/repo
+git pull origin main
+
+# 更新所有子模块
+git submodule update --remote
+
+# 提交子模块更新
+cd ..
+git add libs/repo
+git commit -m "chore: 更新子模块版本"
+```
+
+### 删除子模块
+
+```bash
+# 删除子模块条目
+git submodule deinit -f libs/repo
+
+# 删除 .git/modules 中的缓存
+rm -rf .git/modules/libs/repo
+
+# 删除子模块目录
+git rm -f libs/repo
+```
+
+## 常见问题解决
+
+### 1. 修改最后一次提交
+
+```bash
+# 修改提交内容(未推送)
+git add forgotten-file.ts
+git commit --amend --no-edit
+
+# 修改提交消息
+git commit --amend -m "新的提交消息"
+
+# 回滚最后一次提交,保留更改
+git reset --soft HEAD~1
+```
+
+### 2. 推送被拒绝
+
+```bash
+# 先拉取再推送
+git pull origin master
+git push origin master
+
+# 使用 rebase 保持历史清晰
+git pull --rebase origin master
+git push origin master
+```
+
+### 3. 回滚到之前版本
+
+```bash
+# 重置到指定提交(丢弃之后的提交)
+git reset --hard abc123
+
+# 创建反向提交(推荐,保留历史)
+git revert abc123
+```
+
+### 4. 恢复误删的分支
+
+```bash
+# 查看操作历史
+git reflog
+
+# 恢复分支
+git checkout -b feature/xxx def456
+```
+
+### 5. 合并多个提交
+
+```bash
+# 交互式 rebase(只能合并未推送的提交)
+git rebase -i HEAD~5
+
+# 在编辑器中将要合并的提交标记为 squash
+```
+
+### 6. 暂存当前工作
+
+```bash
+git stash save "工作进行中"
+git stash list
+git stash pop
+git stash apply stash@{0}
+```
+
+### 7. 查看文件修改历史
+
+```bash
+git log -- <file> # 提交历史
+git log -p -- <file> # 详细内容
+git blame <file> # 每行修改人
+```
+
+### 8. 处理大文件
+
+```bash
+# 使用 Git LFS
+git lfs install
+git lfs track "*.zip"
+git add .gitattributes
+```
+
+## 实用技巧
+
+### 配置别名
+
+```bash
+git config --global alias.co checkout
+git config --global alias.br branch
+git config --global alias.ci commit
+git config --global alias.st status
+git config --global alias.lg "log --graph --oneline --all"
+```
+
+### 美化日志
+
+```bash
+# 图形化历史
+git log --graph --oneline --all
+
+# 搜索提交消息
+git log --grep="用户管理"
+
+# 搜索代码变更
+git log -S"function_name"
+```
+
+### 快速操作
+
+```bash
+# 放弃所有未提交更改
+git reset --hard HEAD
+
+# 放弃某个文件更改
+git checkout -- filename
+
+# 删除未跟踪文件
+git clean -fd
+
+# 批量删除已合并分支
+git branch --merged master | grep -v "\* master" | xargs -n 1 git branch -d
+```
+
+### 安全操作
+
+```bash
+# 查看将要推送的内容
+git push --dry-run
+
+# 安全的强制推送
+git push --force-with-lease
+
+# 备份分支
+git branch backup-master master
+```
+
+### 查找问题提交
+
+```bash
+# 二分查找引入Bug的提交
+git bisect start
+git bisect bad # 标记当前有问题
+git bisect good v1.0.0 # 标记某版本是好的
+# Git会自动切换提交,测试后标记 good/bad
+git bisect reset # 结束查找
+```
+
+## CHANGELOG 管理
+
+### 自动生成 CHANGELOG
+
+使用 `conventional-changelog` 自动生成:
+
+```bash
+# 安装
+pnpm install -D conventional-changelog-cli
+
+# 生成 CHANGELOG
+npx conventional-changelog -p angular -i CHANGELOG.md -s
+```
+
+### CHANGELOG 格式
+
+```markdown
+# 更新日志
+
+## [1.2.0] - 2024-01-15
+
+### 新增
+- 新增用户导出功能 (#123)
+- 新增数据备份模块
+
+### 修复
+- 修复登录验证码不刷新问题 (#456)
+- 修复列表分页异常
+
+### 变更
+- 优化用户查询性能
+- 调整菜单权限校验逻辑
+
+### 移除
+- 移除废弃的API接口
+
+## [1.1.0] - 2024-01-01
+...
+```
diff --git a/.agents/skills/git-workflow/references/branching-strategies.md b/.agents/skills/git-workflow/references/branching-strategies.md new file mode 100644 index 0000000..570cf1d --- /dev/null +++ b/.agents/skills/git-workflow/references/branching-strategies.md @@ -0,0 +1,175 @@ +# 分支管理策略详解
+
+## 分支类型
+
+| 分支类型 | 命名规范 | 说明 | 生命周期 |
+| :------- | :---------------- | :------------------------- | :------------- |
+| master | `master` | 主分支,始终保持可发布状态 | 永久 |
+| develop | `develop` | 开发分支,集成最新开发代码 | 永久 |
+| feature | `feature/功能名` | 功能分支 | 开发完成后删除 |
+| bugfix | `bugfix/问题描述` | Bug修复分支 | 修复完成后删除 |
+| hotfix | `hotfix/问题描述` | 紧急修复分支 | 修复完成后删除 |
+| release | `release/版本号` | 发布分支 | 发布完成后删除 |
+
+## 分支命名规范
+
+### 功能分支
+
+```
+feature/user-management # ✅ 用户管理功能
+feature/123-add-export # ✅ 关联Issue的功能
+```
+
+### Bug修复分支
+
+```
+bugfix/login-error # ✅ 登录错误修复
+bugfix/456-fix-timeout # ✅ 关联Issue的修复
+```
+
+### 紧急修复分支
+
+```
+hotfix/security-vulnerability # ✅ 安全漏洞修复
+hotfix/v1.0.1 # ✅ 版本号修复
+```
+
+### 发布分支
+
+```
+release/v1.0.0 # ✅ 版本发布
+release/v2.0.0-beta.1 # ✅ 预发布版本
+```
+
+## 分支保护规则
+
+### master 分支
+
+- 禁止直接推送
+- 必须通过 Pull Request 合并
+- 必须通过 CI 检查
+- 必须至少一人 Code Review
+
+### develop 分支
+
+- 限制直接推送
+- 建议通过 Pull Request 合并
+- 必须通过 CI 检查
+
+## 分支操作命令
+
+### 创建功能分支
+
+```bash
+git checkout develop
+git pull origin develop
+git checkout -b feature/user-management
+```
+
+### 创建Bug修复分支
+
+```bash
+git checkout develop
+git pull origin develop
+git checkout -b bugfix/login-error
+```
+
+### 创建紧急修复分支(从master创建)
+
+```bash
+git checkout master
+git pull origin master
+git checkout -b hotfix/security-fix
+```
+
+### 删除分支
+
+```bash
+git branch -d feature/user-management # 删除本地分支
+git push origin -d feature/user-management # 删除远程分支
+```
+
+## 工作流程详解
+
+### 日常开发流程
+
+```bash
+# 1. 同步最新代码
+git checkout develop
+git pull origin develop
+
+# 2. 创建功能分支
+git checkout -b feature/user-management
+
+# 3. 开发并提交
+git add .
+git commit -m "feat(user): 添加用户列表页面"
+
+# 4. 推送到远程
+git push -u origin feature/user-management
+
+# 5. 创建 Pull Request 并请求 Code Review
+
+# 6. 合并到 develop(通过 PR)
+
+# 7. 删除功能分支
+git branch -d feature/user-management
+git push origin -d feature/user-management
+```
+
+### 紧急修复流程
+
+```bash
+# 1. 从 master 创建修复分支
+git checkout master
+git pull origin master
+git checkout -b hotfix/critical-bug
+
+# 2. 修复并提交
+git add .
+git commit -m "fix(auth): 修复认证绕过漏洞"
+
+# 3. 合并到 master
+git checkout master
+git merge --no-ff hotfix/critical-bug
+git tag -a v1.0.1 -m "hotfix: 修复认证绕过漏洞"
+git push origin master --tags
+
+# 4. 同步到 develop
+git checkout develop
+git merge --no-ff hotfix/critical-bug
+git push origin develop
+
+# 5. 删除修复分支
+git branch -d hotfix/critical-bug
+```
+
+### 版本发布流程
+
+```bash
+# 1. 创建发布分支
+git checkout develop
+git checkout -b release/v1.0.0
+
+# 2. 更新版本号和文档
+# 修改 package.json 版本号
+# 更新 CHANGELOG.md
+
+# 3. 提交版本更新
+git add .
+git commit -m "chore(release): 准备发布 v1.0.0"
+
+# 4. 合并到 master
+git checkout master
+git merge --no-ff release/v1.0.0
+git tag -a v1.0.0 -m "release: v1.0.0 正式版本"
+git push origin master --tags
+
+# 5. 同步到 develop
+git checkout develop
+git merge --no-ff release/v1.0.0
+git push origin develop
+
+# 6. 删除发布分支
+git branch -d release/v1.0.0
+```
diff --git a/.agents/skills/git-workflow/references/collaboration.md b/.agents/skills/git-workflow/references/collaboration.md new file mode 100644 index 0000000..76cb4a3 --- /dev/null +++ b/.agents/skills/git-workflow/references/collaboration.md @@ -0,0 +1,119 @@ +# 多人协作规范
+
+## Pull Request 规范
+
+创建 PR 时应包含以下内容:
+
+```markdown
+## 变更说明
+<!-- 描述本次变更的内容和目的 -->
+
+## 变更类型
+- [ ] 新功能 (feat)
+- [ ] Bug 修复 (fix)
+- [ ] 代码重构 (refactor)
+- [ ] 文档更新 (docs)
+- [ ] 其他
+
+## 测试方式
+<!-- 描述如何测试这些变更 -->
+
+## 关联 Issue
+Closes #xxx
+
+## 检查清单
+- [ ] 代码已自测
+- [ ] 文档已更新
+- [ ] 变更已添加到 CHANGELOG
+```
+
+## Code Review 规范
+
+### 审查要点
+
+#### 1. 代码质量
+
+- 代码是否清晰易读
+- 命名是否规范
+- 是否有重复代码
+
+#### 2. 逻辑正确性
+
+- 业务逻辑是否正确
+- 边界条件是否处理
+- 异常情况是否考虑
+
+#### 3. 安全性
+
+- 是否有安全漏洞
+- 敏感信息是否暴露
+- 输入是否校验
+
+#### 4. 性能
+
+- 是否有性能问题
+- 资源是否正确释放
+- 算法复杂度是否合理
+
+### 反馈格式
+
+```markdown
+<!-- 必须修改 -->
+🔴 **必须修改**: 这里有 SQL 注入风险,需要使用参数化查询
+
+<!-- 建议修改 -->
+🟡 **建议修改**: 这个方法可以提取为工具函数,提高复用性
+
+<!-- 讨论 -->
+💬 **讨论**: 这里是否可以考虑使用缓存?
+
+<!-- 赞 -->
+👍 **赞**: 这个封装很优雅!
+```
+
+## 最佳实践总结
+
+### 提交规范
+
+✅ **推荐:**
+
+- 使用 Conventional Commits 规范
+- 提交消息清晰描述改动
+- 一次提交只做一件事
+- 提交前进行代码检查
+
+❌ **禁止:**
+
+- 提交消息模糊不清
+- 一次提交多个不相关改动
+- 提交敏感信息(密码、密钥)
+- 直接在主分支开发
+
+### 分支管理
+
+✅ **推荐:**
+
+- 使用 feature 分支开发
+- 定期同步主分支代码
+- 功能完成后及时删除分支
+- 使用 `--no-ff` 合并保留历史
+
+❌ **禁止:**
+
+- 在主分支直接开发
+- 长期不合并的功能分支
+- 分支命名不规范
+- 在公共分支上 rebase
+
+### 代码审查
+
+✅ **推荐:**
+
+- 所有代码通过 Pull Request
+- 至少一人审核通过才能合并
+- 提供建设性反馈
+
+❌ **禁止:**
+
+- 未经审查直接合并
+- 自己审查自己的代码
diff --git a/.agents/skills/git-workflow/references/commit-conventions.md b/.agents/skills/git-workflow/references/commit-conventions.md new file mode 100644 index 0000000..7bb06da --- /dev/null +++ b/.agents/skills/git-workflow/references/commit-conventions.md @@ -0,0 +1,128 @@ +# Commit Message 详细规范
+
+## Conventional Commits 格式
+
+采用 **Conventional Commits** 规范,提交消息格式如下:
+
+```
+<type>(<scope>): <subject>
+
+<body>
+
+<footer>
+```
+
+## 字段说明
+
+| 字段 | 必填 | 说明 |
+| :------ | :--- | :------- |
+| type | ✅ | 提交类型 |
+| scope | ❌ | 影响范围 |
+| subject | ✅ | 简短描述 |
+| body | ❌ | 详细描述 |
+| footer | ❌ | 脚注信息 |
+
+## Type 类型
+
+| 类型 | 说明 | 示例 |
+| :--------- | :------- | :---------------------------------- |
+| `feat` | 新功能 | `feat(user): 新增用户导出功能` |
+| `fix` | 修复Bug | `fix(login): 修复验证码不刷新问题` |
+| `docs` | 文档更新 | `docs(api): 更新接口文档` |
+| `style` | 代码格式 | `style: 调整代码缩进` |
+| `refactor` | 重构 | `refactor(utils): 重构日期工具函数` |
+| `perf` | 性能优化 | `perf(list): 优化列表渲染性能` |
+| `test` | 测试相关 | `test(user): 添加用户模块单元测试` |
+| `build` | 构建相关 | `build: 升级 vite 到 5.0` |
+| `ci` | CI配置 | `ci: 添加 GitHub Actions` |
+| `chore` | 其他修改 | `chore: 更新依赖版本` |
+| `revert` | 回滚提交 | `revert: 回滚 feat(user)` |
+
+## Scope 范围
+
+Scope 用于说明提交影响的范围,常用的 scope 包括:
+
+- `data` - 数据处理
+- `utils` - 工具函数
+- `model` - 模型架构
+- `config` - 参数配置
+- `trainer` - 训练
+- `evaluator` - 测评
+- `workflow` - 工作流
+
+## Subject 规范
+
+- 使用动词开头:添加、修复、更新、移除、优化
+- 不超过50个字符
+- 不以句号结尾
+- 使用中文或英文,保持一致
+
+### 正确与错误示例
+
+```
+# ✅ 正确示例
+feat(user): 添加用户导出功能
+fix(login): 修复验证码不刷新问题
+
+# ❌ 错误示例
+feat(user): 添加用户导出功能。 # 不要句号
+feat(user): 用户导出 # 要用动词开头
+feat: 添加了一个新的用户导出功能 # 太长
+```
+
+## Body 详细描述
+
+当改动较大或需要说明原因时,使用 Body 提供详细描述:
+
+```
+feat(user): 添加用户批量导入功能
+
+- 支持 Excel 文件导入
+- 支持数据校验和错误提示
+- 支持导入进度显示
+
+相关需求: #123
+```
+
+## Footer 脚注
+
+用于关联 Issue 或说明破坏性变更:
+
+```
+# 关联 Issue
+Closes #123, #456
+
+# 破坏性变更
+BREAKING CHANGE: 用户接口返回格式变更
+旧格式: { data: user }
+新格式: { code: 200, data: user, msg: 'success' }
+```
+
+## 完整示例
+
+### 简单提交
+
+```bash
+git commit -m "feat(user): 添加用户导出功能"
+```
+
+### 带 Body 的提交
+
+```bash
+git commit -m "fix(login): 修复验证码不刷新问题
+
+原因: 缓存时间设置过长导致验证码一直显示同一张图片
+方案: 将缓存时间从5分钟调整为1分钟"
+```
+
+### 带 Footer 的提交
+
+```bash
+git commit -m "feat(api): 重构用户接口
+
+BREAKING CHANGE: 用户查询接口路径变更
+旧路径: /api/user/list
+新路径: /api/system/user/list
+
+Closes #789"
+```
diff --git a/.agents/skills/git-workflow/references/conflict-resolution.md b/.agents/skills/git-workflow/references/conflict-resolution.md new file mode 100644 index 0000000..0200343 --- /dev/null +++ b/.agents/skills/git-workflow/references/conflict-resolution.md @@ -0,0 +1,148 @@ +# 冲突处理详解
+
+## 识别冲突
+
+当 Git 无法自动合并时,会标记冲突:
+
+```
+<<<<<<< HEAD
+// 当前分支的代码
+const name = '张三'
+=======
+// 要合并的分支的代码
+const name = '李四'
+>>>>>>> feature/user-management
+```
+
+## 解决冲突步骤
+
+### 1. 查看冲突文件
+
+```bash
+git status
+```
+
+### 2. 手动编辑文件,解决冲突
+
+打开冲突文件,找到冲突标记(`<<<<<<<`、`=======`、`>>>>>>>`),手动编辑选择保留的内容或合并两者。
+
+### 3. 标记已解决
+
+```bash
+git add <file>
+```
+
+### 4. 完成合并
+
+```bash
+# 对于 merge 冲突
+git commit
+
+# 对于 rebase 冲突
+git rebase --continue
+```
+
+## 冲突处理策略
+
+### 保留当前分支版本
+
+```bash
+git checkout --ours <file>
+git add <file>
+```
+
+### 保留传入分支版本
+
+```bash
+git checkout --theirs <file>
+git add <file>
+```
+
+### 放弃合并
+
+```bash
+# 放弃 merge
+git merge --abort
+
+# 放弃 rebase
+git rebase --abort
+```
+
+## 预防冲突的最佳实践
+
+1. **及时同步代码** - 每天开始工作前拉取最新代码
+2. **小步提交** - 频繁提交小的改动
+3. **功能模块化** - 不同功能在不同文件中实现
+4. **沟通协作** - 避免同时修改同一文件
+
+## 常见冲突场景
+
+### 场景1:同一文件不同位置修改
+
+这种情况 Git 通常能自动合并,无需人工干预。
+
+### 场景2:同一行不同修改
+
+需要手动决定保留哪个版本或合并两者。
+
+### 场景3:文件重命名
+
+Git 通常能智能识别,但如果一个分支重命名而另一个分支修改内容,可能需要手动处理。
+
+### 场景4:二进制文件冲突
+
+对于图片、PDF 等二进制文件,需要决定保留哪个版本:
+
+```bash
+# 保留当前分支的版本
+git checkout --ours image.png
+
+# 或保留传入分支的版本
+git checkout --theirs image.png
+```
+
+## 冲突解决工具
+
+### 使用 merge 工具
+
+```bash
+# 配置合并工具
+git config --global merge.tool vimdiff
+git config --global mergetool.prompt false
+
+# 使用合并工具
+git mergetool
+```
+
+### 使用 diff 工具
+
+```bash
+# 查看详细差异
+git diff --ours
+git diff --theirs
+git diff --base
+```
+
+## Rebase 冲突特殊处理
+
+Rebase 时冲突会逐个提交出现,处理方式:
+
+```bash
+git rebase develop
+# 冲突1 -> 解决 -> git add -> git rebase --continue
+# 冲突2 -> 解决 -> git add -> git rebase --continue
+# ...
+# 直到完成
+```
+
+如果某一步想跳过:
+
+```bash
+git rebase --skip
+```
+
+如果整体想放弃:
+
+```bash
+git rebase --abort
+```
diff --git a/.agents/skills/git-workflow/references/gitignore-guide.md b/.agents/skills/git-workflow/references/gitignore-guide.md new file mode 100644 index 0000000..9bc1a06 --- /dev/null +++ b/.agents/skills/git-workflow/references/gitignore-guide.md @@ -0,0 +1,276 @@ +# .gitignore 规范
+
+## 基本规则
+
+```
+# 空行:不匹配任何文件
+# 注释:以 # 开头
+# 目录:以 / 结尾
+# 取反:以 ! 开头表示不忽略
+# 根目录:以 / 开头表示项目根目录
+
+*.log # 忽略所有 .log 文件
+node_modules/ # 忽略 node_modules 目录
+/temp/ # 忽略根目录下的 temp 目录
+**/.env # 忽略所有目录下的 .env 文件
+!.gitkeep # 不忽略 .gitkeep 文件
+```
+
+## 通用 .gitignore
+
+```
+# ============================================
+# 依赖目录
+# ============================================
+node_modules/
+vendor/
+
+# ============================================
+# 构建产物
+# ============================================
+dist/
+build/
+target/
+
+# ============================================
+# 编辑器和 IDE
+# ============================================
+.idea/
+.vscode/
+*.sw?
+
+# ============================================
+# 环境配置
+# ============================================
+.env
+.env.local
+.env.*.local
+
+# ============================================
+# 日志文件
+# ============================================
+logs/
+*.log
+npm-debug.log*
+
+# ============================================
+# 系统文件
+# ============================================
+.DS_Store
+Thumbs.db
+
+# ============================================
+# 缓存文件
+# ============================================
+.cache/
+.eslintcache
+.stylelintcache
+```
+
+## 项目特定配置
+
+### 前端/文档项目补充
+
+```
+# VitePress
+docs/.vitepress/dist
+docs/.vitepress/cache
+
+# Node.js
+package-lock.json
+yarn.lock
+pnpm-lock.yaml
+```
+
+### 后端项目补充
+
+```
+# Maven
+target/
+pom.xml.tag
+*.jar
+!**/src/main/**/target/
+
+# 敏感配置
+application-local.yml
+application-dev.yml
+```
+
+### Python 项目补充
+
+```
+# Python
+__pycache__/
+*.py[cod]
+*$py.class
+*.so
+.Python
+venv/
+env/
+ENV/
+.pytest_cache/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
+
+# Pyre type checker
+.pyre/
+
+# pytype
+.pytype/
+```
+
+### Go 项目补充
+
+```
+# Binaries for programs and plugins
+*.exe
+*.exe~
+*.dll
+*.so
+*.dylib
+
+# Test binary, built with `go test -c`
+*.test
+
+# Output of the go coverage tool
+*.out
+
+# Dependency directories
+vendor/
+
+# Go workspace file
+go.work
+```
+
+### Rust 项目补充
+
+```
+# Rust
+/target/
+**/*.rs.bk
+*.pdb
+Cargo.lock
+```
+
+## .gitignore 技巧
+
+### 忽略文件但保留目录
+
+```
+logs/*
+!logs/.gitkeep
+```
+
+### 检查忽略规则
+
+```bash
+git check-ignore -v filename
+```
+
+### 清理已提交的忽略文件
+
+```bash
+git rm --cached filename
+git commit -m "chore: 移除不应提交的文件"
+```
+
+### 调试 .gitignore
+
+```bash
+# 查看文件是否被忽略以及被哪条规则匹配
+git check-ignore -v path/to/file
+
+# 查看所有被忽略的文件
+git ls-files --others --ignored --exclude-standard
+```
+
+## 常见模式
+
+### 忽略特定文件
+
+```
+# 忽略特定文件
+config/local.json
+secrets.yaml
+```
+
+### 忽略特定类型
+
+```
+# 忽略所有 .log 文件
+*.log
+
+# 忽略所有临时文件
+*.tmp
+*.temp
+```
+
+### 忽略目录
+
+```
+# 忽略所有 node_modules 目录
+node_modules/
+
+# 忽略根目录下的 build 目录
+/build/
+
+# 忽略任何位置的 build 目录
+**/build/
+```
+
+### 取反规则
+
+```
+# 忽略所有 .a 文件
+*.a
+
+# 但不忽略 lib.a
+!lib.a
+
+# 忽略所有 TODO 文件
+TODO*
+
+# 但不忽略 TODO.md
+!TODO.md
+```
+
+### 通配符
+
+```
+# * 匹配任意字符
+*.log
+
+# ** 匹配任意目录
+**/temp/
+
+# ? 匹配单个字符
+file?.txt
+
+# [] 匹配括号内任意字符
+file[0-9].txt
+```
+
+## .gitignore 优先级
+
+1. 命令行指定的文件(如 `git add -f`)
+2. `.git/info/exclude`(本地排除规则)
+3. `.gitignore`(项目级别,提交到仓库)
+4. `~/.gitignore_global`(全局级别)
+
+### 本地排除规则
+
+对于不想提交到仓库的本地忽略规则:
+
+```bash
+# 编辑本地排除文件
+git config --global core.excludesfile ~/.gitignore_global
+
+# 或者使用 .git/info/exclude(仅当前仓库)
+echo "secrets.yaml" >> .git/info/exclude
+```
diff --git a/.agents/skills/git-workflow/references/merge-strategies.md b/.agents/skills/git-workflow/references/merge-strategies.md new file mode 100644 index 0000000..ba9735b --- /dev/null +++ b/.agents/skills/git-workflow/references/merge-strategies.md @@ -0,0 +1,121 @@ +# 合并策略详解
+
+## Merge vs Rebase
+
+| 特性 | Merge | Rebase |
+| :------- | :------------------------- | :----------------------- |
+| 历史记录 | 保留完整历史,创建合并提交 | 线性历史,不创建合并提交 |
+| 适用场景 | 公共分支、需要保留历史 | 私有分支、保持历史清晰 |
+| 冲突处理 | 一次性处理所有冲突 | 逐个提交处理冲突 |
+| 推荐用法 | 合并到主分支 | 同步上游代码 |
+
+## 使用建议
+
+### 功能分支同步 develop:使用 rebase
+
+```bash
+git checkout feature/user-management
+git rebase develop
+```
+
+### 功能分支合并到 develop:使用 merge --no-ff
+
+```bash
+git checkout develop
+git merge --no-ff feature/user-management
+```
+
+### develop 合并到 master:使用 merge --no-ff
+
+```bash
+git checkout master
+git merge --no-ff develop
+```
+
+### 禁止在公共分支上 rebase
+
+```bash
+# ❌ 危险操作
+git checkout develop
+git rebase feature/xxx # 会改写公共历史
+```
+
+## Fast-Forward vs No-Fast-Forward
+
+### Fast-Forward 合并(不创建合并提交)
+
+```bash
+git merge feature/xxx
+```
+
+```
+# A---B---C (master)
+# \
+# D---E (feature)
+# 结果: A---B---C---D---E (master)
+```
+
+### No-Fast-Forward 合并(创建合并提交)
+
+```bash
+git merge --no-ff feature/xxx
+```
+
+```
+# A---B---C---------M (master)
+# \ /
+# D---E (feature)
+```
+
+**项目约定**:合并功能分支时使用 `--no-ff`,保留分支历史信息。
+
+## Squash 合并
+
+将多个提交压缩成一个:
+
+```bash
+git checkout develop
+git merge --squash feature/user-management
+git commit -m "feat(user): 添加用户管理功能"
+```
+
+### 适用场景
+
+- 功能分支有太多琐碎提交
+- 想要保持主分支历史清晰
+- 不需要保留开发过程中的细节
+
+### Squash vs Merge --no-ff
+
+| 策略 | 优点 | 缺点 | 适用场景 |
+| :---------- | :----------------------- | :----------------------- | :--------------------- |
+| merge --no-ff | 保留完整历史和开发过程 | 历史可能比较复杂 | 功能分支、重要功能 |
+| squash | 历史清晰,一个提交一个功能 | 丢失开发过程信息 | 小功能、实验性功能 |
+| rebase | 线性历史,易于理解 | 改写历史,可能引起问题 | 个人分支、同步上游 |
+
+## Rebase 高级用法
+
+### 交互式 Rebase
+
+```bash
+# 编辑最近5个提交
+git rebase -i HEAD~5
+```
+
+在编辑器中可以使用以下命令:
+- `pick` - 保留该提交
+- `reword` - 修改提交消息
+- `edit` - 修改提交内容
+- `squash` - 合并到前一个提交
+- `drop` - 删除该提交
+
+### Rebase 时解决冲突
+
+```bash
+git rebase develop
+# 出现冲突后,编辑文件解决冲突
+git add <file>
+git rebase --continue
+# 如果想放弃 rebase
+git rebase --abort
+```
|
