Github 操作错误;看不到 Master 的 git diff

Posted

技术标签:

【中文标题】Github 操作错误;看不到 Master 的 git diff【英文标题】:Github Actions Error; cannot see git diff to Master 【发布时间】:2020-02-26 00:45:03 【问题描述】:

我正在尝试找到一种方法来仅对当前分支上已更改的降价文件进行 lint。我编写了一个在本地运行良好的 bash 脚本,但在 Github Actions 中中断。

预期结果: 仅对 GitHub Actions on pull-request 中分支上已更改的 markdown 文件进行 lint。

#!/bin/bash
files=`git diff --name-only master`
for x in $files;
do
    if [ $x: -3 == ".md" ]
    then
        node_modules/.bin/markdownlint $x
    fi
done

我在 package.json 中调用脚本

"scripts": 
    "test": "bash mdlint.sh"
  

然后我在 GitHub Actions 工作流程中调用 bash 脚本:

name: CI

on: 
  pull_request:
    branches:
    - master

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v1
      with:
        fetch-depth: 1
    - uses: actions/setup-node@master
    - name: lint all markdownfiles
      run: |
        npm install
        npm run test

这是 GitHub Actions 中的错误:

  shell: /bin/bash -e 0
npm WARN Gatsby_site No repository field.
npm WARN Gatsby_site No license field.

added 33 packages from 26 contributors and audited 43 packages in 0.952s
found 0 vulnerabilities


> @ test /home/runner/work/Gatsby_site/Gatsby_site
> bash mdlint.sh

fatal: ambiguous argument 'master': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

有没有办法让 GitHub 操作仅在当前分支上更改的文件上运行 linter?

【问题讨论】:

【参考方案1】:

我认为您可以通过将 masterorigin master 关联起来来解决它,如下所示:

git fetch origin master:master
git diff --name-only master

请注意,触发 on: pull_request 工作流的事件与分支无关,它们与合并提交 SHA 相关联。所以actions/checkout@v1 默认会签出GITHUB_SHA 指定的合并提交,而不是合并到基础的分支。请参阅documentation here。

您可以覆盖此默认行为并检查合并到基础的分支,如下所示:

      - uses: actions/checkout@master
        with:
          ref: $ github.head_ref 

我不确定您的用例是否需要这样做,但在合并提交上运行 diff 时可能会产生意想不到的影响。

【讨论】:

非常感谢@peterevans,这很好用。我将 bash 脚本中的第一行更改为:files=`(git fetch origin master:master) &amp;&amp; (git diff --name-only master) 以及您在工作流文件中提出的更改。 @peterevans 我不确定我是否理解“actions/checkout@v1 默认情况下将签出GITHUB_SHA 指定的合并提交,而不是合并到基础中的分支” - 那里的功能差异是什么? @RubenMartinezJr。不同之处在于签出的提交 SHA 指的是合并提交,而不是分支的提交 SHA。我认为在大多数情况下(也许全部?)不会有功能差异,因为与基础的 git diff 将是相同的。

以上是关于Github 操作错误;看不到 Master 的 git diff的主要内容,如果未能解决你的问题,请参考以下文章

Github 页面 404 找不到文件

有没有办法通过 GitHub 操作推送更改?

仅当 pr 目标为 master 时才运行 GitHub 操作

git push origin master拒绝错误权限(github)

移动了一个joomla网站,错误:加载错误:找不到error.less和master.less

git 入门