Действия Github: Git diff master…Фатальный результат: нет базы слияния

#git #github-actions

#git #github-действия

Вопрос:

Некоторый контекст

Короче говоря: я пытаюсь запустить jest --changedSince=master , когда открываю новый запрос на извлечение. Флаг jest changedSince выполняется git diff master...HEAD в фоновом режиме. Это приводит к ошибке, которую я, похоже, не могу понять.

Текущая ситуация

Для отладки у меня есть Github Action шаг, который очень похож на следующий:

 runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - run: |
        git fetch --no-tags --depth=1 origin master
        git checkout -t origin/master
        git checkout pull/1/merge
        git diff master...HEAD
 

Это приводит к следующей ошибке (которая является той же ошибкой, возвращаемой Jest):

 fatal: refs/remotes/origin/master...HEAD: no merge base
 

Что я пробовал

Проблема не возникает, когда я запускаю это локально (представьте себе это). Я понимаю, что самой большой проблемой здесь, скорее всего, является тот факт, что actions/checkout@2 действие не извлекает весь репозиторий. Вот почему я добавил команду git fetch amp; git checkout -t origin/master и pull/1/merge .

Я попытался запустить git branch -a отладку, если это сработало так, как ожидалось, это были результаты:

 * (HEAD detached at pull/1/merge)
  master
  remotes/origin/master
  remotes/pull/1/merge
 

Похоже, что все ссылки, которые требуются для запуска git diff master...HEAD , доступны в действии.

Я также попытался проверить ref , правильно ли возвращено фактическое значение: я запустил git show-ref master внутри действия, которое возвращает:

 <commit-sha> refs/heads/master
<commit-sha> refs/remotes/origin/master
 

У меня нет идей о том, что может вызвать эту проблему, любые идеи приветствуются!

Комментарии:

1. У вас есть отдельная голова. Вот в чем причина. Просто git checkout -b mytestbranch и продолжайте, как и раньше.

2. Похоже, вы пытаетесь сравнить две несвязанные ветви? Как, у них нет общего предка? Возможно, один из них был запущен как сиротская ветвь из другого? В этом случае у git не будет проблем с сравнением с .. , но ... не будет работать, потому что нет общего предка.

Ответ №1:

Если вы хотите изучить историю master и HEAD (например: найти базу слияния для этих двух коммитов), вы не можете ограничить свои действия по клонированию / извлечению мелким клоном — depth=1 по крайней мере, не с помощью.

Попробуйте установить fetch-depth: 0 (или, возможно fetch-depth: 1000 # a high enough number ) в конфигурации вашего action/checkout@v2 (как описано в Readme проекта) и отбросить --depth=1 (или установить для него более высокое значение) при запуске git fetch origin master .


Другим способом может быть получение такой информации через API GitHub вместо запроса локального клона.

Комментарии:

1. Я признаю, что в будущем я хотел бы найти способ, который не требует извлечения каждой ссылки в репозитории. Ваш ответ действительно работает и на данный момент решает проблему. Спасибо