Советы по обновлению CVS до git / hg? - PullRequest
2 голосов
/ 11 ноября 2009

Мы все еще используем CVS, я использую git и hg для личного использования, хотя я все еще новичок в обоих, но я понимаю, что они намного более современны и лучше, быстрее, распространяются и т. Д.

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

Кто-нибудь на самом деле делал это в последнее время? Не могли бы вы предложить какие-либо идеи или советы о том, как повлиять на людей, чтобы они использовали git / hg, и просто общие советы по фактическому обновлению / переходу, если это произойдет? Есть ли общие проблемы, о которых мне следует знать в общем?

Ответы [ 4 ]

4 голосов
/ 02 апреля 2012

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

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

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

Одним из самых важных было понятие атомного коммита. Люди не могли обойти стороной тот факт, что изменения были теперь состоянием всего дерева проекта, а не состоянием файла. Поэтому проверка изменений в file A, в то время как в file B были незавершенные изменения, внезапно стала платформой для разглагольствования против системы контроля версий.

  • Waaaaaaa! Почему я должен проверить все файлы в?
  • Waaaaaaa! Почему я не получил изменения, которые я только что вытащил?
  • Waaaaaaa! Что вы имеете в виду, я должен слить? Почему я всегда должен сливаться?
  • Waaaaaaa! Почему он не может просто использовать обычный номер ревизии?

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

Смертельным ударом стало то, что они взяли огромный проект с сотнями разработчиков и около 70 подпроектов и поместили его в один централизованный репозиторий. Это означало, что этот центральный репо получал 1-2 сотни коммитов в день. Все всегда настаивали на каждом коммите (потому что cvs commit == commit; push верно?). Он также получил большие автоматизированные отчеты о сборке и тестировании. Сложите все это вместе, и вы получите то, что вы не можете сделать pull;merge;(no testing);push без необходимости повторного ввода pull;merge, потому что вы устарели. Кто-то что-то толкнул, пока вы ждали, когда закончится большой рывок.

... и поскольку люди не проверяли свои слияния, произошли поломки.

  • Waaaaaaa! Блин, слил это неправильно!

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

Результат .... Они купили Perforce.

Причина: он был заключен с контрактом на поддержку, поэтому был кто-то, кто [обвинял / исправлял], когда что-то пошло не так.

Итак:

  • Просвещать людей о проблемах, которые их вызывает CVS. Обычно это сводится к невозможности определить, какие версии файлов работают вместе без тегов, что требует от всех прекращения работы. Я уверен, что вы можете найти больше.
  • Обучите людей, почему DVCS работают так, как они. Покажите им, что означает сила, что они могут сделать. Заставь их хотеть.
  • Убедитесь, что они знают, что не следует делать!
  • Не просто меняйте системы и заставляйте всех учиться на работе. Это только создает чувство обиды, и все, что они делают, это пытаются делать то, что работало на старой системе. Это не красиво.
  • Не помещайте каждый проект в один репо. Централизованные VCS справляются с этим намного лучше, чем DVCS, и вы будете терять каждый раз.

Если вы можете, добавьте это медленно в проект с небольшим количеством разработчиков. Воспитывать их; настроить его правильно; сделать их евангелистами для остальной части компании. Слухи будут распространяться, и каждый будет нуждаться в этом новом инструменте wunder, потому что «Почему команда Боба получает новые инструменты, когда мы застряли в работе с CVS? Понимаете ли вы все проблемы, которые у нас возникают из-за этого? »

2 голосов
/ 11 ноября 2009

Возможно, этот вопрос StackOverflow (и его ответы) будет полезен:

1 голос
/ 11 ноября 2009

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

EDIT

Поскольку SVN был упомянут здесь - отличное руководство, которое я использовал в нескольких миграциях SVN на Git.

EDIT

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

0 голосов
/ 30 марта 2012

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

Я отвечаю за вывод нашей команды из CVS на Subversion, Mercurial или Git. Опыт вашей команды, ваш проект (ы) и ваши методологии выпуска, вероятно, изменят ваш ответ. Для раскрытия информации моя команда работает над серией небольших Java-проектов и использует IDE Netbeans и Maven для разработки и выпуска программного обеспечения.

Subversion

Да, извините, это немного не по теме, но это определенное обновление с CVS. Это приведет к атомным фиксациям проекта, широкой пользовательской базе и хорошим сообществам tools . Вероятно, это самый простой переход с наименьшим необходимым обучением, но вы определенно не обладаете мощью DVCS. Я рекомендую инструмент cvs2svn .

Mercurial

У Mercurial есть отличная документация, даже для некоторых странных вариантов использования. Это легко раскрутить хранилище. Простота установки (просто используйте Python, setup-tools и 'easy_install mercurial'). Легко конвертировать, и разработчики, которые ненавидят командную строку, получают отличный инструмент TortoiseHg из коробки.

Я нашел инструмент cvs2hg гораздо более точным при конвертации, чем встроенное расширение 'hg convert', но ymmv.

Чтобы научить каждого рту, попробуйте сайт Джоэла: HgInit . Существует множество книг и онлайн-учебных пособий, но привыкнуть к тому, что толкать и тянуть (и как это связано с вашим процессом релиза) будет самой безумной частью. Я лично нахожу эту модель DVCS push / pull предпочтительной, но другие могут не согласиться. Это практически то же самое, что заставлять всех разветвлять каждый кусок, над которым они работают.

При принятии решения о том, следует ли использовать подпункта или просто объединить все это в один большой репозиторий, выберите один репозиторий. Работа с несколькими подпунктами оказалась немного труднее, чем просто иметь один репозиторий со смешанной историей. (Ваш список проектов и то, как они взаимодействуют, сильно повлияют на это решение). Ваши инструменты IDE и GUI помогут преодолеть некоторые из этих странностей. После конвертации пройдитесь по каждой ветке и узнайте, чего ожидать. Переключение на ветку больше не означает, что вы получите несколько измененных файлов. Это означает, что все, что не было разветвлено, не существует.

Гит

Я действительно удивился тому, насколько мне понравился этот инструмент. Интеграция нашей IDE была лучше, инструмент был быстрее, чем hg (по моему опыту), и было проще настроить такие вещи, как ssh-репозитории.

Установка и преобразование и настройка были мишкой. В конце концов я решил, что эта часть стоит больше, чем требуется. Согласно этому вопросу, инструмент 'git cvsimport' не работает в больших проектах CVS. Кроме того, мой инструмент перехода: cvs2svn очень нуждается в помощи для улучшения функциональности Git. После того, как я выяснил весь этот бизнес blob / dump-file-then-import-to-bare-git-repo, я обнаружил, что забыл забрать все мои ветки из CVS. Может быть, я просто никогда не понимал инструменты достаточно хорошо, но самый безопасный путь от CVS к Git, кажется, через SVN.

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


Для размещения http-репозитория посмотрите scm-manager и RhodeCode . RhodeCode сложнее в настройке, но обладает гораздо большей функциональностью. Оба инструмента сложно использовать с подпунктами, так что будьте готовы к этому.

Что касается убеждения вашего босса. Я сделал это, придумав термин «CVS-хирургия». Как и все остальное, следите за тем, сколько времени вы тратите, возвращаясь к CVS и исправляя ошибки фиксации / отката. Затем представьте ваше дело как «У вас сейчас есть X часов моего времени бесплатно, если мы просто перейдем на этот инструмент». Я обнаружил откат к нетегированной фиксации в CVS, фиксации на уровне файлов и трудности, связанные с поиском изменений в ветвях, возникающих при самых больших проблемах с CVS.

...