So führen Sie git diff in github-Aktionen aus

Lesezeit: 3 Minuten

Aliens Benutzeravatar
Außerirdischer

Ich bekomme das:

Command failed: git diff --name-only HEAD^..HEAD
fatal: ambiguous argument 'HEAD^..HEAD': unknown revision or path not in the working tree.

Ich möchte rennen git diff --name-only HEAD^..HEAD in meinem Zweig, um eine Liste der Dateien zu erhalten, die geändert wurden. Es funktioniert lokal, aber nicht bei GitHub-Aktionen. Was muss ich tun?

Mein Code ist dieser:

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: [email protected]
          message: 'Updated build'
          add: '*.md'

  • Haben Sie Ihr Repository in Ihrer Aktion überprüft? Es wäre einfacher, Ihnen zu helfen, wenn Sie uns den fehlerhaften Workflow zeigen würden.

    – Lerchen

    28. Januar 2021 um 20:27 Uhr

  • Ich kann dem fehlerhaften Workflow nicht zeigen, dass es sich um ein privates Repo handelt. Nein, ich habe es nicht überprüft, wie mache ich das? Es befindet sich in einem bestimmten Zweig, dem aktuellen PR-Zweig. Aktualisiert mit meiner Konfiguration.

    – Außerirdischer

    28. Januar 2021 um 20:28 Uhr


  • Mit “dem fehlgeschlagenen Workflow” meinte ich die Workflow-Definition, die Sie gepostet haben. Vielen Dank! Es sieht so aus, als hätten Sie das Repository ausgecheckt (über die actions/checkout@v2 Handlung). Mal sehen, ob ich den Fehler reproduzieren kann….

    – Lerchen

    28. Januar 2021 um 20:32 Uhr

Wenn Sie sich die Dokumentation für die Aktionen/Checkout@v2 Aktion, werden Sie sehen, dass standardmäßig ein flacher Klon mit einer einzigen Revision durchgeführt wird:

    # Number of commits to fetch. 0 indicates all history for all branches and tags.
    # Default: 1
    fetch-depth: ''

Da es nur eine einzige Revision abruft, gibt es keine HEAD^.

Sie können dies beheben, indem Sie die fetch-depth Option auf der Checkout-Aktion. Einstellen auf 0 wird die gesamte Historie abrufen; Alternativ könnten Sie es für das, was Sie tun, wahrscheinlich einfach auf einstellen 2:

    steps:
      - name: Checkout repo
        uses: actions/checkout@v2
        with:
          fetch-depth: 2

  • Wie holen Sie das gesamte Github-Repo? Ich möchte etwas anderes tun, wo ich den gesamten Commit-Verlauf inspiziere.

    – Außerirdischer

    29. Januar 2021 um 0:21 Uhr

  • Das wäre “Wenn Sie es auf 0 setzen, wird der gesamte Verlauf abgerufen”

    – Lerchen

    29. Januar 2021 um 1:10 Uhr

  • Ich habe das versucht und es hat nicht funktioniert. Es gibt auch ein Problem, wo sie sagen, dass es nicht möglich ist github.com/actions/checkout/issues/161 🤷‍♂️

    – hrdwdmrbl

    7. Februar 2021 um 2:46 Uhr

  • @hrdwdmrbl es scheint gut zu funktionieren. Ich habe es anprobiert auf einem meiner Repositories und der actions/checkout@v2 Aktion hat den gesamten Repository-Verlauf ausgecheckt.

    – Lerchen

    7. Februar 2021 um 3:31 Uhr

  • @hrdwdmrbl Ich habe dir ein vollständiges Beispiel gemacht hier (Ich habe mir das GNU-Hello-Repository geholt und einen Beispiel-Workflow hinzugefügt).

    – Lerchen

    8. Februar 2021 um 15:50 Uhr

Putten origin/ bevor der Zweigname für mich funktioniert hat

git diff --name-only origin/main origin/${GITHUB_HEAD_REF}

  • Bei mir auch der gleiche Fall. Nicht sicher, warum sie es obligatorisch gemacht haben.

    – C Deepak

    9. Februar 2022 um 13:33 Uhr

  • Um dies näher auszuführen, musste ich diff gegen ‘main’ setzen, wofür ich noch das setzen musste fetch-depth: 0 an der Kasse. Zusätzlich musste ich mein Diff gegen setzen origin/main. Ich gehe davon aus, dass der gesamte Verlauf nicht auch die Zweigrefs enthält?

    – Windgucker

    10. Februar 2022 um 11:19 Uhr

  • In einem Setup hat dies für mich funktioniert. Dann funktionierte es in einem anderen Setup nicht und ich musste es entfernen origin/ aus dem Feature-Zweig. Wirklich bizarr, warum es auch keine Konsistenz gibt.

    – verrückter Stift

    26. Februar 2022 um 3:56 Uhr

Sie können verwenden jitterbit/get-changed-files GA-Aktion:

- id: files
  uses: jitterbit/get-changed-files@v1
- run: |
    for changed_file in ${{ steps.files.outputs.all }}; do
      echo "Do something with this ${changed_file}."
    done

1439830cookie-checkSo führen Sie git diff in github-Aktionen aus

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy