Есть ли лучшее предложение для веб-проектов управления версиями с небольшими случайными обновлениями в нескольких проектах клиентов с git?
Я хочу использовать git для управления версиями для веб-проектов. Основное отличие почти от всех других предложений заключается в том, что это веб-проект с использованием HTML, JavaScript и некоторых файлов PHP - никаких центральных библиотек, используемых одной или несколькими программами, как обычно в типичных пакетах Linux.
Все мои разные веб-проекты предназначены для разных клиентов на основе одних и тех же файлов платформы, я бы оценил, что 80% файлов идентичны (назовите их платформой), а 20% изменены для разных клиентов, чтобы они соответствовали их потребностям. Проблема здесь в том, что я не знаю, для каких файлов требуется обновление клиента - подробно каждый клиент отличается.
Лучше всего было бы поддерживать файлы определенной платформы в одном каталоге и накладывать эти файлы на определенные пользователем файлы в другой каталог. Чтобы решить эту проблему с помощью git, я пока не нашел ничего хорошего:
- git подмодуль (например, предлагаемый здесь) как правило, предназначенные для того, чтобы источники поставщика разработали библиотеку, близкую к программе, которая связывает ее. Поэтому проблема заключается в том, что файлы платформ и клиентов находятся в разных каталогах, поэтому мне приходится смешивать их во время развертывания, чтобы создавать файлы для веб-сервера. Кроме того, мне нужно вручную синхронизировать деревья каталогов, и это будет очень много работать с 10 иерархиями иерархии каталогов. В целом много сообщений ропщут о больших административных усилиях с использованием подмодулей, похоже, что это перебор.
- git поддерево (например, предлагаемый здесь) кажется, проще, чем подмодуль, но страдает от одной и той же проблемы с разными каталогами, поэтому мне также необходимо синхронизировать структуру dir и смешивать файлы во время развертывания. Кроме того, трудно вернуть изменения платформы из репо клиента.
- GitSlave (например, предлагаемый здесь) Я не уверен, что это может принести мне пользу. Это позволяет сохранять несколько репозиций git в синхронизации, возможно, это помогает синхронизировать структуру dir платформы, но я не могу поверить в это.
- Рефакторинг между файлами платформы и клиента в разных каталогах (например, результат этого обсуждения) Я думаю, что это просто невозможно в случае моих клиентов и технологии, используемой веб-проектами. Для одного клиента этой странице требуется обновление, для другой этой страницы. Даже при введении PHP-структуры пользовательские изменения клиента распространяются по всему дереву.
- Checkouts (например, также предлагаемый в этом обсуждении в последнем сообщении) Это выглядит очень просто и многообещающе с недостатком, что все клиентские файлы находятся вне git (поэтому вне контроля версий). Кроме того, если файл обновляется на платформе и в клиенте, тэг git не работает - он прерывается, поэтому это неприменимо
- Филиалы поставщиков (например, перезапустили здесь) как я узнал, ветки сделаны для того, чтобы быть объединенными назад, и это не предназначено для моих клиентских патчей. Эти ветки всегда будут открыты, только сливаются после обновления с платформы (основной) по отношению к клиенту. И это приведет к мега-освещенной репо, сохраняющей всех клиентов и информацию о платформе, а не git способ обработки репозиториев.
- Смешать во время развертывания. Таким образом, очень прагматичный метод хранения файлов платформы в одном репо и клиентских файлах также в специализированных репозиториях. Во время развертывания файлов на веб-сервере он может сначала записать все файлы платформы и перезаписать некоторые из них файлами определенной платформы. Смесь происходит очень поздно в каталоге веб-серверов. Это также имеет недостаток в том, что структуру каталогов каждого клиента необходимо вручную синхронизировать с структурой платформы - иначе развертывание будет слишком сложным.
Какой лучший подход здесь?