Монолитные и множественные репозитории Mercurial для модулей в комплекте связанных приложений - PullRequest
9 голосов
/ 16 июля 2011

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

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

  1. Общий код
  2. Код приложения для нашего основного пакета (использует общий код)
  3. Различные небольшие утилиты, которыеподдерживается редко (использует общий код)

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

Я понимаю, что коммиты в Hg являются атомарными в репозиториях - это прекрасно, но я бы хотел иметь возможность разглядывать и фиксировать приложение и общую библиотеку в«в одно и то же время» (т.е. мне все равно, действительно ли это атомарно, но я не хочу вручную делать два отдельных diff-файла и два отдельных действия фиксации).

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

Похоже, что можно выполнять фиксацию одновременно на нескольких кодовых базах (отс точки зрения пользователя) и держите все на переднем крае, единственными двумя решениями являются:

  1. Использование монолитного репо с ВСЕМ в нем.
  2. Создайте несколько подпунктов, но получите доступ / совершитевсе через большой монолитный «основной» репо, который содержит все подпункты, чтобы держать все в последних ревизиях (что не кажется мне лучше, чем (1)).

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

В итоге:

  1. Мы хотели бы организовать наш код так, чтобы мы могли различать и фиксировать код приложения иобщий код в то же время с точки зрения пользователя (они не обязательно должны быть атомарными).
  2. Кажется, что мы должны помещать код приложения и общий код в отдельные репозитории.
  3. Подпозитории связывают родительские репозитории с конкретными ревизиями, которые нам не нужны.

Что мне здесь не хватает?

1 Ответ

1 голос
/ 16 июля 2011

В моем магазине у нас есть много проектов, которые просто находятся в отдельных репозиториях, но в репо основного приложения есть еще 2 проекта.Один - это модуль, который совместно использует основное количество кода с основным приложением, а другой - для миграции баз данных для приложения (даже на другом языке).Я хотел, чтобы связанные изменения как в приложении, так и в миграторе были зафиксированы вместе, неразрывно.В целом, все исходные файлы в этом репо имеют размер от 10 до 11 МБ.

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

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

Если вы передумаете, hg convert может помочь вам извлечь проекты в их собственный репозиторий, ведя историю этих файлов.

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

Однако я не уверен, как бы вы справились с межведомственным доступом, учитывая, что, похоже, не существует установленного подмножества, с которым уже делятсядр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...