如何在 github 操作中运行 git diff

ali*_*ien 2 git github-actions

我得到这个:

Command failed: git diff --name-only HEAD^..HEAD
fatal: ambiguous argument 'HEAD^..HEAD': unknown revision or path not in the working tree.
Run Code Online (Sandbox Code Playgroud)

我想git diff --name-only HEAD^..HEAD在我的分支中运行以获取已更改文件的列表。它在本地工作,但不在 GitHub 操作上。我必须做什么?

我的代码是这样的:

name: build
on:
  push:
    branches:
      - main
jobs:
  run:
    name: Build
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repo
        uses: actions/checkout@v2
      - name: Configure Node.js
        uses: actions/setup-node@v2
        with:
          node-version: 14.x
      - name: Install dependencies
        run: yarn install
      - name: Publish file changes to Slack
        # HERE I run `git diff` in node.js process
        run: "SLACK_TOKEN=${{ secrets.GITHUB_TOKEN }} npx ts-node scripts/publishSlackUpdate"
      - name: Build TOC
        run: make toc
      - name: Commit build changes
        uses: EndBug/add-and-commit@v7
        with:
          author_name: Docs Builder
          author_email: docs@mysite.com
          message: 'Updated build'
          add: '*.md'
Run Code Online (Sandbox Code Playgroud)

vin*_*eet 15

origin/分支名称放在前面对我有用

git diff --name-only origin/main origin/${GITHUB_HEAD_REF}
Run Code Online (Sandbox Code Playgroud)

  • 为了详细说明,我需要针对“main”进行 git diff,为此我仍然需要在结帐时设置“fetch-深度:0”。此外,我需要根据“origin/main”设置差异。我假设拥有所有历史记录,不也包括分支引用吗? (3认同)

lar*_*sks 6

如果您查看actions/checkout@v2操作的文档,您会看到默认情况下它执行带有单个修订的浅层克隆:

    # Number of commits to fetch. 0 indicates all history for all branches and tags.
    # Default: 1
    fetch-depth: ''
Run Code Online (Sandbox Code Playgroud)

因为它只获取一个修订版,所以没有HEAD^.

您可以通过fetch-depth在结帐操作上设置选项来解决此问题。将其设置为0将获取整个历史记录;或者,对于您正在做的事情,您可能只需将其设置为2

    steps:
      - name: Checkout repo
        uses: actions/checkout@v2
        with:
          fetch-depth: 2
Run Code Online (Sandbox Code Playgroud)

  • 那就是“将其设置为 0 将获取整个历史记录” (3认同)
  • @hrdwdmrbl 我为您制作了一个完整的示例[此处](https://github.com/larsks/so-example-hrdwdmrbl)(我获取了 GNU hello 存储库并添加了示例工作流程)。 (2认同)