Skip to content

Latest commit

 

History

History
233 lines (159 loc) · 7.46 KB

File metadata and controls

233 lines (159 loc) · 7.46 KB

GitHub Workflow Status (branch) GoDoc Coverage Status Supported Go Versions GitHub Release Go Report Card

go-commit

快捷的 Git 提交应用,具备自动 Go 代码格式化功能。


英文文档

ENGLISH README

核心特性

🎯 智能提交自动化: 智能暂存、格式化和提交,支持 amend 模式
自动 Go 格式化: 选择性格式化修改的 Go 文件,排除生成文件
🔄 签名信息管理: 基于远程 URL 模式的自动 Git 签名选择
🌍 通配符模式: 复杂企业工作流下的高级模式匹配
📋 配置驱动: 基于 JSON 的配置,支持评分式签名匹配

安装

go install github.com/yylego/go-commit/cmd/go-commit@latest

使用方法

# 基本提交并格式化 Go 代码
go-commit -m "some commit message" --format-go

# 使用签名信息
go-commit -u "username" -e "example@example.com" -m "message" --format-go

# 使用配置文件自动选择签名信息
go-commit -c "xx/xx/go-commit-config.json" -m "commit message" --format-go

# 修改上一次提交
go-commit --amend -m "updated message" --format-go

# 强制修改 (即使推送到远程)
go-commit --amend --force -m "force amend message"

配置

使用配置文件是自适应的,但它能让您使用更多高级功能,例如根据项目的远程URL自动切换签名。

您可以根据当前项目的 Git 远程代码库来快速生成一份配置模板,以此开始:

# 这会在当前文件夹下创建一个 go-commit-config.json 文件
go-commit config example

该文件允许您在不同的远程代码库中定义签名:

{
  "signatures": [
    {
      "name": "work-github",
      "username": "work-man",
      "mailbox": "work@corp.com",
      "remotePatterns": ["git@github.corp.com:*"]
    },
    {
      "name": "home-github",
      "username": "home-dev",
      "mailbox": "home@example.com",
      "remotePatterns": ["git@github.com:home-dev/*"]
    }
  ]
}

示例:

  • 项目 A 的远程地址为 git@github.corp.com:team/project-a → 自动使用 work-man(work@corp.com) 提交
  • 项目 B 的远程地址为 git@github.com:home-dev/project-b → 自动使用 home-dev(home@example.com) 提交

这种自动切换功能让多项目工作流变得更加便捷。

验证配置:

设置好配置文件后,您可以验证其是否正确:

# 检查配置是否正确加载并预览匹配的签名
go-commit config -c /path/to/go-commit-config.json

参阅配置示例查看高级用法。

推荐别名

# 快速提交并格式化
alias gcm='go-commit --username=yourname --format-go'

# 快速追加提交并格式化(扩展 gcm)
alias gca='gcm --amend'

使用示例

# 提交消息并格式化 Go 代码
gcm -m "添加个新功能"

# 追加最后一次提交
gca

# 修改最后一次提交消息
gca -m "新的提交信息"

# 当签名信息变化时追加提交(即使代码未改动)
# 注意:当用户名/邮箱与上次提交不同时,gca 会自动 amend 提交
gca

# 强制追加 (危险 - 谨慎使用)
gca -m "修改提交信息" --force

高级使用示例

# 仅暂存更改而不提交(测试阶段使用)
go-commit --no-commit --format-go

# 自动格式化 Go 文件并使用自动签名提交
go-commit -m "改进代码格式" --format-go --auto-sign

# 使用特定用户名和邮箱信息提交(覆盖配置)
go-commit -u "张三" -e "zhangsan@corp.com" -m "紧急修复" --format-go

# 使用 mailbox 标志提交
go-commit --mailbox "dev@team.com" -m "功能更新" --format-go

# 配置驱动的提交(基于远程自动选择签名)
go-commit -c ~/go-commit-config.json -m "自动化提交" --format-go

🛠️ 开发须知

Git 包依赖规范(项目特定规则):

在当前项目中,我们严格区分生产代码和测试代码的包依赖:

  • 生产代码:只能使用 gogit (github.com/yylego/gogit) - 提供基于对象的 Git 操作
  • 测试代码:可以使用 gitgo (github.com/yylego/gitgo) - 提供链式操作来构建测试条件

⚠️ 重要提醒:禁止在生产逻辑代码中使用 gitgo。这个规则适用于当前项目,以保持清晰的关注点分离。


📄 许可证类型

MIT 许可证 - 详见 LICENSE


💬 联系与反馈

非常欢迎贡献代码!报告 BUG、建议功能、贡献代码:

  • 🐛 问题报告? 在 GitHub 上提交问题并附上重现步骤
  • 💡 新颖思路? 创建 issue 讨论
  • 📖 文档疑惑? 报告问题,帮助我们完善文档
  • 🚀 需要功能? 分享使用场景,帮助理解需求
  • 性能瓶颈? 报告慢操作,协助解决性能问题
  • 🔧 配置困扰? 询问复杂设置的相关问题
  • 📢 关注进展? 关注仓库以获取新版本和功能
  • 🌟 成功案例? 分享这个包如何改善工作流程
  • 💬 反馈意见? 欢迎提出建议和意见

🔧 代码贡献

新代码贡献,请遵循此流程:

  1. Fork:在 GitHub 上 Fork 仓库(使用网页界面)
  2. 克隆:克隆 Fork 的项目(git clone https://github.com/yourname/repo-name.git
  3. 导航:进入克隆的项目(cd repo-name
  4. 分支:创建功能分支(git checkout -b feature/xxx
  5. 编码:实现您的更改并编写全面的测试
  6. 测试:(Golang 项目)确保测试通过(go test ./...)并遵循 Go 代码风格约定
  7. 文档:面向用户的更改需要更新文档
  8. 暂存:暂存更改(git add .
  9. 提交:提交更改(git commit -m "Add feature xxx")确保向后兼容的代码
  10. 推送:推送到分支(git push origin feature/xxx
  11. PR:在 GitHub 上打开 Merge Request(在 GitHub 网页上)并提供详细描述

请确保测试通过并包含相关的文档更新。


🌟 项目支持

非常欢迎通过提交 Merge Request 和报告问题来贡献此项目。

项目支持:

  • 给予星标如果项目对您有帮助
  • 🤝 分享项目给团队成员和(golang)编程朋友
  • 📝 撰写博客关于开发工具和工作流程 - 我们提供写作支持
  • 🌟 加入生态 - 致力于支持开源和(golang)开发场景

祝你用这个包编程愉快! 🎉🎉🎉


GitHub 标星点赞

标星点赞