2012-06-06 5 views
2

У меня есть библиотека на github, и около года назад я полностью переписал приложение, которое не поддерживает обратную совместимость. Он находится на ветке, называемой «структурированной». Теперь большинство людей, которые устанавливают библиотеку, используют эту ветку, и я хотел бы сделать ее мастером и переместить текущего мастера в «наследие».Замена главной ветви в git и предотвращение быстрой перемотки вперед

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

+0

Возможный дубликат [Как заменить главную ветку в git, полностью, из другой ветки?] (Http://stackoverflow.com/questions/2862590/how-to-replace-master-branch-in-git-entirely -from-another-branch) –

+0

Существует одно важное отличие: приложение в этом сообщении может перемотать вперед, а мое не может. – sbaechler

ответ

1

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

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

+0

Спасибо, Дэниел. Думаю, тогда нет другого пути. – sbaechler

0

Невозможно отвлечь их, потому что ветви Git - это просто метки: нет способа сказать, что новая ветка master отличается от старой.

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

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

Еще одна идея - внести поправки в последнее совершение в master, чтобы он не был быстрым переходом от старого master; и сделать это таким образом, чтобы вызвать конфликт. Таким образом, всякий раз, когда кто-то со старым хозяином тянет, они получат конфликт и должны проверить, что происходит.

+0

Ну, пуск проекта небольшой и рос с течением времени. В какой-то момент я решил, что для приложения потребуется значительное изменение дизайна, чтобы продолжить развитие. В этот момент я, вероятно, должен был создать новое репо вместо новой ветки. Becasue Я знал, что я никогда не смогу объединить новую ветку со старой. – sbaechler

+0

@sbaechler: «В этот момент я, вероятно, должен был создать новое репо вместо новой ветки»: как я сказал в своем ответе, ничто не мешает вам это сделать, просто клонируйте репозиторий в новый репозиторий на вашем сервере , удалите старую ветку, если хотите, и все готово. – KurzedMetal

0

Что касается «отбракованных» части вашего вопроса, то вы всегда можете сделать что-то вроде этого, как первый коммит нового хозяина:

#ifndef IMPLEMENTED_STRUCTURED 
#error "The master branch of project x has been completely rewritten and will break legacy applications. If you are unable to update your application, switch to the legacy branch of this project and your code should continue working as before. If you want to use the new structured code, simply add a preprocessor definition for IMPLEMENTED_STRUCTURED to get rid of this error message." 
#endif 

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

Надеюсь, если вы не используете C/C++, ваш язык имеет функциональность, которая может привести к аналогичному поведению.

Смежные вопросы