Bazaar не имеет вспомогательной функции. [Исправление: По-видимому, есть плагин bzr-externals, доступный в lp: bzr-externals, хотя он эмулирует функцию svn: externals, а не подмодули Git или подповерхности Mercurial.]
Однако это довольно легко можно обойти, если вы не хотите переключать системы контроля версий.
Поместите приложение и библиотеку в две папки, скажем app
и lib
(я буду здесь считать, что они бок о бок, хотя они не обязательно должны быть). Следующие два сценария, lib-snapshot
и lib-sync
могут быть использованы, чтобы связать текущую версию приложения для конкретной версии библиотеки, которая будет проверяться в подкаталоге (также называемый lib
) из app
проверки:
Lib-снимок:
#!/bin/sh
libsrc=../lib
bzr revno --tree $libsrc >libversion.txt
Lib-синхронизация:
#!/bin/sh
ver=`cat libversion.txt`
libsrc=../lib
libdst=lib
test -d $libdst/.bzr && bzr update -q -r $ver $libdst || bzr checkout -q --lightweight -r $ver $libsrc $libdst
текущая версия библиотеки хранится в libversion.txt
, что вам нужно поставить под (чтобы каждая версия приложения синхронизировалась с тестируемой версией).
Сценарий lib-snapshot
выберет текущую версию вашей библиотеки и сохранит ее в libversion.txt
. Используйте его всякий раз, когда считаете, что библиотека достаточно стабильна, чтобы приложение использовало новую версию. Сценарий lib-sync
можно затем использовать для обновления подкаталога библиотеки, чтобы он содержал версию моментального снимка; В идеале этот сценарий также должен использоваться как часть процесса сборки/развертывания.
Bazaar автоматически пропускает каталоги, содержащие репозитории при добавлении файлов, но вы можете по-прежнему добавлять подкаталог библиотеки в .bzrignore
, чтобы вы не получали раздражающих предупреждений.
Обновление: похоже, в Bzr есть концепция, называемая «вложенными деревьями», но, насколько я могу судить, она еще не закончена (см. Http://doc.bazaar.canonical.com/ разработчики/вложенным trees.html). Хотелось бы, чтобы кто-то меня поправил (или, альтернативно, порекомендуйте, чтобы Mercurial или Git лучше справлялись с этим прецедентом)! –