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

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

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

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

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

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

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

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

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

Самым базовым решением было бы отказаться от коммитов с комментарием: «Тем не менее, ветвь слияния« NAME »из GITURL», что-то более подробное, если проверить, существуют ли все родители коммитов в путях ветвления центрального репозитория, и было бы более интересно.

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

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

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

#!/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)

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