Ртутный скудный контроль

В этом видео о конференции F8 (начиная с 8:40) 2015 года они рассказывают о преимуществах использования Mercurial и единого репозитория в Facebook.

Как это работает на практике? Используя Mercurial, могу ли я оформить заказ в подкаталоге (жить в SVN)? Если так, то как? Нужно ли для этого расширение на Facebook?

PS: Я нашел такие ответы только в 2010 году на SO, где я не уверен, что ответы все еще применимы со всеми усилиями, которые FB приложил к этому.

2 ответа

Решение

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

Для рабочего процесса я предлагаю поискать в Google monorepo, У него есть свои плюсы и минусы, вам нужно понять свою ситуацию и текущий рабочий процесс, чтобы принять решение. Для производительности и масштабирования, продолжайте читать.

Идея remotefilelog не извлекать из подкаталога (как вы упоминаете), идея состоит в том, чтобы оформить все. Для того, чтобы сделать это эффективно, вам нужны два расширения, активно разработанные Facebook:

  • remotefilelog. Это дает вам нечто концептуально похожее на мелкий клон. Это уменьшает hg clone а также hg pull время.
  • fsmonitor (ранее назывался hgwatchmanтеперь это часть ртутного ядра). Это значительно сокращает время локальных операций, таких как hg status, Обратите внимание, что fsmonitor не зависит от remotefilelog, Вы можете начать экспериментировать с этим, так как он не требует никаких настроек на стороне сервера.

С недавним Mercurial (который я настоятельно рекомендую) вы можете сократить дополнительное время запуска интерпретатора Python, используя CommandServer + CHg.

Некоторые дополнительные заметки:

  • Я тщательно проверял fsmonitor, Это работает очень хорошо, на огромных репо время hg status уменьшается с 10 секунд до менее 1 секунды (и большую часть этой 1 секунды составляет время запуска Python, см. выше для CHg). Если ваш репозиторий действительно огромный, вам может потребоваться точная настройка некоторых параметров ядра inotify (или аналога в MacOSX). fsmonitor В документации есть вся необходимая информация.
  • Я не тестировал remotefilelog, хотя я прочитал все, что я нашел об этом, и я уверен, что это работает. В зависимости от того, как ведется разработка (у всех есть подключение к Интернету или нет, у организации есть собственный репо или нет), может возникнуть оговорка: она частично трансформирует децентрализованное hg в централизованный VCS, как svn: некоторые операции, которые обычно можно выполнять в автономном режиме (например: hg log и первый hg update для изменения в прошлом) теперь потребуется подключение к главному хранилищу.
  • Прежде чем рассмотреть remotefilelogЯ широко использовал largefiles расширение на огромный репо. Имеет те же недостатки, что и remotefilelog и некоторые запутанные угловые случаи для пользователей, которые хотят использовать hg просто чтобы сделать вещи, не тратя время, чтобы понять, как это работает. Если бы мне пришлось управлять еще одним огромным репо, я бы использовал remotefilelog вместо largefiles, хотя их вариант использования не совсем то же самое.
  • Mercurial также поддерживает subrepositories ( док1, док2). Проблема в том, что он меняет поведение hg в зависимости от того, где вы находитесь в исходном дереве. Опять же, если разработчики не заботятся о том, чтобы действительно понять, как работает hg, это будет слишком запутанным.

Дополнительная информация:

я не уверен, что ответы все еще применимы со всеми усилиями, приложенными FB к этому

(Начало 2017 г.) Ответы в связанных вопросах все еще применяются (потому что они иногда обновляются), но учтите, что вам придется прочитать все комментарии и ответы.

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

Используя Mercurial, могу ли я оформить заказ в подкаталоге (например, в SVN)? Если так, то как?

/questions/36752173/kak-mne-klonirovat-podpapku-repozitoriya-v-mercurial/36752198#36752198 обсуждает, как можно использовать сторонние расширения, чтобы разрешить узкие / редкие проверки (Facebook's sparse.py) или узкие клоны (Google NarrowHG) с Mercurial, таким образом, только "создавая" один каталог из основного репозитория (хотя и с радикально разными компромиссами).

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

Другие вопросы по тегам