GIM: 调用AI自动生成git提交消息的工具
GIM - Git Intelligence Message,是根据文件变更内容,自动请求用户配置的AI服务,生成提交消息的工具。
代码托管地址 https://github.com/davelet/git-intelligence-message 。
下面先说下用法,再说原理。
用法
可以直接阅读Readme文档 https://github.com/davelet/git-intelligence-message/blob/main/README.md ,我觉得写的挺清楚了。或者看一下用法文档如下:
gim -h
Usage: gim [OPTIONS] [COMMAND]
Commands:
ai Setup the ai-api configuration
help Print this message or the help of the given subcommand(s)
Options:
-t, --title <TITLE> The commit message title
-a, --auto-add Auto add the changes to the stage
-p, --update Ammend the last commit
-v, --verbose Show verbose output
-h, --help Print help
-V, --version Print version
这个项目使用的是clap库,所以这个文档是clap自动生成的。
主要有这么几个参数:
- 不指定参数:根据暂存区的变更生成message提交
- 指定-a:会先
git add .再生成消息提交 - 指定-t:这个没啥用我觉得,但是还是提供了这个功能,就是gim自动生成提交description,但是subject使用指定的。因为不指定subject的时候是根据description自动总结的,我觉得尽量用自动的都。
- 指定-p:这个是update的短命令,因为跟ai命令里的url冲突了,所以用了p。功能是启动--amend,也就是把变更合并进上一次提交,并且自动修改上一次提交的消息
- 指定-v:这个不是看版本,看版本用大写的。这个是查看工作流程的,会打印详细信息。一般没啥用,想玩就打开。
一般情况下,我推荐使用gim -a。因为你修改代码后不用主动 add,当然如果用IDEA之类的工具它会帮你add,加了这个参数也不影响,或者干脆就gim就可以。另外就是 gim -ap 既能提交又能修改。
原理
原理很简单,就是调用git命令看看有哪些变更,把变更发给AI,让AI给每一个文件生成一句总结;然后再根据这些变更总结生成一句汇总当作提交消息。
这些过程和命令都可以通过
-v查看到。
所以使用之前需要先配置AI服务:
gim ai -h
Setup the ai-api configuration
Usage: gim ai [OPTIONS]
Options:
-m, --model <MODEL> the ai model name
-k, --apikey <APIKEY> the ai api key
-u, --url <URL> the ai api url
-l, --language <LANGUAGE> the answer language
-h, --help Print help
这一段也是clap自动生成的,我真谢谢你,节省了我很多时间,不然我还得去编写文档。
主要有这些参数:
- -m指定模型名称
- -k指定你自己的token
- -u指定你要调用服务的地址,不指定就根据model名字猜测,很可能会猜不出来
- -l指定回复的语言,不指定就是英语
比如你可以执行
gim ai -m deepseek-v3 -u https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions -k sk-<你的token>
来完成配置。
根据我自己的经验,最好使用deepseek 或者 kimi。因为其他模型太强大了,老忽略我的提示词,生成的变更描述总是包含模型分析过程。当然如果你用付费模型算我没说
安装
前提要求是本地先安装了git工具。
本来我是用git2这个库来开发的,这个库不依赖git工具,但是API太难了。后来我想反正GIM是git的补充工具,我也不开发其他命令支持,干脆就调用git命令吧。所以你要有git安装好。
现阶段你需要把项目克隆下来:
git clone git@github.com:davelet/git-intelligence-message.git
cd git-intelligence-message
cargo install --path .
完蛋了,需要安装rust还。
安装好以后就可以在命令行使用gim命令了。
如果哪位大神能教我怎么发布到brew上面,我感激不尽!
我猜的,发布到brew就不用安装rust了吧
小演示

这是我本地的一次使用。
你可以看到在 Commit message 那里AI生成了 “Based on” 这种话,所以我不得不再执行 git commit --amend把上下各删掉了3行。
GIM: 调用AI自动生成git提交消息的工具的更多相关文章
- 基于OCILIB的oracle数据库操作总结及自动生成Model和Dao的工具
基于OCILIB的oracle数据库操作总结 1. 类图 2. 基类BaseOCIDao的设计与实现 BaseOCIDao.h头文件 #pragma once /* ----- ...
- Flink SQL任务自动生成与提交
目录 起因 思路 实现 1.配置 2.界面如下 3.环境 问题 起因 事情的起因,是看到一篇公众号文章Apache Flink 在汽车之家的应用与实践,里面提到了"基于 SQL 的开发流程& ...
- 微软Connect教程系列--自动生成增删改查页面工具介绍(二)
本章课程描述了vs2015的三个特点,其中主要将描述在vs2015下面,使用命令自动生成增删改查界面,具体如下: 1.web.config文件不在存在,用config.json替代,以适应支撑vs的插 ...
- 《Flink SQL任务自动生成与提交》后续:修改flink源码实现kafka connector BatchMode
目录 问题 思路 kafka参数问题 支持batchmode的问题 参数提交至kafkasource的问题 group by支持问题 实现 编译 测试 因为在一篇博文上看到介绍"汽车之家介绍 ...
- eclipse根据.wsdl文件自动生成webservice的调用客户端
1.工具:eclipse3.3或者是带有webservice插件的eclipse 2. 首先用浏览器访问webservice的站点,接着保存打开的页面,后缀为.wsdl. 3.把保存好的文件拷入ecl ...
- php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类
1. web service普及: Webservice soap wsdl区别之个人见解 Web Service实现业务诉求: Web Service是真正“办事”的那个,提供一种办事接口的统称. ...
- 在 Git 提交信息中使用 Emoji
Gitmoji 旨在解释如何在 Git 提交消息时使用表情符号.在提交信息时使用表情符号,可以更容易地识别提交的目的或意图. Emoji 列表 :优化项目结构 / 代码格式 :art: ️ :性能提升 ...
- JAVA中自定义扩展Swagger的能力,自动生成参数取值含义说明,提升开发效率
大家好,又见面了. 在JAVA做前后端分离的项目开发的时候,服务端需要提供接口文档供周边人员做接口的对接指导.越来越多的项目都在尝试使用一些基于代码自动生成接口文档的工具来替代由开发人员手动编写接口文 ...
- 使用Git提交与管理代码
要成为一个合格的码农,必须要有效对自己的代码进行管理,最近打算有空就整理一下自己以前写得代码,把不涉及实验室的机密的内容等放到github上,之前只知道git clone 别人的代码,希望有一天自己的 ...
- java DMO及增删改查代码的自动生成
在web开发过程中,尤其是后台管理系统的开发中,少不了增删改成的基础操作,原来我自己的做法是一份一份的拷贝粘贴,然后修改其中的不同,然而这样既枯燥无味又浪费了大量的时间,所以根据自己项目结构的特点写了 ...
随机推荐
- [ABC259F] Select Edges 题解
很容易想到树形 dp. 考虑在有根树内,每个点都有两种状态: 不选自己和父亲的边: 要选自己和父亲的边. 那么单独对于子树内部而言,就要分两种情况: 最多可以向 \(d_i\) 个孩子连边,对应上述第 ...
- 学习vue ,环境搭建(VS code、node.js、cnpm、vue-cli)创建项目 并引入element
安装 1.Visual studio code(VS code) 往期博客:https://www.cnblogs.com/technicist/p/12677052.html 2.Node.js与c ...
- centos 运行springboot 项目
jar文件发布: 准备工作: 发布在springboot项目中的pom.xml文件添加如下: <build> <plugins> <plugin> <grou ...
- php-fpm自动重启 解决方案
环境:Mac.php7.1.nginx 现象:killall php-fpm,php-fpm自动重启 共有如下几种解决方案: 1.检查php-fpm.conf的deamonize模式是否开启 2.查找 ...
- 【日常运维笔记】linux系统修改密码
1.问题描述:xshll无法正常登录服务器,使用宝塔系统后台linux工具修改密码,重启服务器,依然无法登录,怀疑密码未重置成功,我们登录root,重置密码. 使用命令passwd修改密码,需要注意的 ...
- 【编程思想】C# delegate 委托的本质:方法对象的应用
一.前言 翻回之前写的博客,前期写的结构确实差很多, 这次细看了<委托那些事(一).(二)>,忍不住重新写一下,之前把简单的事情复杂化了. 为什么现在思维不一样了,有一点我认为是见识的计算 ...
- Go语言之sync包 WaitGroup的使用
WaitGroup 是什么以及它能为我们解决什么问题? WaitGroup在go语言中,用于线程同步,单从字面意思理解,wait等待的意思,group组.团队的意思,WaitGroup就是指等待一组, ...
- Golang 入门 : 符文
字符串常用语表示一系列文本字符,而Go的符文(rune)则用于表示单个字符. 字符串字面量由双引号(")包围,但rune字面量由单引号(')包围. Go程序几乎可以使用地球上任何语言的任何字 ...
- Docker Swarm 进阶:集群容错
- ASP.NET 日志路径
默认路径 protected void Button_StreamWrite_Click(object sender, EventArgs e) { StreamWriter sw = new ...