Ртутный скудный контроль
В этом видео о конференции 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, это будет слишком запутанным.
Дополнительная информация:
- Инженерный пост в Facebook
- масштабирование Mercurial Wiki, хотя не полностью в курсе
- просто прибегая к помощи
mercurial facebook
,
я не уверен, что ответы все еще применимы со всеми усилиями, приложенными FB к этому
(Начало 2017 г.) Ответы в связанных вопросах все еще применяются (потому что они иногда обновляются), но учтите, что вам придется прочитать все комментарии и ответы.
remotefilelog, по сути, позволяет по требованию мелкие клоны (так что вы не извлекаете историю за все время), но вы все равно извлекаете необходимые метаданные и проверяете все каталоги репо в нужной ревизии.
Используя Mercurial, могу ли я оформить заказ в подкаталоге (например, в SVN)? Если так, то как?
/questions/36752173/kak-mne-klonirovat-podpapku-repozitoriya-v-mercurial/36752198#36752198 обсуждает, как можно использовать сторонние расширения, чтобы разрешить узкие / редкие проверки (Facebook's sparse.py
) или узкие клоны (Google NarrowHG) с Mercurial, таким образом, только "создавая" один каталог из основного репозитория (хотя и с радикально разными компромиссами).
(Обратите внимание на формулировку: "разреженная проверка" означает очень специфическое действие при обращении к распределенному управлению версиями способом, которого не существует при использовании его для обращения к централизованному управлению версиями)