24 октября 2011 г.

VCS: одна и только одна

Многие сочтут это аксиомой, не требующей упоминания, но я озвучу:
Разрабатываемый проект единовременно должен находиться в единственной системе контроля версий (VCS).
Не должно быть никаких «локальных» версий, «для личного пользования», «для тестов» и т.д. Только одна версия. Казалось бы, ну что такого, если я возьму совместно разрабатываемый код и самостоятельно поведу собственную ветку. Она лично моя, никому больше не нужна, на ней я экспериментирую и отрабатываю идеи. При всей логичности этого подхода, он опасен. Дело, опять же, в человеческом факторе. Не под силу нормальному человеку помнить обо всём.
Исповедуя такой подход, вы рискуете попасть в самостоятельно расставленную ловушку.

Варианты:
  1. Вопрос: Я это сделал. Почему же этого нет в основной ветке? Ответ: Решение забыли синхронизировать из собственной базы в общую. Надо синхронизировать, а это трудоёмко, поскольку утекло немало воды.
  2. Вопрос: Я это сделал. Почему этого нет ни в основной ветке, ни в моей локальной базе? Ответ: Решение забыли перенести в общую базу, а локальную убили. Переделывать.
  3. Вопрос: Что за херня тут понаписана, я совсем не так делал? Ответ: Решение не забыли синхронизировать, но сделали это криво.

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

Но всё же, как поступить, если есть желание замутить очень серьёзный эксперимент, а выкладывать творения рук своих в общий источник нельзя? Да очень просто: в общей базе требуется стандартными средствами создать ветку для экспериментов, которую по завершении удалить, чтобы не работать с ней даже случайно. Тогда код будет можно достать для исследования, а если он пойдёт в основную ветку, то сливаться будет в автоматическом режиме, что значительно снизит вероятность ошибки.
Потому не заводите на своей машине базы VCS. Не храните архив исходников, их вы всегда сможете взять из базы. А сохранение базы в рабочем состоянии уже не ваша головная боль.

1 комментарий:

  1. Вышесказанное не относится к Mercurial, распределенной VCS. Однако направление мысли имеет силу.

    ОтветитьУдалить