Lumen 是一个强大的工具,能帮助开发者快速生成规范的 Git commit 信息。通过简单的代码修改,可以解决 git diff --staged 的限制。结合 Fish shell 和 gum 工具,你可以进一步优化工作流,确保提交前能够检查 AI 生成的结果。方案特别适合想偷懒的人
作为一名开发者,参与开源项目时,编写清晰的 Git commit 信息可能是一项繁琐的任务,尤其是对英语非母语的开发者。Lumen 是一个利用 AI 自动生成 commit 信息的工具,大大简化了这一过程。本文将分享如何使用 Lumen、解决常见问题,并提供一个 Fish shell 脚本优化工作流。
Lumen 的核心功能是通过分析代码变更生成符合规范的 commit 信息。基本用法非常简单:
lumen draft
例如,修改了 README.md
文件后运行:
lumen draft
feat(README): Add test section
这会生成一条 commit 信息,但仅显示而未提交。如果想直接提交,可以结合 Git 命令:
lumen draft | git commit -F -
这将生成 commit 信息并直接提交。
运行 lumen draft
时,可能会遇到以下错误:
error: diff (staged) is empty
这是因为 Lumen 默认调用 git diff --staged
,而你尚未使用 git add
添加文件到暂存区,导致 diff 为空。
修改 Lumen 源代码以使用 git diff
(而非 git diff --staged
)。具体步骤:
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,
}),
lumen draft
即可基于工作目录的更改生成 commit 信息。为避免 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
lumen
和 gum
。~/.config/fish/config.fish
)。aic
,查看生成的 commit 信息,确认后提交或取消。Lumen 是一个强大的工具,能帮助开发者快速生成规范的 Git commit 信息。通过简单的代码修改,可以解决 git diff --staged
的限制。结合 Fish shell 和 gum 工具,你可以进一步优化工作流,确保提交前能够检查 AI 生成的结果。这个方案特别适合非英语母语的开发者,提升效率的同时保持提交信息的质量。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!