Есть ли способ, чтобы две ветви не слились в git? - PullRequest
6 голосов
/ 31 октября 2010

Я хотел бы иметь возможность хранить две отдельные ветви в репозитории git, которые не могут быть случайно объединены, даже если ветви могут содержать похожее содержимое.

Есть ли способ заставить ветку оставаться отдельной вмерзавец?Это предполагает, что у меня есть ветвь A и ветвь B , что-то вроде git merge B //assuming A is checked out не получится.

Проблема возникла из-за того, что при создании хранилища веб-сайта ямне нужно, чтобы ветка master HEAD всегда была текущим состоянием стабильного веб-сайта.

Любые коммиты разработки, которые мне нужны, выполняются в ветке development с topic ветвями ветки development , если необходимо.

 C1-C2                        master
     \
     C3-C4-C5-C6-C9-C10-C11   development
               \
                C7-C8-C12     topic/HEAD

Мне нужно убедиться, что есть небольшая вероятность случайного слияния между основной ветвью и другими ветвями.

Поэтому я ищу способ сделать шаг "между" слиянием сглавная ветка спросить: "Это слияние будет запущено на сайте, вы уверены, что хотите это сделать?"И только после того, как я подтвердил, что слияние произойдет.

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

Ответы [ 2 ]

5 голосов
/ 16 октября 2012

Обратите внимание, что git merge с автоматической фиксацией не вызовет хук pre-commit.См. «git merge, автоматическая фиксация не запускает ловушку предварительной фиксации »

Слияние вызовов commit_tree напрямую, поэтому стандартные ловушки фиксации игнорируются.

Выполняется исправление .

4 голосов
/ 31 октября 2010

Я полагаю, что единственный способ добиться этого - использовать pre-commit hook .С man-страницы:

Этот хук вызывается git commit, и его можно обойти с помощью опции --no-verify.Он не принимает никаких параметров и вызывается перед получением предложенного сообщения журнала фиксации и выполнением фиксации.Выход из этого сценария с ненулевым статусом приводит к прерыванию git commit.

Итак, если вы действительно этого хотите, вы можете написать ловушку перед фиксацией, которая проверяет текущую ветку и ветку, которую выВы пытаетесь объединиться и выходите с ненулевым статусом, если это пара, которую вы не хотите.На мой взгляд, единственный способ проверить, какую ветку вы пытаетесь объединить, - это проверить файл .git/MERGE_MSG и разобрать первую строку.(Альтернатива, .git/MERGE_HEAD скажет вам, что вы объединяете SHA1, но без записи о том, какая это была ветвь, поэтому, если две ветки находятся в одном месте, вам не повезло.

Хук перед фиксацией, очевидно, не работает для ускоренного слияния, я сомневаюсь, что на самом деле есть какой-то способ защититься от этого, но, по-видимому, если вы предотвратите слияние ветвей, попытка перемотки никогда не будет

...