You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向AWS发布应用时执行lein release抛出异常,请求排查方案

lein release执行失败:git提交无内容导致退出码1

向AWS发布应用时执行lein release命令失败,核心报错为git提交阶段提示"nothing to commit, working tree clean",同时抛出java.lang.Exception: Couldn't commit. git exit code: 1异常。此前因发布错误执行过回滚操作,无法定位问题根源。

完整报错输出:

$ lein release
[ 1 / 8 ] Running lein vcs assert-committed
[ 2 / 8 ] Running lein cljfmt fix
[ 3 / 8 ] Running lein change version leiningen.release/bump-version release
[ 4 / 8 ] Running lein vcs commit
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean
java.lang.Exception: Couldn't commit. git exit code: 1
 at leiningen.core.eval$sh_with_exit_code.invokeStatic (eval.clj:212)
    leiningen.core.eval$sh_with_exit_code.doInvoke (eval.clj:200)
    clojure.lang.RestFn.invoke (RestFn.java:516)
    leiningen.vcs$fn__11904.invokeStatic (vcs.clj:84)
    leiningen.vcs/fn (vcs.clj:78)
    clojure.lang.MultiFn.invoke (MultiFn.java:234)
    leiningen.vcs$fn__11904.invokeStatic (vcs.clj:80)
    leiningen.vcs/fn (vcs.clj:78)
    clojure.lang.MultiFn.invoke (MultiFn.java:229)
    clojure.lang.AFn.applyToHelper (AFn.java:154)
    clojure.lang.AFn.applyTo (AFn.java:144)
    clojure.lang.Var.applyTo (Var.java:705)
    clojure.core$apply.invokeStatic (core.clj:669)
    clojure.core$apply.invoke (core.clj:662)
    leiningen.vcs$vcs.invokeStatic (vcs.clj:116)
    leiningen.vcs$vcs.doInvoke (vcs.clj:110)
    clojure.lang.RestFn.invoke (RestFn.java:425)
    clojure.lang.AFn.applyToHelper (AFn.java:156)
    clojure.lang.RestFn.applyTo (RestFn.java:132)
    clojure.lang.Var.applyTo (Var.java:705)
    clojure.core$apply.invokeStatic (core.clj:669)
    clojure.core$apply.invoke (core.clj:662)
    leiningen.core.main$partial_task$fn__7376.doInvoke (main.clj:284)
    clojure.lang.RestFn.applyTo (RestFn.java:139)
    clojure.lang.AFunction$1.doInvoke (AFunction.java:31)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invokeStatic (core.clj:669)
    clojure.core$apply.invoke (core.clj:662)
    leiningen.core.main$apply_task.invokeStatic (main.clj:334)
    leiningen.core.main$apply_task.invoke (main.clj:320)
    leiningen.core.main$resolve_and_apply.invokeStatic (main.clj:343)
    leiningen.core.main$resolve_and_apply.invoke (main.clj:336)
    leiningen.release$release.invokeStatic (release.clj:137)
    leiningen.release$release.invoke (release.clj:97)
    leiningen.release$release.invokeStatic (release.clj:129)
    leiningen.release$release.invoke (release.clj:97)
    clojure.lang.AFn.applyToHelper (AFn.java:154)
    clojure.lang.AFn.applyTo (AFn.java:144)
    clojure.lang.Var.applyTo (Var.java:705)
    clojure.core$apply.invokeStatic (core.clj:669)
    clojure.core$apply.invoke (core.clj:662)
    leiningen.core.main$partial_task$fn__7376.doInvoke (main.clj:284)
    clojure.lang.RestFn.invoke (RestFn.java:410)
    clojure.lang.AFn.applyToHelper (AFn.java:154)
    clojure.lang.RestFn.applyTo (RestFn.java:132)
    clojure.lang.AFunction$1.doInvoke (AFunction.java:31)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invokeStatic (core.clj:669)
    clojure.core$apply.invoke (core.clj:662)
    leiningen.core.main$apply_task.invokeStatic (main.clj:334)
    leiningen.core.main$apply_task.invoke (main.clj:320)
    leiningen.core.main$resolve_and_apply.invokeStatic (main.clj:343)
    leiningen.core.main$resolve_and_apply.invoke (main.clj:336)
    leiningen.core.main$_main$fn__7465.invoke (main.clj:453)
    leiningen.core.main$_main.invokeStatic (main.clj:442)
    leiningen.core.main$_main.doInvoke (main.clj:439)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.lang.Var.applyTo (Var.java:705)
    clojure.core$apply.invokeStatic (core.clj:667)
    clojure.main$main_opt.invokeStatic (main.clj:514)
    clojure.main$main_opt.invoke (main.clj:510)
    clojure.main$main.invokeStatic (main.clj:664)
    clojure.main$main.doInvoke (main.clj:616)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.lang.Var.applyTo (Var.java:705)
    clojure.main.main (main.java:40)

排查步骤

  • 检查版本号变更:手动执行lein change version leiningen.release/bump-version release,查看project.clj中的版本号是否更新。回滚操作可能导致版本号已处于目标发布版本,这一步不会产生文件变更。
  • 确认git工作区状态:执行git status,检查是否有未跟踪、已修改但未暂存的文件。回滚后工作区可能已无待提交内容。
  • 检查release任务配置:查看project.clj的:release-tasks配置,确认是否自定义了提交逻辑,或跳过了会产生变更的步骤(如文档更新、依赖同步)。
  • 分步执行release流程:逐次执行lein release的每个步骤,每步后检查状态:
    1. lein vcs assert-committed:确认工作区已无未提交变更
    2. lein cljfmt fix:检查代码格式化是否生成新变更
    3. lein change version leiningen.release/bump-version release:验证版本号是否更新
    4. lein vcs commit:手动执行git提交,确认是否能成功
  • 处理无变更场景:若确实无内容可提交,可临时修改:release-tasks跳过vcs commit,或手动添加微小变更(如更新README版本说明)后再执行发布。

内容的提问来源于stack exchange,提问作者Lars Melander

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:25:31