Я хочу сделать ловушку, которая, когда кто-то нажимает на удаленный, если они получат сообщение об ошибке abort: push creates new remote head
, ловушка будет пытаться объединить удаленную и локальную головку (при простом слиянии, т.е. без конфликтующих файлов) и pu sh снова.
Как я могу это сделать? Я попытался добавить ловушку на pre-push
, но я не знаю, как получить только головку пульта ha sh для текущей ветки.
Вот то, что я пробовал, хотя он не отполирован.
currbranch=$(hg branch)
hg pull
numheads=$(hg heads --template "." $currbranch)
if test ${#numheads} -gt 1; then
echo "Merge needed."
head1=$(hg heads --template "{node}\n" $currbranch | head -n 1)
head2=$(hg heads --template "{node}\n" $currbranch | tail -n 1)
overlap=$((hg status --change $head1 --no-status ; hg status --change $head2 --no-status) | sort | uniq --repeated)
if [ -z "$overlap" ]; then
echo "Attempting automatic merge..."
hg merge "$head1" # Fails when merging the wrong head
hg merge "$head2" # But how do we know which one is wrong?
hg commit -m "Merge"
echo "Completed."
else
echo "Cannot automatically merge"
exit 1
fi
fi
Чтобы было ясно, то, что впереди не работает, - это слияние обеих голов. Как я могу узнать, какая голова локальная, а какая удаленная?
Кроме того, правильный ли этот хук использовать?