Fork me on GitHub

The WebDevil

Enjoy development

Многие используют Subversion для хранения ревизий своих проектов. И он действительно сильно помогает при разработке проектов командой а не в одиночку.

Из первоситочника:

Иногда полезно иметь рабочую копию, собранную из разных источников. К примеру, когда нужно чтобы некоторые рабочие подкаталоги соответствовали разным частям вашего или чужого хранилища. Безусловно, всё это можно сделать вручную — с помощью вызовов команды svn checkout создать рабочую копию с нужной структурой. Но, ели подобная структура требуется всем пользователям хранилища, каждому из них нужно будет повторить все эти вызовы.

На практике мне действительно пришлось использовать svn externals.

Если обяснить кратко и на примере, то это будет так: у нас есть проект. В нем кроме присущего проекту кода есть еще набор библиотек, которые общие для всех проектов. Но проект нам нужен как единый продукт, ведь так? Мы можем положить библиотеки в каждый проект, но тогда возникнет очень неудобная ситуация – вдруг понадобилось добавить вот эдакую фичу в эти библиотеки. Править во всех проектах совсем неудобно. Вот и получается что у нас в проекте директория lib (почему бы и нет?) должна при чекауте/экспорте вытягивать из другого репозитория все файлики. Но они не будут храниться вместе с каждым проектом при использовании externals.

Теперь на моем примере.

Есть у меня проект – doxie – и вот в нем есть пример, а есть само ядро. Чтобы их отделить я и воспользовался externals:
На директории с проектом (на корневой директории проекта) я добавил свойство

svn:externals

со значением

Doxie   https://doxie.svn.sourceforge.net/svnroot/doxie/trunk

По этому пути хранится само ядро проекта.
После того как я (каюсь, через GUI – Eclipse+Subclipse) установил это свойство – делаю

svn commit

, потом

svn up

- и зависимость втянулась в дерево проекта в папку Doxie.

Как раз то что и было нужно.

4 Responses to “svn externals howto”

  1. Интересная “рюшечка”.
    А есть ли такая же возможность в CVS?

    Vadim Voituk

  2. Чесслово, не знаю =)

    dm

  3. в cvs есть CVSROOT/modules, в котором прописываются зависимости проекта

    dimcha

  4. спасибо, буду знать!

    dm