Azure Pipelines: git diff-tree показывает пустую строку

Я пытаюсь получить все зафиксированные файлы в конвейере сборки Azure. Это скрипт yaml, который я использую:

      trigger:
  branches:
    include:
      - swagger_dev
  paths:
    include:
      - swagger_dev/swaggers/*.yaml

variables:
  CLIENT_CREDENTIALS: $(ClientCredentials)

steps:
  - powershell: |
      echo "$(Build.SourceVersion)"
      echo "$(git diff-tree --no-commit-id --diff-filter=d --name-only -r $(Build.SourceVersion))"

Когда я фиксирую один или несколько файлов, конвейер правильно отображает Build.SourceVersion, но затем выводит пустой вывод для команды git:журнал конвейера

Как это возможно? В настоящее время я нахожусь в ветке с именем swagger_dev, а зафиксированные файлы находятся в каталоге swagger_dev/swaggers. Может быть, мне следует добавить эту информацию в команду diff-tree?

2 ответа

Команде git diff-tree требуется как минимум глубина 2, чтобы получить измененные файлы.

Причина проблемы может быть связана с глубиной выборки репозитория Pipeline.

По умолчанию неглубокая выборка конвейерного репозитория по умолчанию равна 1.

Вы можете попробовать установить для fetchDepth значение 0 или >2 в конвейере YAML.

Например:

      steps:
    - checkout: self
      fetchDepth: 0

Или вы можете перейти к YAML Pipeline -> ... -> Triggers -> YAML -> Get sources -> Shallow fetch . Вы можете отменить выбор опции.

Задача bash, которую я использую, — проверить имя файла tfvars.

      - bash: |
              PATH_FILTER="folder1/**/*"
              CHANGED_FILES=$(git diff HEAD HEAD~ --name-only -- `find . -name "*.auto.tfvars"`)
              MATCH_COUNT=0
              MATCH_FILE=""
              FILE_PATH=""
              FILE_NAME=""

              echo "Checking for file changes..."
              for FILE in $CHANGED_FILES
              do
                if [[ $FILE == *$PATH_FILTER* ]]; then
                  MATCH_FILE=${FILE}
                  MATCH_PATH="$(dirname ${FILE})"
                  FILE_NAME="$(basename ${FILE})"
                  echo "MATCH:  ${FILE} changed"
                  MATCH_COUNT=$(($MATCH_COUNT+1))
                else
                  echo "IGNORE: ${FILE} changed"
                fi
              done
Другие вопросы по тегам