У меня есть собственная библиотека кода, которую я хотел бы сделать доступной для моей среды разработки.Идея заключалась в том, что в любом проекте разработки я могу по желанию обновить или понизить мою библиотеку.
Композитор казался идеальным инструментом для этого, но я обнаружил, что мне приходится бороться с этим инструментом, чтобы достичьчто я хочу.
Чего я хочу добиться:
- , чтобы моя библиотека была независимой от каждого приложения.
- вставьте мою библиотеку в приложение, имея возможность выбрать версию по желанию
- использовать Git Flow (Develop / Feature / Hotfix / Master) для отслеживания версий приложения
- подтолкнуть основную ветвь приложения к производству (используя ловушку для проверки мастера)
Последний пункт важен: все, что зафиксировано в мастере, является ОФИЦИАЛЬНЫМ КОДОМ ПРОИЗВОДСТВА.Когда я отправляю его на рабочий сервер, производственный код - это ТОЧНО то, что передается в master.
Очевидно, что Composer не разделяет эту мысль, потому что они настаивают на том, что вы НЕ должны фиксировать что-либо в / vendor.Это означает, что вам, очевидно, придется запускать composer на вашем производственном сервере. Это не вариант для меня сейчас из-за ограничений компании .
Поэтому проблема, с которой я сталкиваюсь, заключается в том, что композитор автоматически клонирует папку .git смоя библиотека.Это не позволяет git моего приложения видеть эту папку.
Документация Composer гласит:
Если вы действительно чувствуете, что должны это сделать, у вас есть несколько вариантов:
- Ограничьте себя установкой отмеченных выпусков(без версий dev), так что вы можете получить только zip-инсталляции и избежать проблем с git "submodules".
- Используйте --prefer-dist или установите предпочитаемый-install для dist в вашей конфигурации.
- Удалите каталог .git всех зависимостей после установки, затем вы можете добавить их в ваш репозиторий git.Вы можете сделать это с помощью
rm -rf vendor/**/.git
в ZSH или find vendor/ -type d -name ".git" -exec rm -rf {} \;
в Bash.но это означает, что вам придется удалить эти зависимости с диска перед запуском обновления композитора. - Добавьте правило .gitignore (
/vendor/**/.git
), чтобы игнорировать все папки .git производителя.Этот подход не требует удаления зависимостей с диска перед запуском обновления композитора.
Пока что единственное, что сработало для меня, это вариант 3, удалить вручную .git
папка.Это хорошо, за исключением того, что я волнуюсь, что когда-нибудь в 2:00, когда я немного сонный, что произойдет, если я удалю неправильный .git
... Yikes!
Что я пробовал:
.gitignore, совершено (последние две записи просто в отчаянии)
/vendor/**/.git
/vendor/**/.git/**
vendor/**/.git
composer.json
{
"name": "crud-package/project-name",
"description": "Loading just CRUD package",
"require": {
"crud/core":"^1.3.1"
},
"repositories": [
{
"type":"vcs",
"url":"//path/to/composer_projects/crud"
}
],
"autoload": {
"classmap": [
"vendor/crud/core"
]
},
"config": {
"preferred-install": "dist"
}
}
Затем установка с помощью
$ cmd //c composer update --prefer-dist
Loading composer repositorUpdating dependencies (including require-dev) Package operations: 1 install, 0 updates, 0 removals
- Installing crud/core (v1.3.2): Cloning b734c2dfb6 from cache
Writing lock file
Generating autoload files
Я что-то упускаю из виду, почему единственное, что работает, это # 3?Есть ли что-нибудь еще, что я могу попробовать?Как я могу игнорировать папку .git, если я не могу заставить композитора воздержаться от ее размещения там?
Решение, на которое я надеюсь, состоит в том, чтобы git игнорировал папку .git и все вещи автозагрузки композиторачто мне действительно не нужно.