Cómo ejecutar git diff en acciones de github

3 minutos de lectura

avatar de usuario de alienígena
extraterrestre

Estoy recibiendo esto:

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

quiero correr git diff --name-only HEAD^..HEAD en mi sucursal para obtener una lista de los archivos que se cambiaron. Funciona localmente pero no en acciones de GitHub. ¿Que debo hacer?

Mi código es este:

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'

  • ¿Revisaste tu repositorio en tu acción? Sería más fácil ayudarlo si nos mostrara el flujo de trabajo que falla.

    – alondras

    28 de enero de 2021 a las 20:27

  • No puedo mostrar el flujo de trabajo fallido, es un repositorio privado. No, no lo comprobé, ¿cómo hago eso? Está en una sucursal específica, la sucursal actual de PR. Actualizado con mi configuración.

    – extraterrestre

    28 de enero de 2021 a las 20:28


  • Por “el flujo de trabajo fallido”, me refiero a la definición del flujo de trabajo, que ha publicado. ¡Gracias! Parece que revisaste el repositorio (a través de la actions/checkout@v2 acción). A ver si puedo reproducir el fallo….

    – alondras

    28 de enero de 2021 a las 20:32

Si echa un vistazo a la documentación de la acciones/pago@v2 acción, verá que realiza una clonación superficial con una sola revisión de forma predeterminada:

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

Debido a que solo obtiene una sola revisión, no hay HEAD^.

Puede solucionar esto configurando el fetch-depth opción en la acción de pago. Configurándolo en 0 obtendrá el historial completo; alternativamente, para lo que está haciendo, probablemente podría simplemente configurarlo para 2:

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

  • ¿Cómo obtienes todo el repositorio de github? Quiero hacer otra cosa donde inspeccione todo el historial de confirmación.

    – extraterrestre

    29 de enero de 2021 a las 0:21

  • Eso sería “Configurarlo en 0 obtendrá el historial completo”

    – alondras

    29 de enero de 2021 a las 1:10

  • Intenté esto y no funcionó. También hay un problema donde dicen que no es posible github.com/actions/checkout/issues/161 🤷‍♂️

    – hrdwdmrbl

    7 de febrero de 2021 a las 2:46

  • @hrdwdmrbl parece funcionar bien. lo probé en uno de mis repositorios y el actions/checkout@v2 La acción revisó todo el historial del repositorio.

    – alondras

    7 de febrero de 2021 a las 3:31

  • @hrdwdmrbl te hice un ejemplo completo aquí (Tomé el repositorio de GNU hello y agregué un flujo de trabajo de ejemplo).

    – alondras

    8 febrero 2021 a las 15:50

Poniendo origin/ antes de que el nombre de la sucursal funcionara para mí

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

  • El mismo caso conmigo también. No estoy seguro de por qué lo han hecho obligatorio.

    – C Deepak

    9 de febrero a las 13:33

  • Para elaborar, necesitaba git diff contra ‘main’, para lo cual aún necesitaba establecer el fetch-depth: 0 en caja Además, necesitaba establecer mi diferencia contra origin/main. Supongo que tener todo el historial, ¿no incluye también las referencias de la rama?

    – Contemplavientos

    10 de febrero a las 11:19

  • En una configuración, esto funcionó para mí. Luego, en otra configuración, no funcionó y tuve que eliminar origin/ de la rama de características. Realmente extraño por qué tampoco hay consistencia.

    – pluma loca

    26 de febrero a las 3:56

Puedes usar jitterbit/get-changed-files Acción de la Asamblea General:

- 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

¿Ha sido útil esta solución?