Почему подмодули мерзавца являются несовместимыми с svn внешним обликом?

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

Подмодули мерзавца связываются с конкретной фиксацией в репозитории другого проекта, в то время как svn:externals всегда выбирают последний пересмотр.

Почему это различие делает их настолько существенно несовместимыми? Разве там разумным не является значение по умолчанию, которое мы можем принять, такие как это, большинство svn:externals указывает на теги, которые это никогда не перемещает?

13
задан Community 23 May 2017 в 12:34
поделиться

1 ответ

Принципиальным отличием является правило композиции .

В истинном компонентном подходе вы определяете конфигурацию , то есть:
Список меток (коммитов SHA1 для Git), необходимых для того, чтобы ваш проект «работал» (то есть «разработка», «компиляция», «развертывание», ...).

Каждая фиксация, на которую ссылается конфигурация, помогает вам получить точные версии всех деревьев. Нет никаких исключений. Каждый файл этого дерева имеет точную версию, указанную вами в конфигурации.


Примечание для git1.8.2

«git submodule» начал изучать новый режим для интеграции с концом удаленной ветки (в отличие от интеграции с фиксацией, записанной в gitlink суперпроекта).

Вскоре (март 2013 г.) подмодуль мог ссылаться на HEAD восходящего потока, а не только на фиксированный SHA1.


(До 1.8.2) На каждый модуль может быть только одна метка / SHA1.Из одного общего родительского репо вы не можете определить модуль внутри модуля.
(Но модуль, который является просто ссылкой на внешнее репозиторий Git, может иметь собственное определение подмодулей: родительское репо будет ссылаться только на подмодуль первого уровня, который, в свою очередь, будет ссылаться на любые подмодули, которые он зафиксировал внутри себя)


Нет, это не так в SVN external : вы можете определять внешние каталоги, а также внешние файлы, с явной ревизией в нем или без таковой.
Вы можете составить различные внешние свойства. Например:

$ svn propget svn:externals calc
third-party/sounds             http://svn.example.com/repos/sounds
third-party/skins -r148        http://svn.example.com/skinproj
third-party/skins/toolkit -r21 http://svn.example.com/skin-maker

Результатом является не конфигурация (одна ссылка для ' calc '), а композиция правил выбора, которые определяют точное «лоскутное одеяло», которое вам нужно в каталоге ' calc '


Короче говоря, вы не можете «вычислить» один SHA1 для подмодуля' calc ', который был бы точным эквивалентом набора свойств svn: external на каталог SVN ' calc '.

10
ответ дан 2 December 2019 в 00:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: