Подтвердить что ты не робот

Git, суб-repos и внешние библиотеки для веб-разработки - лучшая стратегия раз и навсегда?

Это такой распространенный сценарий, что должно быть разумное решение, но, несмотря на страницы чтения и обильной гимнастики Git, мой мозг болит, и я не могу сделать эту работу...

Я работаю с Wordpress, хотя это будет соответствовать большинству сценариев веб-сайта. Я хочу управлять установкой сайта с помощью репозитория Git, а также управлять различными плагинами WP, плагинами jQuery и другими кодовыми битами в отдельных репозиториях, которые можно легко вытащить/вытолкнуть из внешних источников. Кажется достаточно простым, пока вы не посмотрите на детали...

Критерии

Критерий "Подпапки" Папка для каждого плагина не должна привязываться к корневой папке исходного репо. Многие репозитории имеют несколько вложенных папок, таких как "my-repo-name/...", "dev/", "test/", "src/", где требуется содержимое более поздней версии. Это важно, чтобы сохранить ссылки на URL-адреса в чистоте и свести к минимуму общедоступный мусор.

Критерий "Нет Proxys" Идеальное решение не потребует дополнительных промежуточных ветвей или репозиториев. Нажатие изменений в внешний источник плагина должно быть простым и не требовать нескольких промежуточных слияний/нажатий.

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

Критерий "Публикация" Он должен хорошо работать с rsync и/или Git нажатием на живой сервер

Я рассмотрел эти пять решений

Git Субмодули Достаточно просто для внесения изменений и нажатия/вытягивания, но подмодули выходят из строя на критериях "Подпапки" и "Реальный файл"

Git read-tree/subtree merge Решает проблему "Реальные файлы", а read-tree фактически позволяет вам ссылаться на вложенную папку ветки, но когда я это сделал, и попытался объединить изменения на возврате мастера upstream, Git не помнил, что он пришел из подпапки и объединил всю структуру цели в ветвь отслеживания ext libs... поэтому FAIL по этому критерию.

Расширение поддерева Apenwarrs (здесь) Отлично подходит для критерия "Реальные файлы" и довольно просто нажать/вытащить, пока вы не захотите применить правило "Подпапки". В лучшем случае это, похоже, требует промежуточных ветвей, где вы отделяете нужную папку от удаленной ветки отслеживания, а затем добавляете это как поддерево в свою основную ветку. У меня не было большой удачи слияния/нажатия изменений на сервере обратно в исходное репо. Я все еще думаю, что здесь может быть возможность...

Символьные ссылки с внешним репо Отличное решение до тех пор, пока Git не остановится после символических ссылок. Теперь он терпит неудачу в отношении критериев "Реальные файлы" и "Публикация"

Вложенные репозитории Где-то я увидел ответ SO, где, если явным образом git add папка, содержащая другое репо и включающая конечную косую черту, Git НЕ подмодулирует ее, а вместо этого отслеживает отдельные файлы. Это казалось многообещающим, но оно не соответствует критерию "Подпапки".

Что дальше?

Я видел ссылки на "редкую проверку" - или, возможно, что-то, связанное с обрезкой ветвей. Я надеюсь избежать решения, которое включает в себя сценарии оболочки или настолько сложно, что для меня требуется, чтобы я каждый раз изучал его (нечасто), я вношу изменения в плагин. Это должно быть проще, чем поддерживать отдельное репо для каждого плагина и копировать назад и вперед от основной установки CMS.

Несомненно, у кого-то есть простой функциональный способ сделать этот общий сценарий совместной работы? Заранее спасибо за помощь...

4b9b3361

Ответ 1

Очевидно, вы об этом подумали, и я всего лишь новичок в git, но моим первым инстинктом было бы добавить .gitignore в каталог плагинов и иметь каждый плагин с его собственным git repo. Вы можете сделать то же самое для тем. Поэтому я предполагаю, что это скорее вопрос, чем ответ - почему бы не использовать этот простой подход?

Ответ 2

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

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

Repos
    - Utilities
        - Util repo1
        - Util repo2
    - Common
        - Lib repo1
        - Lib repo2
    - Projects
        - Client1
            - Git repo1
            - Git repo2
        - Client2 repo
        - Client3
        ...

У нас возникла проблема с ручным запуском/вытягиванием/фиксацией каждого репозитория, который стал кошмаром.

Итак, мы написали небольшую служебную программу, которая может выполнять операции push, pull, commit, tag, remote diff и diff Git в нескольких папках за раз, а также одновременно создавать несколько файлов решений VS, Он также проверит в подпапках для репозиториев.

Мы используем его в течение некоторого времени, и он отлично подходит для нас. Вы можете проверить это здесь: Gitter.7z

Откройте файл ReadMe.html, чтобы узнать, как его использовать. Надеюсь, что это поможет, дайте мне знать.