Вы запрашиваете модель данных и SQL-запрос.
Вы можете использовать две таблицы:
с этим запросом :
select name
from
(
select name, name as domain_name, 'domain' as type
from domain
union all
select sd.name, d.name as domain_name, 'subdomain' as type
from domain d
join subdomain sd on sd.domain_id = d.domain_id
)
order by domain_name, type, name;
Или только одна таблица:
с этим запросом:
[111 ]
Мое (возможно, слишком упрощенное) понимание состоит в том, что у вас есть (сторонний) поставщик (и), который разрабатывает плагин (ы) для вашего проекта, где ваша (внутренняя) команда разрабатывает код для вашего основного проекта с использованием среды из внешних источников. Поставщик не вносит изменений в ваш код и, вероятно, не нуждается в вашей передовой разработке, но ему нужен ваш стабильный код для разработки и тестирования своей работы. Ваша команда не вносит изменения в платформу, но иногда вносит изменения в плагин.
Как и VonC (который обычно очень тщательно все обдумывает), я не думаю, что Git идеально подходит для ваших требований. И, как и он, я думаю, что использование шаблона слияния поддеревьев является наиболее подходящим вариантом. Я не гуру Git, но мне удалось согнуть Git для самых разных нужд. Возможно, Git не отвечает вашим потребностям:
SVN позволит вам иметь несколько репо в одном, что кажется важным для вас. Я думаю, что это будет означать либо использование внешних элементов, либо шаблон Vendor Branch, чтобы приблизиться к тому, что вы хотите.
У Mercurial есть расширение, Forest, для использования вложенных репо, которое, кажется, лучше подходит вашей ментальной модели. Я выбрал Git вместо Mercurial 15 месяцев назад, но HG был стабильным и, по-моему, для многих применений сравним с Git. Я не знаю, насколько стабильно расширение.
Если бы я был в вашей ситуации, я бы использовал два репозитория Git - одно для плагина и одно для MainProject. Поставщик будет заниматься разработкой в репозитории плагинов и будет иметь ветку релизов, в которую они будут загружать текущие версии плагина без остальной среды разработки. Эта ветвь будет включена в репозиторий MainProject как ветка поставщика, а затем объединена с вашей основной веткой разработки. Когда ваша команда работает над изменением плагина, они разрабатывают его в функциональной ветви вашей основной ветки разработки и отправляют в репозиторий поставщика в виде исправлений. Это дает вам очень чистый рабочий процесс, относительно простой в настройке и изучении, сохраняя при этом историю разработки отдельно.
1116 Я не пытаюсь спорить, а просто хочу сказать, что Git лучше всего подходит для моего понимания вашей ситуации. Самый простой способ настроить это - использовать объединение поддеревьев, но это не приводит к изменениям через него в обоих направлениях, что было моим возражением против использования этого шаблона.
Если ваша команда действительно активно участвует в разработке плагинов или вы действительно хотите, чтобы история разработки как проекта, так и плагина была интегрирована в одно Git-репозиторий, просто используйте один Git Сделки рЕПО. Вы можете извлечь плагин и его историю для записей вашего поставщика, как время от времени объясняется здесь . Это может дать вам меньше инкапсуляции, чем вы предполагали, но Git не предназначен для инкапсуляции - структура данных Git основана на отслеживании изменений в рамках одного целого проекта.
Возможно, я неправильно понял вашу ситуацию, и ничего из этого не применимо. Если так, я прошу прощения. Спасибо за детали, которые вы и VonC проработали, которые заполнили многие дыры, которые у меня изначально были в попытке понять ваш вопрос.
Я думаю, что подмодули - это путь, когда дело доходит до «ветви поставщиков».
Вот как вы должны использовать субмод ... хммм, просто шучу.
Просто мысль; Вы хотите:
Два подхода не совместимы:
Мне нравится второй подход, потому что в большинстве случаев, когда у вас есть проект и подпроект, их жизненный цикл отличается (они не разрабатываются в одном и том же ритме, не помечены вместе в одно и то же время и не имеют одинакового name).
Что действительно мешает этому подходу («на основе компонентов») в вашем вопросе, так это « Я действительно призываю вас пересмотреть это требование, так как большинство IDE вполне способны работать с несколькими «исходными» каталогами, а разработка подпроекта может быть выполнена в его собственной специализированной среде.
samgoody добавляет:
Представьте себе плагин eMap для Joomla и ModX. И плагин, и специфичный для Joomla код (который является частью Joomla, а не eMap) разрабатываются, когда плагин находится внутри Joomla. Все пути относительны, структура жесткая, и они должны быть распределены вместе - даже если у каждого проекта свой жизненный цикл.
Если я правильно понимаю, вы находитесь в конфигурации, в которой находится среда разработки (набор файлов, которые вы работает над) - это то же самое, что и среда распространения (тот же набор файлов копируется на платформу релиза).
Все сводится к проблеме гранулярности: как вы зарегистрировали общедоступный клон URL для субмодуля. Команды
$ gh submodule init
$ gh submodule update
будут тянуть подмодули в текущий репозиторий.
Что касается «они застряли на конкретном коммите»: это вся точка подмодуля, позволяющая вам работать с конфигурацией (список теговых версий компонентов) вместо последнего потенциально нестабильного набора файлов.
samgoody упоминает:
Мне нужно избегать как поддеревьев, так и подмодулей (см. Вопрос), и я бы скорее решил эту проблему, не споря слишком много, если подход оправдан
Ваше требование является совершенно законным, и я не хочу судить о его обоснованности: мои предыдущие ответы приведены только здесь, чтобы представить более широкий контекст и попытаться проиллюстрировать варианты, обычно доступные с помощью общего Инструмент SCM.
Слияние поддерево должно быть ответом здесь, но подразумевает объединение только коммитов, сделанных для файлов основного проекта, а не коммитов, сделанных для подпроектов. Если вам удастся справиться с таким частичным слиянием, я бы сказал, что это правильный путь.
Однако я не вижу нативного способа Git делать то, что вы хотите, который не использует слияние поддеревьев или подмодуль.
Я надеюсь, что настоящий гит Git опубликует здесь более адекватный ответ.