2013-05-30 11 views
0

Я работаю над несколькими PHP-проектами. Один - это приложение, другое - библиотека, поддерживающая это приложение. Раньше я использовал меркурийную установку, где библиотека была подрепозитором в репозитории приложений. Это означало, что любые изменения в библиотечном коде были переданы в субрепозиторий и могут быть объединены с проектом библиотеки отдельно (чтобы сохранить историю кода библиотеки отдельно от приложения).Bzr subrepository для библиотеки

Я изо всех сил пытался найти примеры или документы о том, как это сделать с Bazaar (мой текущий DVCS по выбору). Кто-нибудь пытался/сделал это? Стоит ли делать в Bzr, или я должен, возможно, взглянуть на другую систему DVCS, которая лучше всего соответствует этой потребности?

+0

Обновление: похоже, в Bzr есть концепция, называемая «вложенными деревьями», но, насколько я могу судить, она еще не закончена (см. Http://doc.bazaar.canonical.com/ разработчики/вложенным trees.html). Хотелось бы, чтобы кто-то меня поправил (или, альтернативно, порекомендуйте, чтобы Mercurial или Git лучше справлялись с этим прецедентом)! –

ответ

1

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, чтобы вы не получали раздражающих предупреждений.

 Смежные вопросы

  • Нет связанных вопросов^_^