为何在JavaScript GitHub Action中执行git log返回非预期结果?
问题成因
你编写的JavaScript Action中,@actions/exec的Git命令参数拼接错误:
本地正常执行的git log -1 --name-only --pretty=format: c0ddab命令里,--pretty=format:和提交SHAc0ddab是两个独立参数;但你在代码中将SHA直接拼接在--pretty=format:的尾部,合并成了单个参数--pretty=format: c0ddab。
这就导致Git实际执行时没有收到指定的提交SHA参数,默认查询当前工作区的HEAD提交记录,因此两次执行都返回了HEAD提交的修改文件,而且因为你把SHA写到了格式参数中,输出还会额外多打印一行你传入的SHA值,和你看到的异常表现完全吻合。
排查方案
- 首先校验执行参数:在
exec.exec执行前打印完整的Git参数数组,和本地正常执行的命令参数做对比,可快速定位参数拼接错误。 - 修正参数写法:将
--pretty=format:和提交SHA拆分为两个独立的数组项,修改后的代码如下:
const exec = require("@actions/exec"); async function myAAFunc() { let commitSha; const options = {}; commitSha = "c0ddab"; await exec.exec( "git", ["log", "-1", "--name-only", "--pretty=format:", commitSha], options ); commitSha = "fc3039"; await exec.exec( "git", ["log", "-1", "--name-only", "--pretty=format:", commitSha], options ); } myAAFunc();
- 验证结果:修改后重新运行Action,即可得到和本地执行一致的正确输出。
内容的提问来源于stack exchange,提问作者cag8f
相关产品推荐
相关产品推荐

