Почему подмодули git несовместимы с внешними svn?

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

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

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

Ответ 1

Основное отличие - это правило состава.

В истинном основе на основе компонентов вы определяете конфигурацию

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

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

Подмодуль

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

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

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

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

$ 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.

Ответ 2

Если вы используете SmartGit для работы с SVN-репозиторием с помощью svn: externalls, вы не заметите никакой реальной разницы.

Фактически, единственное реальное различие (по крайней мере, единственное техническое различие) заключается в том, что SVN позволяет внешнему указывать на ревизию HEAD (не фиксированное значение), подмодуль Git нет. Все другие различия, на мой взгляд, несущественны, поэтому вы правильно задаете этот вопрос.