VCS и общие библиотеки

DV
На сайте с 01.05.2010
Offline
644
346

В процессе создания ПО наработан некоторый набор функций, использующихся в разных проектах.

С целью актуализации подключаются через инклюд, из одного файла, посредством создания символических ссылок из каждого проекта.

При использовании VCS (в моём случае, Subversion) возникает дилемма: любое обновление оригинального файла с функциями влечёт за собой статус линка "изменён" в каждом из проектов. Если произвести на любом из них откат назад по времени, получится рассогласованность с версией общего файла. Попытка обновления проекта из репозитория до старой версии вызывает перезапись общего файла на более старый во всех проектах.

Хорошо, мы можем принудительно исключить из контроля версий общий файл. Но тогда теряется возможность откатить проект на "те самые позиции" в заданный момент времени. Т.е. проект вернулся в то состояние, однако, библиотеки актуальные на данный момент. В результате, точное соответствие поведения программы на тот момент времени не получается, более того, могут возникнуть непредвиденные результаты.

Тогда, с теми библиотеками программа работала так-то, а теперь, даже в той версии, но с актуальными библиотеками, ведёт себя непредсказуемо.

Что делать?

VDS хостинг ( http://clck.ru/0u97l ) Нет нерешаемых задач ( https://searchengines.guru/ru/forum/806725 ) | Перенос сайтов на Drupal 7 с любых CMS. ( https://searchengines.guru/ru/forum/531842/page6#comment_10504844 )
DV
На сайте с 01.05.2010
Offline
644
#1

Сам себе идеи подкидываю:

Отдельный репозиторий библиотек.

а) Линки, исключённые из контроля версий. При откате проекта рулить вручную и инклюдами, выставляя соответствие версий/дат.

Недостаток: много лишних телодвижений.

б) Рабочие копии VCS библиотек в каждом проекте, синхронизируемые по хуку (как сделать, пока не придумал, Subversion радует нас отсутствием client-side hooks в нативном клиенте, TurtleSVN использовать нецелесообразно, ибо не Windows).

Недостаток, если запилить: основное достоинство — синхронность библиотек и проекта на каждый момент времени. А если я хочу старую версию проекта погонять на новье? Опять вмешательство в логику и бардак.

C
На сайте с 29.07.2014
Offline
8
#2

Чет завернули Вы со структурой. Используйте менеджер зависимостей

Есть ли какой то менеджер зависимостей для используемых технологий в проекте? (а-ля composer для php, bower для js и т.д.). Если есть - то юзайте и будет Вам счастье. Для общих компонентов заводится свой репозиторий под каждый компонент, в менеджере зависимости указывается, какие версии из какого конкретно репозитория юзать для данного проекта.

Так же в гите, например, есть submodules - это как бы возможность синхронизировать определенные каталоги в проекте из других репозиториев. Обновился репозиторий общего компонента, но нельзя чтоб в текущем использовалась новая версия - не обновляйте сабмодуль. Потому что, насколько мне известно submodule в гите не понимает версии.

DV
На сайте с 01.05.2010
Offline
644
#3

Почитал про composer, прикольно. Всё уже придумали, а я собирался велосипедировать — делать загрузчик функций, рассыпаных по отдельным файлам :)

Кстати, я его уже вписал в систему месяц назад. Но это для вытягивания фреймворков. Не знал, что для своей писанины пригодится.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий