Yii2 и git игнорируют файлы
Я недавно перешел от svn
в git
и я немного запутался.
В рамках yii2 есть много .gitignore
файлы, и я понимаю использование этих файлов. но я немного запутался, почему vendor
каталог игнорируется.
Файлы там нужны как для моей разработки, так и для производственной среды.
Я использовал для фиксации файлов там при использовании svn
, но я делал это неправильно? Как правильно сделать это, если я игнорирую vendor
реж.
Мне нужно бежать composer update
на обе среды каждый раз, когда я делаю толчок?
2 ответа
Как сказал @chris--- в конце концов, это всего лишь рекомендация, и вам решать, загружать и поддерживать библиотеки поставщиков или нет. Чтобы получить представление о том, как это работает, перейдите к composer.json
внутри вашего приложения, и вы увидите что-то вроде этого:
"require": {
"php": ">=5.4.0",
"yiisoft/yii2": ">=2.0.6",
"yiisoft/yii2-bootstrap": "*",
"yiisoft/yii2-swiftmailer": "*"
},
"require-dev": {
"yiisoft/yii2-codeception": "*",
"yiisoft/yii2-debug": "*",
"yiisoft/yii2-gii": "*",
"yiisoft/yii2-faker": "*"
},
Где вы можете редактировать и установить конкретную версию любой библиотеки, если это необходимо. Теперь, взяв эту строку:
"yiisoft/yii2-bootstrap": "*"
Каждый раз, когда вы делаете composer update
Composer просто получит свой репозиторий с packagist.org (см. Здесь), установит последнюю найденную стабильную версию (то, что "*"
значит) потом решим свои зависимости которые можно увидеть внутри \vendor\yiisoft\yii2-bootsrap\composer.json
:
"require": {
"yiisoft/yii2": ">=2.0.6",
"bower-asset/bootstrap": "3.3.* | 3.2.* | 3.1.*"
},
Последняя строка гарантирует установку последней стабильной версии Twitter Bootstrap 3.3.x.
Это именно те библиотеки, их точные версии загружаются после запроса https://packagist.org/ и сохраняются в папке vendor каждый раз, когда вы выполняете composer update
с любой машины. Если вы загрузите Twitter Bootstrap 3.3.2 вместе с вашим проектом в качестве примера, и член команды загрузит его обратно без необходимости composer update
тогда он может оказаться застрявшим в проблеме, которая, как предполагается, будет исправлена в версии 3.3.3, и где ему никогда не понадобится знать, сделал ли он только что обновление.
Это то, что Composer Team отвечает, чтобы ответить на вопрос: Должен ли я зафиксировать зависимости в моем каталоге поставщиков?:
Общая рекомендация...
... Хотя это может быть заманчиво для фиксации в некоторой среде, это приводит к нескольким проблемам:
- Большой размер хранилища VCS и различия при обновлении кода.
- Дублирование истории всех ваших зависимостей в вашей собственной VCS.
- Добавление зависимостей, установленных через git, в git-репозиторий покажет их как подмодули. Это проблематично, потому что они не являются реальными подмодулями, и вы столкнетесь с проблемами.
Также подумайте о том, насколько велико дополнительное дисковое пространство, которое должно быть выделено github.com, если каждый проект должен быть загружен с его поставщиками. И подумайте, сколько точно такой же копии Twitter начальной загрузки можно найти там.
Вот так. Обычно вы не фиксируете вещи производителя, потому что там есть сторонний код, который находится под контролем версий в других местах. Вы должны использовать composer для обработки обновления кода конкретного поставщика. Это означает, что каждый раз, когда вы развертываете приложение, вы должны запускать composer update
, если у вас уже нет всего кода вашего поставщика и не было обновлений для того, что вам нужно.