svn externals ... да или нет? - PullRequest
       29

svn externals ... да или нет?

5 голосов
/ 28 октября 2009

Здесь я прочитал несколько ответов, которые осуждают использование 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 ]

8 голосов
/ 28 октября 2009

SVN Внешнее зло; Использование Piston или Braid кажется типичным для внешнего лагеря. И у постера есть смысл.

Я думаю, что лучший критерий:

  • Используйте внешние ссылки для внутренних проектов, которые вы можете изменить; и
  • Используйте ветви поставщиков для внешних репозиториев, которые вы не можете контролировать.

Так что, похоже, проблемы с svn внешними исходят из-за того, что люди используют их в качестве замены для филиалов поставщиков. Я видел, как несколько человек жаловались на них в контексте сторонних плагинов Rails.

Так что в вашем случае, если все эти проекты являются "внутренними", тогда я думаю, что svn external - это совершенно правильный подход.

4 голосов
/ 28 октября 2009

Я определенно согласен с предыдущим ответом. Исходя из моего опыта, использование 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)
0 голосов
/ 28 октября 2009

Если ваши svn:externals ссылаются только на сторонние библиотеки, почему бы просто не использовать репозиторий Maven / Ivy? Они предназначены для мира Java, и я не знаю их .Net кулонов, но я уверен, что они существуют.

Я использую только svn:externals, чтобы делиться файлами Ant antlib, пока они не дадут возможность загрузить их из архива jar.

...