为什么git日志在JavaScript GitHub操作中执行时会返回意外的结果?

为什么git日志在JavaScript GitHub操作中执行时会返回意外的结果?,javascript,git,yaml,github-actions,Javascript,Git,Yaml,Github Actions,在我的命令行中,如果执行以下两个git log命令(在提交中打印文件名),它们将返回预期的输出: $ git log -1 --name-only --pretty=format: c0ddab lib/ow/css.js $ git log -1 --name-only --pretty=format: fc3039 .github/workflows/github-actions-demo.yml 但是,如果从JavaScript GitHub操作内部执行相同的两个命令,则它们不会返回相

在我的命令行中,如果执行以下两个
git log
命令(在提交中打印文件名),它们将返回预期的输出:

$ git log -1 --name-only --pretty=format: c0ddab
lib/ow/css.js

$ git log -1 --name-only --pretty=format: fc3039
.github/workflows/github-actions-demo.yml
但是,如果从JavaScript GitHub操作内部执行相同的两个命令,则它们不会返回相同的结果——它们返回:

/usr/bin/git log -1 --name-only --pretty=format: c0ddab
 c0ddab
.github/workflows/github-actions-demo.yml// This is not the file that was modified in this commit.

/usr/bin/git log -1 --name-only --pretty=format: fc3039
 fc3039
.github/workflows/github-actions-demo.yml
有人知道为什么会发生这种情况,或者我如何排除故障吗?有关我的JavaScript操作的完整代码,请参见下文


我的代码

我的YML文件

我的JavaScript操作(index.js;在myUsername中)/myRepo@master)


您的javascript代码执行以下等效代码:

git日志-1--仅限名称”--pretty=format:fc3039
当您将字符串数组传递给
exec.exec()
时,它不会解析字符串以尝试拆分参数,而是将每个未修改的字符串作为单个参数传递给您的命令


解决方法很简单:将
“--pretty=format:”
commitSha
拆分为两个不同的参数:

wait exec.exec(
“吉特”,
[“log”、“-1”、“--name only”、“--pretty=format:”,commitSha],
选择权
);

您的javascript代码执行等同于:

git日志-1--仅限名称”--pretty=format:fc3039
当您将字符串数组传递给
exec.exec()
时,它不会解析字符串以尝试拆分参数,而是将每个未修改的字符串作为单个参数传递给您的命令


解决方法很简单:将
“--pretty=format:”
commitSha
拆分为两个不同的参数:

wait exec.exec(
“吉特”,
[“log”、“-1”、“--name only”、“--pretty=format:”,commitSha],
选择权
);
好的,太棒了——非常感谢,它成功了。我记得在我写代码的时候,我对自己说,“你想在这里走捷径——让我们看看它是否有效。”对于那个特定的用例,它确实按照预期工作。我忘了回去修理它,我就在这里。再次感谢!好的,太棒了,非常感谢,它成功了。我记得在我写代码的时候,我对自己说,“你想在这里走捷径——让我们看看它是否有效。”对于那个特定的用例,它确实按照预期工作。我忘了回去修理它,我就在这里。再次感谢!
name: GitHub Actions Demo
on: [push]
jobs:
  Job-1:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2.3.4
        with:
          fetch-depth: 0
      - name: Test JS action
        id: hello
        uses: myUsername/myRepo@master
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();