DEV Community

晓道
晓道

Posted on

使用 Lumen AI 简化 Git Commit 信息生成

作为一名开发者,参与开源项目时,编写清晰的 Git commit 信息可能是一项繁琐的任务,尤其是对英语非母语的开发者。Lumen 是一个利用 AI 自动生成 commit 信息的工具,大大简化了这一过程。本文将分享如何使用 Lumen、解决常见问题,并提供一个 Fish shell 脚本优化工作流。

快速上手

Lumen 的核心功能是通过分析代码变更生成符合规范的 commit 信息。基本用法非常简单:

lumen draft
Enter fullscreen mode Exit fullscreen mode

例如,修改了 README.md 文件后运行:

lumen draft
feat(README): Add test section
Enter fullscreen mode Exit fullscreen mode

这会生成一条 commit 信息,但仅显示而未提交。如果想直接提交,可以结合 Git 命令:

lumen draft | git commit -F -
Enter fullscreen mode Exit fullscreen mode

这将生成 commit 信息并直接提交。

解决问题

运行 lumen draft 时,可能会遇到以下错误:

error: diff (staged) is empty
Enter fullscreen mode Exit fullscreen mode

这是因为 Lumen 默认调用 git diff --staged,而你尚未使用 git add 添加文件到暂存区,导致 diff 为空。

解决方法

修改 Lumen 源代码以使用 git diff(而非 git diff --staged)。具体步骤:

  1. 下载 Lumen 源代码(https://github.com/jnsahaj/lumen)。
  2. 编辑 src/command/mod.rs 文件,第 45 行左右,将 Diff::from_working_tree(true) 改为 false
diff --git a/src/command/mod.rs b/src/command/mod.rs
index b51a8d1..c643a5b 100644
--- a/src/command/mod.rs
+++ b/src/command/mod.rs
@@ -42,7 +42,7 @@ impl CommandType {
             }
             CommandType::List => Box::new(ListCommand),
             CommandType::Draft(context, draft_config) => Box::new(DraftCommand {
-                git_entity: GitEntity::Diff(Diff::from_working_tree(true)?),
+                git_entity: GitEntity::Diff(Diff::from_working_tree(false)?),
                 draft_config,
                 context,
             }),
Enter fullscreen mode Exit fullscreen mode
  1. 保存后重新编译运行,lumen draft 即可基于工作目录的更改生成 commit 信息。

优化工作流:Fish Shell 脚本

为避免 AI 生成的 commit 信息直接提交(可能包含错误),可以使用 gum 工具添加确认步骤。以下是一个 Fish shell 函数,自动生成 commit 信息并提供确认选项:

function aic
    set RESULT (lumen draft)
    echo $RESULT
    echo "Committing..."
    gum confirm "是否提交代码?" && git commit -a -m "$RESULT" || echo "已取消提交"
end
Enter fullscreen mode Exit fullscreen mode

使用方法

  1. 确保已安装 lumengum
  2. 将上述函数添加到你的 Fish shell 配置文件(通常是 ~/.config/fish/config.fish)。
  3. 修改代码后运行 aic,查看生成的 commit 信息,确认后提交或取消。

总结

Lumen 是一个强大的工具,能帮助开发者快速生成规范的 Git commit 信息。通过简单的代码修改,可以解决 git diff --staged 的限制。结合 Fish shell 和 gum 工具,你可以进一步优化工作流,确保提交前能够检查 AI 生成的结果。这个方案特别适合非英语母语的开发者,提升效率的同时保持提交信息的质量。

Top comments (0)