У меня проблема с хуком 'update'. В случае новой ветки он получает 0000000000000000000000000000000000000000 как «oldrev». И я не знаю, как справиться с этим делом.
У нас есть требование, чтобы каждое сообщение о фиксации ссылалось на действительную проблему Jira. Поэтому я установил хук обновления в нашем центральном хранилище. Этот хук получает «oldrev» и «newrev». Затем я передаю их в «git rev-list» следующим образом:
git rev-list $ oldrev .. $ newrev
Это дает мне список всех оборотов, которые я затем могу перебрать, и сделать все, что я нужно сделать.
Проблема в том, что когда пользователь нажимает на новую ветвь, ловушка получает 0000000000000000000000000000000000000000 как oldrev. А «git rev-list» просто жалуется:
fatal: Неверный диапазон ревизий 0000000000000000000000000000000000000000 .. 21bac83b2
Итак, как мне получить список всех оборотов этой новой ветви? Я довольно долго искал в сети и ничего не нашел. Хуки-примеры, которые я обнаружил, либо
Ничто из этого не звучит особенно захватывающе.
Так есть ли у кого-нибудь идеи, как получить правильный ответ в этом случае? Я думал о том, чтобы запросить git для «дай мне все обороты, которые доступны из newrev, но не из любой другой ветви (= все ветви, кроме новой)». Но даже это дало бы неправильный ответ, если бы произошло слияние новой ветви с какой-либо из старых.
Термин «правильный ответ» в этом случае несколько неоднозначен. Я вообще-то думаю, что «все обороты доступны из newrev, но нигде больше» совершенно правильно. Это верно, даже если было слияние - в этом случае вы должны увидеть коммиты, уникальные для новой ссылки, и фиксацию слияния, но не коммиты, которые были слиты.
Итак, я бы сказал, проверьте, все ли "oldrev" нули, и если да, действуйте соответственно:
if [ "$oldrev" -eq 0 ]; then
# list everything reachable from newrev but not any heads
git rev-list $(git for-each-ref --format='%(refname)' refs/heads/* | sed 's/^/\^/') "$newrev"
else
git rev-list "$oldrev..$newrev"
fi