2010-03-19 2 views
11

Мы очень довольны SVN прямо сейчас, но Joel's tutorial заинтриговал меня. Поэтому мне было интересно - это было бы возможно и в нашей ситуации?Управление распределенной версией для ОГРОМНЫХ проектов - возможно ли это?

Дело в том, что наш SVN-репозиторий ОГРОМНЫЙ. Само программное обеспечение имеет 15-летнее наследие и уже пережило несколько различных систем управления версиями. Есть более 68 000 ревизий (наборов изменений), сам источник занимает более 100 МБ, и я даже не могу угадать, сколько Гбайт потребляет весь репозиторий.

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

Как работает Mercurial (или любой другой распределенный контроль версий)? Или они непригодны для таких огромных проектов?

Добавлено: Чтобы уточнить - все это один монолитный зверь проекта, который компилируется в один .EXE и не может быть разделен.

Добавлено 2: Вторая мысль. Репозиторий ядра Linux использует git и, вероятно, на порядок или два больше, чем у меня. Итак, как они работают?

+0

Имейте в виду, что большинство VCS используют жесткие ссылки, когда это возможно, поэтому клон не займет много места на диске –

+0

Пока вы клонируете на локальном компьютере - обязательно. Но как насчет клона с центрального сервера, когда вы настраиваете следующую машину? –

+6

Прототип (попробуйте импортировать SVN в git или mercurial), измерить, увидеть себя. Может быть, это сработает для вас, может быть, и не будет. –

ответ

10

100 МБ исходного кода меньше, чем ядро ​​Linux. Список изменений между ядром 2.6.33 и 2.6.34-rc1 для Linux имеет 6604 фиксации. Шкала репозитория не кажется мне пугающей.

  • Linux ядро ​​2.6.34-RC1 несжатый из .tar.bz2 архива: 445MB
  • Linux ядра 2,6 головки извлечена из основного Linus дерева: 827MB

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

+0

Действительно, это была моя вторая мысль. Итак, как это работает? Весь репозиторий ядра Linux должен быть на порядок больше. Неужели люди действительно загружают ВСЕ, чтобы начать взлом? –

+0

Да, ядро ​​Linux - это зверь, и это занимает намного меньше, чем концерт. Единственной проблемой было бы первоначальное преобразование, поскольку это займет много времени, но тогда это будет легкий ветерок. – moatPylon

+2

@Vilx: Linux использует Git, который, в свою очередь, использует сжатие и diff для хранения. Гит очень хорошо избегает потраченного впустую пространства. – moatPylon

1

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

+0

Нет, все это один огромный проект, который компилируется в один .EXE. Да, это монолитный зверь. –

-2

Нет, не работает. Тогда вы не хотите ничего, что требовало бы значительного хранения на стороне клиента. Если вы приобретете это большое (путем просмотра изображений rexample и т. Д.), Хранилище требует больше, чем обычная рабочая станция, в любом случае, чтобы быть эффективной.

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

+0

Вот что я волновался. Затем снова - я знаю, что в разработке ядра Linux используется GIT, потому что другие vcs просто не масштабируются. Интересно, как оно там. –

+0

Я бы поставил под сомнение это: большинство рабочих станций идут с большими жесткими дисками - linux repo - 800 МБ, вам будет трудно получить больше, чем это, и это арахис на новом жестком диске. – Paddy

+0

Ну, linux не масштабируется, но у linus есть некоторые ДЕЙСТВИТЕЛЬНО смешные требования, такие как очень распределенная команда для начала. Кроме того, 800mb - это не совсем большой архив. – TomTom

2

Вам нужна вся история? Если вам нужен только последний год или два, вы можете оставить оставшийся репозиторий в состоянии только для чтения для справки по истории. Затем создайте новый репозиторий с только недавней историей, выполнив svnadmin dump с пересмотром нижней границы, который формирует основу для вашего нового распределенного хранилища.

Я согласен с другим ответом, что рабочая копия 100MB и ревизии 68K не так велики. Дать ему шанс.

+0

В кодовой базе, на которой я работаю, да, вам нужна вся история (и у меня ее нет), первый SVN-коммит был «Начальный код» - большой дамп кода), если вы хотите узнать, почему конкретная строка кода такая, как есть. Разумеется, зависит от вашего оттока кода. Мне редко приходится видеть последнюю дельта, которая влияет на строку - обычно только тогда, когда изменилось только пустое пространство. –

1

Я использую git на довольно большом проекте C# /. Net (68 проектов в 1 решении), а след TFS от новой коллекции полного дерева составляет ~ 500 МБ.Репозиторий git, хранящий справедливое количество локаций, весит около 800 Мб. Уплотнение и то, как хранилище работает внутри git, отлично. Удивительно видеть так много изменений, упакованных в такое небольшое пространство.

2

Вы говорите, что вы довольны SVN ... так зачем менять?

Что касается распределенных систем управления версиями, то Linux использует git, а Sun - Mercurial. Оба являются впечатляюще большими репозиториями исходного кода, и они отлично работают. Да, вы получаете все изменения на всех рабочих станциях, но это цена, которую вы платите за децентрализацию. Помните, что хранение дешево - мой ноутбук для разработки в настоящее время имеет 1 ТБ (2x500 ГБ) на жестком диске на борту. Вы тестировали вытягивание своего SVN-репо во что-то вроде Git или Mercurial, на самом деле см., сколько места займет?

Мой вопрос будет - готовы ли вы как организация децентрализоваться? Для магазина программного обеспечения обычно имеет смысл хранить центральный репозиторий (регулярное резервное копирование, подключение к CruiseControl или FishEye, более легкое управление и администрирование).

И если вы просто хотите что-то более быстрое или более масштабируемое, чем SVN, то просто купите коммерческий продукт - я использовал как Perforce, так и Rational ClearCase, и они без проблем справляются с огромными проектами.

+1

Конечно, мы не готовы. Я не знаю, будем ли мы когда-либо. Мне просто интересно. :) –

13

Управление распределенной версией для ОГРОМНЫХ проектов - возможно ли это?

Абсолютно! Как вы знаете, Linux массивный и использует Git. Mercurial is used for some major projects тоже, такие как Python, Mozilla, OpenSolaris и Java.

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

Да. И если вы сейчас довольны Subversion, вы, вероятно, не делаете много разветвления и слияния!

Дело в том, что наш SVN-репозиторий ОГРОМНЫЙ. [...] Есть более 68 000 ревизий (изменений), сам источник занимает более 100 МБ

Как уже отмечалось, на самом деле это не так много по сравнению со многими существующими проектами.

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

Как Git, так и Mercurial очень эффективны при управлении хранилищем, а их хранилища занимают гораздо меньше места, чем эквивалентное репо Subversion (преобразованное несколько). И как только у вас будет первоначальная проверка, вы просто нажимаете дельтами вокруг, что составляет очень быстро. В большинстве операций они значительно быстрее. Первоначальный клон - это разовая стоимость, поэтому на самом деле не имеет значения, сколько времени потребуется (и я уверен, вы были бы удивлены!).

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

Место на диске дешево. Производительность разработчиков имеет гораздо большее значение. Так что, если репо занимает 1 ГБ? Если вы можете работать умнее, это того стоит.

Как работает Mercurial (или любой другой распределенный контроль версий)? Или они непригодны для таких огромных проектов?

Возможно, стоит ознакомиться с тем, как projects using Mercurial, например Mozilla, управляет процессом преобразования. Большинство из них имеют несколько репозиториев, каждая из которых содержит основные компоненты. Mercurial и Git поддерживают поддержку вложенных репозиториев. И есть инструменты для управления процессом преобразования - Mercurial has built-in support for importing from most other systems.

Добавлено: Чтобы уточнить - все это один монолитный зверь проекта, который компилируется в один .EXE и не может быть разделен.

Это делает его легче , как вам нужно только одно хранилище.

Добавлено 2: Вторая мысль. Репозиторий ядра Linux использует git и, вероятно, на порядок или два больше, чем у меня. Итак, как они работают?

Git предназначен для сырой скорости. Формат на диске, проводной протокол, алгоритмы в памяти полностью оптимизированы. И они разработали сложные рабочие процессы, где исправления распространяются от отдельных разработчиков, вплоть до подсистемы, до лейтенантов, и в конечном итоге до Linus. Одна из лучших вещей в DVCS заключается в том, что они настолько гибкие, что позволяют использовать всевозможные рабочие процессы.

Предлагаю вам прочитать excellent book on Mercurial от Bryan O'Sullivan, который поможет вам быстро подняться. Загрузите Mercurial и поработайте с примерами, и поиграйте с ним в каких-то царапинах, чтобы почувствовать это.

Затем запустите команду convert, чтобы импортировать существующий репозиторий источника. Затем попробуйте сделать некоторые локальные изменения, зафиксировать, разветвить, просмотреть журналы, использовать встроенный веб-сервер и т. Д. Затем клонируйте его в другой блок и нажмите некоторые изменения. Время наиболее распространенных операций и посмотреть, как он сравнивается. Вы можете сделать полную оценку бесплатно, но некоторое время.

+1

Хммм ... Полагаю, я мог бы попробовать попробовать свою локальную машину. Хех, ирония! : D –

+1

Самое большое (открытое) hg-репо, которое я знаю, это netbeans: http://hg.netbeans.org/main/ (160 тыс. Оборотов, рабочий каталог> 100 МБ, я не знаю точное число). Есть пара людей, у которых огромный конвертированный репо, но он не является публичным. – tonfa

0

Из моего опыта, Mercurial неплохо справляется с большим количеством файлов и огромной историей. Недостатком является то, что вы не должны регистрировать файлы размером более 10 Мб. Мы использовали Mercurial для хранения истории скомпилированной DLL. Не рекомендуется помещать двоичные файлы в исходный счетчик, но мы все равно пытались (это был репозиторий, посвященный двоичным файлам). Репозиторий был около 2 Gig, и мы не слишком уверены, что мы сможем продолжать делать это в будущем. Во всяком случае, для исходного кода я не думаю, что вам нужно беспокоиться.

+1

Вы можете поместить файлы любого размера в репозиторий Mercurial - это все равно. Это правда, что он предупреждает вас, когда вы добавляете файл размером более 10 МБ. Это связано с тем, что большинство исходных файлов значительно ниже этого предела, поэтому добавление большего файла может означать ошибку, например добавление tarball вместо распакованного каталога ('hg add foo.tar.gz' вместо' hg add foo/') , Проблема с большими файлами заключается в том, что при клонировании потребляется полоса пропускания и дисковое пространство. При слиянии они также потребляют * память *, возможно, в 3 раза больше, чем размер файла. –

0

Git, очевидно, может работать с проектом размером с ваш, поскольку, как вы указали, ядро ​​Linux больше.

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

У меня есть опыт перемещения проекта вашего размера (и вокруг в течение 15 лет) из CVS/SVN (сочетание двух фактически) в Пластик SCM для распределенных и централизованных (два рабочих процесса, происходящих внутри одной организации на в то же время).

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

2

Не беспокойтесь о требованиях к пространству хранилища. Мой анекдот: когда я преобразовал нашу кодовую базу из SVN в git (полная история - я думаю), я обнаружил, что клон использовал меньше места, чем только рабочий каталог WVN. SVN хранит нетронутую копию всех извлеченных файлов: посмотрите на PWD/.svn/text-base/в любой SVN-кассе. С git вся история занимает меньше места.

Что меня действительно удивило, так это то, насколько эффективна сеть. Я сделал git-клон проекта в хорошо связанном месте, а затем отвел его домой на флеш-диск, где я держу его в курсе git fetch/git pull, с моим небольшим небольшим GPRS-соединением. Я бы не рискнул сделать то же самое в SVN-контролируемом проекте.

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

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