Есть ли способ удалить ветку, которая была передана в репозиторий всем разработчикам? - PullRequest
1 голос
/ 31 июля 2011

Я случайно подтолкнул ветку к репо. Можно ли как-нибудь изменить репо (и удалить ветку)? Закрытие не является решением.

Ответы [ 3 ]

1 голос
/ 01 августа 2011

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

Мы удалили (hg strip из расширения MQ) ветку в репо сервера. Отныне, если разработчик пытался выдвинуть, у него появилось сообщение «push создает новые удаленные ветви», хотя они на самом деле не создавали. Мы создали пакетный файл с помощью команды strip, распространили его среди разработчиков и объяснили, что «новые удаленные ветви» являются сигналом для запуска пакетного файла.

Этот подход требует времени и усилий, прежде чем все избавятся от ветви, но он работает.

1 голос
/ 01 августа 2011

У вас есть несколько вариантов, ни один из которых не является легким, и ни один из них не оставит у вас после себя чувство «фу, спасенное звонком».

Единственный настоящий Чтобы решить эту проблему, сначала попытайтесь ее избежать.

Сказав это, давайте рассмотрим варианты здесь:

  1. Искоренить наборы изменений
  2. Ввести дополнительные наборы изменений, которые «отменяют» изменения

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

Если это сервер, к которому у вас нет прямого доступа к репозиториям, только через веб-интерфейс,или через push / pull / clone, тогда вы можете надеяться, что в веб-интерфейсе есть методы для удаления этих наборов изменений, в противном случае перейдите к варианту 2.

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

Либо это хорошо, но лично мне нравится опция клонирования.

Однако эта опция зависит от того, что все разработчики, использующие центральное хранилище, либо:

  1. Еще не вытащил нарушающие наборы изменений из центрального хранилища.
  2. ИлиМы также готовы избавиться от указанных наборов изменений локально.

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

Вот важная часть:

Если вы не можете заставить всех разработчиков помочь с этим, вы должны отказаться от этой мысли и перейти к варианту 2 вместо

Почему?Потому что теперь у вас есть две проблемы:

  1. Вам необходимо ввести барьеры, которые гарантируют, что после того, как вы избавитесь от них, ни один разработчик не сможет снова вставить те же наборы изменений на сервер.Обратите внимание, что полагаться на предупреждение сервера о том, что новые ветви не могут быть добавлены, возможно, недостаточно, поскольку разработчики могут иметь собственные ветви, которые они хотят нажать, и, таким образом, не замечают, что они будут толкатьи ваш.
  2. Любая работа, которую любой разработчик выполнил на основе любой из нарушающих наборов изменений, должна быть либо перенесена на новое место, либо уничтожена.

Короче говоря, это даст вам много дополнительной работы.Я бы не стал этого делать, если бы не обидчивые ревизии были сверхкритичны, чтобы избавиться от них.

Вариант 2, с другой стороны, имеет свои собственные проблемы, но его немного легче выполнить.

В основном вы используете команду hg backout, чтобы ввести новый набор изменений, который отменяет изменения, внесенные нарушающими наборами изменений, и зафиксировать и нажать его.

Проблема здесь в том, что если в какой-то момент вы действительно если вы хотите представить эти наборы изменений, вам придется немного побороться с Mercurial, чтобы сделать слияния правильными.

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

Позвольте мне просто переформулировать эту опцию другими словами:

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

Ни один из вариантов не подходит, оба будут генерировать дополнительную работу.

0 голосов
/ 31 июля 2011

Если опция 'backout', описанная в вышеприведенном комментарии Джейсона, вам не подходит, вы можете переделать репо до момента вашего ошибочного пуша, используя hg convert, который (несмотря на его название) также работает с hg.

например, hg convert -r before-mistaken-push /path/to/original /path/to/new

Возможно, вам придется поиграть с настройками usebranchnames и clonebranches.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...