Лучший способ организовать зависимые проекты?
У меня есть набор проектов, которые зависят от других проектов (можно сказать, утилиты), проблема в том, что каждый раз, когда я изменяю код любой из этих утилит, моим коллегам нужно взять последний код и собрать на своих машинах, чтобы использовать последние сборок. Есть ли хорошее стандартное решение? или просто централизованная библиотека в общей папке?
PS:
Мы используем MS Source Safe 2005, и я не хочу, чтобы мои коллеги каждый раз брали исходный код и собирали его на своих машинах, поскольку им нужны только двоичные файлы, а не код.
3 ответа
Если вы используете Subversion в качестве системы контроля версий, вы можете использовать SVN Externals для этого. Таким образом, они будут автоматически извлекать новые версии ваших утилит, когда они будут выполнять обновление корневой папки там. Вы также можете предоставить им контроль исходного кода только для чтения, чтобы они могли просматривать код утилиты, но они не имеют права вносить изменения.
Мы используем это на работе, и она отлично работает. Но имейте в виду, что иногда вы не хотите обновлять свои утилиты каждый раз, когда вы делаете обновление, так как вы можете что-то сломать, используя новую версию. Это то, что ваша компания должна иметь способ справиться. У нас есть ветки SVN (или теги) для версий служебных программ для мэров, поэтому, если мы что-то изменим, мы создадим новую версию, и тогда людям придется вручную изменить свой внешний SVN, чтобы указать на новую версию, если они того пожелают.
Они действительно нуждаются в утилитах немедленно, в тот момент, когда вы меняете их? Обычно это не так.
Обычно лучше позволить коллегам "извлекать" последний код в следующую удобную точку, когда они объединяются в своих собственных изменениях.
Вы используете систему контроля версий, верно?
Если вы заставляете всех использовать копию на общем сервере, у вас могут возникнуть проблемы с обновлением двоичных файлов во время их использования, или вы можете привести к тому, что некоторые случаи использования приведут к противоречивым результатам.
Если они действительно нуждаются в обновлении в определенный момент (например, утилиты работают, связываясь с какой-то центральной базой данных с помощью схемы, которую вы разрабатываете, поэтому вам нужно обновить все двоичные файлы в тот же момент, когда вы обновляете схему базы данных), тогда я предложил бы превратить утилиты в веб-сервисы. Есть много очень простых способов сделать это. Тогда коллеги могут получить к ним доступ через веб-страницы, если они интерактивные, или через что-то вроде wget
если они автоматизированы из командной строки. Вы можете получить wget для Windows здесь.
Когда у нас есть общие сборки во многих командах, мы продвигаем их в каталог bin, таким образом, другие разработчики могут ссылаться на / использовать обновленные сборки без необходимости повторной сборки из исходного кода.