svn externals ... да или нет?
Я прочитал несколько ответов здесь, которые осуждают использование svn: externals. Я понимаю, как ими можно злоупотреблять, и это делает нас более зависимыми от Subversion, но я действительно не вижу, чтобы наша группа отошла от этого в ближайшее время.
Во всяком случае, вот моя дилемма. У нас есть Решения, которые ссылаются на несколько проектов, которые находятся в своем собственном разделе хранилища. Многие из этих проектов совместно используются несколькими решениями, и мы также не хотим исключать возможность совместного использования наших проектов. У нас также есть несколько фиксированных зависимостей версий, проверенных в нашем хранилище (фреймворки модульного тестирования, библиотеки и т. Д.).
Я хотел бы настроить несколько "рабочих пространств", в которых используются ТОЛЬКО внешние компоненты (что касается Subversion, они будут просто пустыми каталогами или могут содержать один файл решения) для настройки Решений для наших разработчиков. Проверка большинства проектов сама по себе не будет достаточной для их создания, но проверки его рабочей области будет достаточно для его построения, потому что все его зависимости будут поставляться с ним. Кто-нибудь еще реализовал подобное решение, и будет ли svn: externals хорошим способом сделать это? Какие слова предостережения для меня, если мы пойдем по этому пути?
В основном структура будет выглядеть следующим образом (транк / ветви / теги опущены для краткости):
/projects
/project1
/project2
/dependencies
/xUnit
/1.5
/1.4
/NHibernate
/2.1.0
/2.0.1
/workspaces
/project1
/project1 (external to ^/projects/project1)
/xUnit (external to ^/dependencies/xUnit/1.5)
/NHibernate (external to ^/dependencies/NHibernate/2.0.1)
/project2
/project2 (external to ^/projects/project2)
/xUnit (external to ^/dependencies/xUnit/1.4)
/NHibernate (external to ^/dependencies/NHibernate/2.1.0)
3 ответа
SVN Внешние Злые; Использование Piston или Braid кажется типичным для внешнего лагеря. И у постера есть смысл.
Я думаю, что лучшие критерии это:
- Используйте внешние ссылки для внутренних проектов, которые вы можете изменить; а также
- Используйте ветки поставщиков для внешних репозиториев, которые вы не можете контролировать.
Таким образом, кажется, что проблемы с svn внешними исходят из-за того, что люди используют их в качестве замены для филиалов поставщиков. Я видел несколько людей, жалующихся на них в контексте сторонних плагинов Rails.
Итак, в вашем случае, если предположить, что все эти проекты являются "внутренними", то я думаю, что svn external - это совершенно правильный подход.
Я определенно согласен с предыдущим ответом. Исходя из моего опыта, использование externals является отличным решением для инфраструктурных модулей и "внутренних" библиотек, если вы устанавливаете externals для определенного тега библиотеки, а не для ее ствола.
Я не совсем понял, почему вы хотите использовать рабочее пространство, целиком основанное на внешних элементах, а не на добавлении внешних элементов непосредственно в сам проект. Мой подход заключается в том, что любой проект, который вы создаете в SVN, должен быть "встроенным", когда он был извлечен.
В моем подходе ваш репозиторий должен выглядеть так:
/dependencies
/xUnit
/tags
/1.5
/1.6
/trunk
/NHibernate
/tags
/2.1.0
/2.0.1
/trunk
/projects
/project1
/tags
/1.0
/sources
/xUnit(externals to /dependencies/xUnit/tags/1.5)
/NHibernate(externals to /dependencies/NHibernate/tags/2.0.1)
/trunk
/sources
/xUnit(externals to /dependencies/xUnit/tags/1.6)
/NHibernate(externals to /dependencies/NHibernate/tags/2.0.1)
/project2
/tags
/1.0
/sources
/xUnit(externals to /dependencies/xUnit/tags/1.6)
/NHibernate(externals to /dependencies/NHibernate/tags/2.0.1)
/trunk
/sources
/xUnit(externals to /dependencies/xUnit/tags/1.6)
/NHibernate(externals to /dependencies/NHibernate/tags/2.1.0)
Если твой svn:externals
только ссылки на сторонние библиотеки, почему бы просто не использовать репозиторий Maven/Ivy? Они предназначены для мира Java, и я не знаю их.Net кулонов, но я уверен, что они существуют.
Я использую только svn:externals
делиться файлами Ant antlib, пока они не дадут возможность загрузить их из архива jar.