Mercurial: возможно ли сжать папку .hg до нескольких больших BLOB-объектов? - PullRequest
1 голос
/ 18 ноября 2011

Проблема: клонирование ртутного хранилища по сети занимает слишком много времени (~ 12 minutes). Мы подозреваем, что это потому, что каталог .hg содержит много файлов (> 15 000).

У нас также есть git хранилище, которое еще больше, но производительность клонов довольно хорошая - около 1 minute. Похоже, это потому, что папка .git, которая передается по сети, содержит только несколько файлов (обычно < 30).

Вопрос: поддерживает ли Mercurial «сжатие репозитория до одного большого двоичного объекта» и, если да, то как его включить?

Спасибо

UPDATE

Mercurial версия: 1.8.3

Метод доступа: общий ресурс SAMBA (\\server\path\to\repo)

Mercurial установлен на Linux, доступ к которому осуществляется с компьютеров Windows (с помощью входа в домен Windows)

Ответы [ 2 ]

5 голосов
/ 18 ноября 2011

Mercurial использует какое-то сжатие для отправки данных в сеть (см. http://hgbook.red -bean.com / read / behind-the-scenes.html # id358828 ), но с помощью Samba вы полностью обойти этот механизм. Mercurial считает, что удаленный репозиторий находится в локальной файловой системе, и используемый механизм отличается.

В сопроводительной документации четко сказано, что перед отправкой все данные сжимаются целиком:

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

Таким образом, у вас не будет проблем с 15'000 файлами, которые вы используете «реальным» сетевым протоколом.

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

  • проблемы с блокировкой, когда несколько человек пытаются получить доступ к хранилищу одновременно
  • проблемы с файлами
  • проблемы со статистикой файла
  • проблемы с управлением символическими ссылками, если используются

Вы можете найти информацию о публикации репозиториев в вики: PublishingRepositories (где вы можете видеть, что samba вообще не рекомендуется)

И чтобы ответить на вопрос, AFAIK, нет способа сжать метаданные Mercurial или что-то подобное, например, уменьшить количество файлов. Но если хранилище опубликовано правильно, это больше не будет проблемой.

3 голосов
/ 22 ноября 2011

Вы можете сжать его в BLOB-объект, создав пакет:

  • hg bundle --all \\server\therepo.bundle
  • hg clone \\server\therepo.bundle
  • hg log -R therepo.bundle

Вам необходимо периодически заново создавать или обновлять пакет, но создание пакета происходит быстро и может быть выполнено с помощью ловушки после изменения на сервере или ночью.(Поскольку извлечение оставшихся наборов изменений может быть выполнено путем извлечения репозитория после клонирования из комплекта, если вы правильно установили [paths] в .hg / hgrc).

Итак, чтобы ответить на ваш вопрос о нескольких BLOB-объектах, вы можете создатьсвязать все X наборов изменений, и сделать так, чтобы клиенты клонировали / распаковывали каждый из них.(Тем не менее, регулярно обновлять отдельную версию + обычное извлечение оставшихся наборов изменений кажется более легким ...)

Однако, поскольку вы все равно запускаете Linux на сервере, я предлагаю запустить hg-ssh или hg-web.cgi.Это то, что мы делаем, и это хорошо работает для нас.(С клиентами Windows)

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