2013-06-25 4 views
1

У меня есть следующая структура каталогов:Как управлять общими исходными файлами в исходном элементе управления?

enter image description here

CommonUtilities, DataStructure1 и DataStructure2 содержат исходные файлы, используемые одним или несколькими проектами.

Я хотел бы опубликовать один или несколько проектов как с открытым исходным кодом, используя Mercurial и BitBucket. Но я не знаю, как управлять исходными файлами, используемыми одним или несколькими проектами.

Я новичок в управлении версиями и разработке программного обеспечения в целом, поэтому я хотел бы знать лучшие практики в подобной ситуации.

Должен ли я:

  1. Включить общие исходные файлы в нескольких хранилищах в случае необходимости? (то есть hg add их двух или более хранилищ)

  2. Включить общие файлы в какой-то иначе, чем hg add?

  3. Что-то совсем другое?

ответ

3

Вариант 3: Сделайте что-то совершенно другое.

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

+0

Спасибо! Это кажется интересным и выглядит так, как будто это именно то, что мне нужно. Но почему это считается особенностью последней инстанции? Вы в подобной ситуации? Есть ли у вас какие-либо советы о том, что может пойти не так? –

+1

Документация Mercurial предоставляет [список рекомендаций] (http://mercurial.selenic.com/wiki/Subrepository?action=show&redirect=Subrepositories#Recommendations) для использования подпоследовательностей, чтобы избежать проблем. Существует также страница, объясняющая [особенности последнего средства] (http://mercurial.selenic.com/wiki/FeaturesOfLastResort). Я никогда не использовал субрепозитории самостоятельно: я попытался бы решить проблему, выпустив версии: CommonUtilities-0.1, CommonUtilities-0.2, а затем ссылаясь на них на другие мои проекты, даже если они будут только внутренними инструментами. –

2

Вы пытаетесь решить проблему по ошибке. Лучшим способом управления такой ситуацией является инструмент управления зависимостями (см. Maven, Ivy или Gradle).