Почему подмодули 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 нет. Все другие различия, на мой взгляд, несущественны, поэтому вы правильно задаете этот вопрос.