Поставщик переходит в мерзавце

Вы запрашиваете модель данных и SQL-запрос.

Вы можете использовать две таблицы:

  • домен (domain_id, имя)
  • поддомен (subdomain_id, name, domain_id)

с этим запросом :

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;

Или только одна таблица:

  • домен (domain_id, name, parent_domain_id)

с этим запросом:

[111 ]
29
задан Community 23 May 2017 в 10:30
поделиться

2 ответа

1110 Наконец у меня есть несколько часов доступа к сети, прежде чем я возвращаюсь в горы. Посмотрим, смогу ли я внести ясность в вашу ситуацию.

Мое (возможно, слишком упрощенное) понимание состоит в том, что у вас есть (сторонний) поставщик (и), который разрабатывает плагин (ы) для вашего проекта, где ваша (внутренняя) команда разрабатывает код для вашего основного проекта с использованием среды из внешних источников. Поставщик не вносит изменений в ваш код и, вероятно, не нуждается в вашей передовой разработке, но ему нужен ваш стабильный код для разработки и тестирования своей работы. Ваша команда не вносит изменения в платформу, но иногда вносит изменения в плагин.

  1. Как и VonC (который обычно очень тщательно все обдумывает), я не думаю, что Git идеально подходит для ваших требований. И, как и он, я думаю, что использование шаблона слияния поддеревьев является наиболее подходящим вариантом. Я не гуру Git, но мне удалось согнуть Git для самых разных нужд. Возможно, Git не отвечает вашим потребностям:

    • SVN позволит вам иметь несколько репо в одном, что кажется важным для вас. Я думаю, что это будет означать либо использование внешних элементов, либо шаблон Vendor Branch, чтобы приблизиться к тому, что вы хотите.

    • У Mercurial есть расширение, Forest, для использования вложенных репо, которое, кажется, лучше подходит вашей ментальной модели. Я выбрал Git вместо Mercurial 15 месяцев назад, но HG был стабильным и, по-моему, для многих применений сравним с Git. Я не знаю, насколько стабильно расширение.

  2. Если бы я был в вашей ситуации, я бы использовал два репозитория Git - одно для плагина и одно для MainProject. Поставщик будет заниматься разработкой в ​​репозитории плагинов и будет иметь ветку релизов, в которую они будут загружать текущие версии плагина без остальной среды разработки. Эта ветвь будет включена в репозиторий MainProject как ветка поставщика, а затем объединена с вашей основной веткой разработки. Когда ваша команда работает над изменением плагина, они разрабатывают его в функциональной ветви вашей основной ветки разработки и отправляют в репозиторий поставщика в виде исправлений. Это дает вам очень чистый рабочий процесс, относительно простой в настройке и изучении, сохраняя при этом историю разработки отдельно.

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

  3. Если ваша команда действительно активно участвует в разработке плагинов или вы действительно хотите, чтобы история разработки как проекта, так и плагина была интегрирована в одно Git-репозиторий, просто используйте один Git Сделки рЕПО. Вы можете извлечь плагин и его историю для записей вашего поставщика, как время от времени объясняется здесь . Это может дать вам меньше инкапсуляции, чем вы предполагали, но Git не предназначен для инкапсуляции - структура данных Git основана на отслеживании изменений в рамках одного целого проекта.

Возможно, я неправильно понял вашу ситуацию, и ничего из этого не применимо. Если так, я прошу прощения. Спасибо за детали, которые вы и VonC проработали, которые заполнили многие дыры, которые у меня изначально были в попытке понять ваш вопрос.

8
ответ дан Community 28 November 2019 в 01:46
поделиться

Я думаю, что подмодули - это путь, когда дело доходит до «ветви поставщиков».
Вот как вы должны использовать субмод ... хммм, просто шучу.

Просто мысль; Вы хотите:

  • разработать основной проект и подпроект в одном и том же каталоге (который называется « системный подход »: вы разрабатываете, маркируете и объединяете всю систему)
  • или рассматривать ваш подпроект как «ветвь поставщика» (которая является веткой, которая позволяет вам получить доступ к четко определенной версии внешнего компонента поставщика - или «набором файлов»), и которая обновляется только с новой версией каждый выпуск этого внешнего компонента: это называется « компонентный подход », вся система рассматривается как набор отдельных компонентов, разработанных самостоятельно)

Два подхода не совместимы:

  • Первая стратегия совместима с объединением поддеревьев: Вы работаете как над проектом, так и над проектом.
  • Второй используется с подмодулями, но подмодули используются для определения конфигурации (список тегов, с которыми вам нужно работать): каждый подмодуль git, в отличие от svn: externals, прикрепляется к определенному коммиту id, и это то, что позволяет вам определить конфигурацию (как в S C M: «настройка программного обеспечения управление»)

Мне нравится второй подход, потому что в большинстве случаев, когда у вас есть проект и подпроект, их жизненный цикл отличается (они не разрабатываются в одном и том же ритме, не помечены вместе в одно и то же время и не имеют одинакового name).

Что действительно мешает этому подходу («на основе компонентов») в вашем вопросе, так это « Я действительно призываю вас пересмотреть это требование, так как большинство IDE вполне способны работать с несколькими «исходными» каталогами, а разработка подпроекта может быть выполнена в его собственной специализированной среде.


samgoody добавляет:

Представьте себе плагин eMap для Joomla и ModX. И плагин, и специфичный для Joomla код (который является частью Joomla, а не eMap) разрабатываются, когда плагин находится внутри Joomla. Все пути относительны, структура жесткая, и они должны быть распределены вместе - даже если у каждого проекта свой жизненный цикл.

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

Все сводится к проблеме гранулярности: как вы зарегистрировали общедоступный клон URL для субмодуля. Команды

$ gh submodule init
$ gh submodule update

будут тянуть подмодули в текущий репозиторий.

Что касается «они застряли на конкретном коммите»: это вся точка подмодуля, позволяющая вам работать с конфигурацией (список теговых версий компонентов) вместо последнего потенциально нестабильного набора файлов.

samgoody упоминает:

Мне нужно избегать как поддеревьев, так и подмодулей (см. Вопрос), и я бы скорее решил эту проблему, не споря слишком много, если подход оправдан

Ваше требование является совершенно законным, и я не хочу судить о его обоснованности: мои предыдущие ответы приведены только здесь, чтобы представить более широкий контекст и попытаться проиллюстрировать варианты, обычно доступные с помощью общего Инструмент SCM.

Слияние поддерево должно быть ответом здесь, но подразумевает объединение только коммитов, сделанных для файлов основного проекта, а не коммитов, сделанных для подпроектов. Если вам удастся справиться с таким частичным слиянием, я бы сказал, что это правильный путь.

Однако я не вижу нативного способа Git делать то, что вы хотите, который не использует слияние поддеревьев или подмодуль.
Я надеюсь, что настоящий гит Git опубликует здесь более адекватный ответ.

35
ответ дан 28 November 2019 в 01:46
поделиться
Другие вопросы по тегам:

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