Несколько систем одновременного контроля версий? - PullRequest
7 голосов
/ 22 августа 2009

Я относительно новичок в управлении версиями, и пока у меня есть только опыт работы с Subversion с использованием TortoiseSVN / VisualSVN. Я читал о других типах VCS (git, mercurial и т. Д.) И собираюсь опробовать их - однако многие аргументы за или против конкретной VCS кажутся в значительной степени сводящимися к субъективным предпочтениям, поэтому я ' Возможно, в конечном итоге я посмотрю на каждого.

Размышляя об этом, мне стало интересно, возможно ли даже теоретически использовать несколько VCS на одной кодовой базе. Для каких (если есть) комбинаций VCS это может быть возможно? И если это возможно, сколько из логистического кошмара будет пытаться совмещать соответствующие списки исключений?

Одним из возможных аргументов для этого может быть резервное резервирование. Несколько поставщиков VCS (Beanstalk, Github, Bitbucket) предлагают один бесплатный репозиторий, поэтому вы можете бесплатно создать одно и то же хранилище в нескольких разных местах.

Ответы [ 6 ]

10 голосов
/ 22 августа 2009

Конечно, это возможно, в некоторых случаях даже банально. Например, git и svn являются естественной парой для этого. Стандартный вариант использования - это организация, которая по разным причинам должна иметь устаревший центральный репозиторий Subversion, но разработчики хотят использовать Git для повышения производительности, которое оно обеспечивает.

Введите git-svn. Теперь разработчики перемещают свои собственные локальные репозитории Git в центральный репозиторий Subversion, но все же получают всю крутую мощь Git. Этот процесс полностью и полностью прозрачен для хранилища Subversion, которое просто видит изменения, которые в него вносятся.

5 голосов
/ 22 августа 2009

Mercurial (с hgsubversion), git (с git-svn) и bzr (bzr-svn) могут синхронизироваться с вышестоящим хранилищем svn.

Так что уже возможно (при условии, что расширения работают достаточно хорошо) взаимодействовать с svn-репозиторием с разными SCM.

1 голос
/ 25 августа 2009

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

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

Но если вы думаете о двух разных VCS, одновременно содержащих ваш центральный репозиторий, это технически возможно, но действительно очень плохая идея. Весь смысл VCS состоит в том, что вы ведете историю всех изменений, внесенных в файлы, что вы можете видеть, какие изменения были внесены, когда и - если пользователи включают в себя наполовину достойные комментарии к коммитам - почему. Если у клиента, имеющего версию от 19 июня 2007 года, возникла проблема, вы можете получить код в точности так, как он существовал 19 июня 2007 года, поэтому вы отлаживаете код, который фактически выполняет пользователь. Если вы обнаружите, что последнее изменение было большой ошибкой, вы можете откатиться назад. И т. Д.

Но если у вас есть два репозитория ... Собираетесь ли вы делать каждый коммит одинаково для обоих репозиториев? По крайней мере, это куча дополнительной работы. В худшем случае, рано или поздно кто-то совершит ошибку, забудет совершить одно или не совершить до следующего дня после того, как кто-то другой сделал промежуточный коммит, и репозитории на самом деле не будут идентичны. Или вы собираетесь чередовать, иногда выходя из A, а иногда из B? Но тогда никто никогда не узнает, что в них есть.

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

1 голос
/ 22 августа 2009

Обычно сложно (но не невозможно) обрабатывать несколько VCS на одной кодовой базе. Однако вы можете столкнуться с проблемами при удалении файлов ... Иногда один VC не поймет, что файл был удален.

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

0 голосов
/ 22 августа 2009

Конечно, это возможно. Я использую git-svn, чтобы обновить свой локальный репозиторий git и зафиксировать корпоративный репозиторий svn. С любым инструментом VCS, который вы решите использовать, проблема, с которой вы, скорее всего, столкнетесь, заключается в обновлении вашего локального репозитория с изменениями из удаленного репозитория.

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

При использовании git-svn для обновления моего локального git-репозитория с изменениями из удаленного svn-репозитория я не испытываю эту «проблему расходящихся репозиториев». Но иногда, когда я делаю «git svn rebase», возникают конфликты, и если не выполнить процедуру для правильного разрешения, вы можете потратить много времени. Поскольку я сталкивался с этим снова и снова, я задокументировал это , и сейчас я не нахожу это таким большим делом.

0 голосов
/ 22 августа 2009

Я знаю, что он не совсем использует несколько VCS, но некоторые VCS могут иметь разные внешние интерфейсы. Git, например, может иметь внешний интерфейс SVN, чтобы клиенты SVN могли использовать репозиторий Git (и они не будут знать, что это Git). Я думаю, что есть и другие внешние интерфейсы для этого.

...