#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. Я признаю, что в будущем я хотел бы найти способ, который не требует извлечения каждой ссылки в репозитории. Ваш ответ действительно работает и на данный момент решает проблему. Спасибо