Хранение сторонних библиотек в рамках проекта Mercurial: суб-репо или нет?
Мы разрабатываем проект с закрытым исходным кодом, с версией Mercurial. Мы используем две библиотеки в нашем проекте:
Одна из этих библиотек разрабатывается сторонней организацией. Они используют git, и мы обычно просто вынимаем их репо раз в неделю, чтобы получать последние изменения.
Другая библиотека разрабатывается нами и активно развивается. Он должен находиться в собственном публичном хранилище Mercurial, так как он лицензирован в соответствии с LGPL. (Это вилка стороннего компонента LGPL, портированного на нашу платформу)
Итак, мой вопрос: как мне организовать источник, чтобы обеспечить:
Разработчик из нашей команды должен иметь возможность получить весь исходный код (основной проект + библиотеки) с помощью одной команды "клон"
Мы должны иметь возможность легко извлекать последние изменения из библиотек, даже если одним из них управляет git
Должны ли мы использовать функциональность mercurial sub-repos с hg-git для доступа к библиотеке в git? Хорошо ли это поддерживается TortoiseHg и BitBucket? (плюсы: легко вытащить изменения библиотеки / минусы: хорошо ли это работает?)
Или мы должны хранить только снимки библиотек нашего проекта? (Таким образом, когда в библиотеках появляются новые изменения в основной ветке разработки, мы переносим их в отдельное место, а затем копируем весь исходный код в наш проект? (Плюсы: будут работать / минусы: боль в заднице, особенно для библиотеки, которая разрабатывается самим, что подвержено множеству ежедневных изменений)
1 ответ
Да, используйте подпункт с hg-git. Это просто, хорошо поддерживается и эффективно. Ваш .hgsubstate
файл будет содержать указатели на снимки вложенных репозиториев, и этот файл будет управляемым, поэтому в любой момент времени вы сможете ответить на вопрос: с какой версией библиотеки X это работало. Это хороший материал.
Кроме того, вы можете использовать менеджер зависимостей, такой как ivy или maven, в зависимости от вашего языка, но не включайте их библиотеки в репозиторий, если вы можете избежать этого. Указатели на версии их кода лучше, и менеджер зависимостей или подпункты являются наиболее чистыми способами сделать это.