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, если у вас уже нет всего кода вашего поставщика и не было обновлений для того, что вам нужно.

Другие вопросы по тегам