SVN вендор филиал
В Красной книге svn, в главе "Ветвь поставщика", предлагается поддерживать текущую / содержащую последнюю версию стороннего продукта, поэтому из примера мы получаем:
repos/vendor/libcomplex/current - contains 1.1
repos/vendor/libcomplex/1.0
repos/vendor/libcomplex/1.1
Какова цель текущего /? Почему нам нужно изначально поместить новую версию в текущую / и только после этого копировать текущую / в каталог, выделенный для версии (например, 1.1)?
Я думаю, это для:
- Чтобы сделать разные версии SVN сопоставимыми.
- Кроме того, версия более эффективно хранится в хранилище SVN.
Могу ли я обойти обработку текущей / в ветке поставщика?
Обновление: я не собираюсь исправлять код поставщика (по крайней мере, это план). Так что я собираюсь использовать svn: external, чтобы использовать соответствующую версию поставщика.
4 ответа
Целью этой схемы управления филиалами поставщиков является размещение выпусков стороннего продукта в вашем хранилище таким образом, чтобы вы устанавливали историю между выпусками. Если вы просто импортируете релиз 1.0 в repos/vendor/libcomplex/1.0
и импортировать релиз 1.1 в repos/vendor/libcomplex/1.1
В Subversion не будет истории между выпусками 1.0 и 1.1, и вы не сможете просматривать изменения между выпуском 1.0 и 1.1 в Subversion. Конечно, вы можете проверить оба и использовать GNU diff для их сравнения, но в этом случае вы не пользуетесь мощью Subversion.
История важна, если вы создаете свою собственную ветку и хотите объединить изменения между 1.0 и 1.1 в свою ветку. История также импортируется, если вы хотите просмотреть изменения в Subversion между выпусками 1.0 и 1.1. Наконец, наличие истории приводит к более эффективному хранению данных, поскольку сохраняется только дельта между 1,0 и 1,1.
Импортируя релиз 1.0 в repos/vendor/libcomplex/current
и затем, добавив выпуск 1.1 в этот же каталог, вы устанавливаете историю между 1.0 и 1.1.
В дополнение к комментариям AlberT, наличие выделенного каталога (текущего) также помогает иметь постоянную ссылку на путь, если ваши сценарии сборки пригодны для ссылки на область, где вы должны видеть последний код поставщика ВСЕГДА.
Это необходимо, потому что с помощью скрипта svn_load_dirs.pl вы уничтожаете содержимое этого каталога и импортируете все как новые.
Нет, вы не можете обойти это, так как это необходимо и полезно.
Дело в том, что в удаленных каталогах и файлах у нового вендора падение по сравнению со старым. Этот скрипт обрабатывает импорт нового поставщика в текущее состояние, а затем удаляет "автоматической рукой" каждый не существующий файл / каталог. Тогда объединяйтесь.
svn_load_dirs.pl
Удаление поставщика, содержащее несколько удалений, дополнений и перемещений, усложняет процесс обновления до каждой последующей версии сторонних данных.
Использование ветки /vendor/current делает ветви /vendor/tag чистыми теневыми копиями.
Я также использовал текущую ветку для очень незначительных выпусков между основными выпусками вендора, где я не вижу необходимости добавлять тег.