Имейте удаленный репозиторий git, откажитесь от коммитов на push

Что я хочу сделать:

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

Объяснение, почему я хочу сделать это:

Примечание. Если это объяснение сбивает вас с пути того, что я хочу сделать, игнорируйте это объяснение. Конечно я'Я рад услышать другие способы решить проблему, которую я объясняю ниже, но ответ яМеня интересует то, что я хочу сделать, как указано выше.

У меня есть центральное хранилище git с веткой, которую отслеживают несколько разработчиков. Каждый разработчик имеет удаленный, настроенный для этого центрального хранилищафилиал.

Мы придерживаемся политики синхронного принятия для этого проекта, поэтому каждый разработчик должен всегда перебрасывать свою последнюю работу поверх удаленной ветки HEAD, прежде чем нажать. Я хотел бы применить эту политику, запретив любые коммиты слияния, которые когда-либо будут отправлены в центральный репозиторий. Единственное исключение, если слияние происходит между ветвями, которые существуют в центральном хранилище.

Чтобы упростить, я не хочу разработчикаЛокальные ветви отслеживания должны быть когда-либо объединены с удаленной веткой. Но лучше всегда быть перебазирован на удаленной ветке.

Мы'мы частично применили это к разработчикуs машина, установив значение branch.NAME.rebase = true, которое помогает избежать проблем, если разработчик использует git pull, однако нам нужно решение для обеспечения этого на стороне центрального хранилища.

Самым базовым решением было бы отказаться от коммитов с комментарием: "Слияние филиалНАЗВАНИЕ' ГИТУРЛ "тем не менее, нечто большее, чем проверка наличия всех родителей коммитов в центральном репозитории »пути с ветвями были бы более интересными.

Предложения? Решения?

Редактировать:

Это то, что я до сих пор:

#!/bin/sh
read sha1old sha1new refname

# check if this is merge commit
merge_commit="`git rev-list --parents --merges --no-walk $sha1new 2> /dev/null`"
if test -n "$merge_commit"
then
  # this was a merge commit
  # $merge_commit contains: sha1new sha1parent_1 ... sha1parent_n
fi
exit 0

Место, где это становится проблематичным, определяет, происходит ли происхождение любых двух родителей от одной ветви. Кроме того, поскольку ловушка предварительного получения вызывается перед обновлением каких-либо ссылок, если push содержит фиксации для двух ветвей, существующих на удаленном компьютере, включая объединение между этими двумя ветвями, то я понятия не имею, какое решение будет здесь. ,

Ответы на вопрос(1)

Ваш ответ на вопрос