向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的每个步骤,每步后检查状态:lein vcs assert-committed:确认工作区已无未提交变更lein cljfmt fix:检查代码格式化是否生成新变更lein change version leiningen.release/bump-version release:验证版本号是否更新lein vcs commit:手动执行git提交,确认是否能成功
- 处理无变更场景:若确实无内容可提交,可临时修改
:release-tasks跳过vcs commit,或手动添加微小变更(如更新README版本说明)后再执行发布。
内容的提问来源于stack exchange,提问作者Lars Melander
相关产品推荐
相关产品推荐

