Это настолько распространенный сценарий, что должно быть разумное решение, но, несмотря на страницы чтения и обильную гимнастику Git, у меня болит мозг, и я не могу заставить это работать ...
Я 'Я работаю с Wordpress, хотя это будет соответствовать большинству сценариев разработки сайтов.Я хочу управлять установкой сайта с помощью git-репозитория, а также управлять различными плагинами WP, плагинами jQuery и другими фрагментами кода в отдельных репозиториях, которые можно легко извлечь / извлечь из их внешних источников.Кажется достаточно простым, пока вы не посмотрите на детали ...
Критерии
Критерий "подпапок" Папка для каждого плагина не должна быть привязана к корневой папкеего источник репо.Многие репозитории имеют несколько вложенных папок, таких как «my-repo-name / ...», «dev /», «test /», «src /», где требуется содержимое более поздней версии.Это важно для обеспечения чистоты ссылочных URL-адресов и минимизации общедоступного мусора.
Критерий «без прокси» Идеальное решение не требует дополнительных промежуточных веток или репо.Внесение изменений во внешний источник плагина должно быть простым и не требовать множественных промежуточных слияний / толчков.
Критерий «реальных файлов» В идеале, внешнее репо для всего сайта должно фактически содержать файлы подпунктов плагинов (то есть не иметь «подмодулей»).Я могу быть убежден в этом, хотя ...
Критерий "Публикация" Он должен хорошо работать с rsync и / или git push'ing на живой сервер
Я рассмотрел эти пять решений
Подмодули Git Достаточно прост для внесения изменений и извлечения / извлечения, но подмодули не работают по критериям "Подпапки" и "Реальный файл"
Git read-tree / subtree merge Решает проблему "реальных файлов", а read-tree
фактически позволяет вам ссылаться на подпапку ветви, но когда я это сделал и попытался объединить изменения в основной ветке вверх по течению, Git не удалосьпомнить, что он пришел из подпапки и объединил всю структуру мастера в ветку отслеживания ext libs ... так что НЕУДАЧИ по этому критерию.
Расширение поддерева Apenwarrs (здесь) Отлично подходит для критерия «Реальные файлы» и довольно прост в использовании push / pull, пока вы не захотите применить правило «Подпапки».В лучшем случае кажется, что для этого требуются промежуточные ветви, в которых вы выделяете нужную папку из удаленной ветви отслеживания, а затем добавляете ее в качестве поддерева в основную ветку.У меня не было особой удачи при слиянии / переносе изменений на главном репозитории.Я все еще думаю, что здесь может быть возможность ...
Символические ссылки с внешним репо Отличное решение, пока GIT не перестал следовать символическим ссылкам.Теперь он не работает по критериям «Реальные файлы» и «Публикация»
Вложенные репо Где-то я видел SO-ответ, где, если вы явно git add
папка, которая содержит другое репо и включает конечныйкосая черта, мерзавец не будет субмодулировать его, а вместо этого отслеживать отдельные файлы.Это казалось многообещающим, но не соответствует критерию «Подпапки».
Что дальше?
Я видел ссылки на "редкие проверки" - или, возможно, что-то, связанное с обрезкой ветвей.Я надеюсь избежать решения, которое включает сценарии оболочки или настолько сложное, что требует от меня повторного изучения его каждый раз (нечасто), когда я изменяю плагин.Это должно быть проще, чем поддерживать отдельное репо для каждого плагина и копировать туда и обратно из основной установки CMS.
Конечно, у кого-то есть простой функциональный способ заставить этот общий сценарий разработки работать ??Заранее спасибо за помощь ...