Использование Composer и Git в своём проекте
==============================================

 Добрый день.  

  

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

  

Прописываю в composer.json следующее:  

  

```
{
	"require": {
		"psr/log": "dev-master"
	}
}
```
  

  

Запускаю:  

  

> composer install

  

  

В результате, как и ожидается, получаю в папке vendor добавившиеся папки с *psr/log*. После этого делаю Commit в свой проект, и… В репозитории в моей папке *vendors* добавляется только папка *psr/log*, но отсутствуют сами файлы, которые у меня появились после установки через composer.   

То есть на локальной машине эти файлы есть, всё работает. Но в репозитории моего проекта — файлов нет, только директория *psr/log*.  

  

Что меня смущает: после *composer install* вместе с *psr/log* создаётся папка *.git/* с файлами (config, description, index, branches/, hooks/ и проч.). Я правильно понимаю, что сейчас папка *psr/log* у меня связана с репозиторием этого проекта, который слился через composer?  

  

Если да, то каким образом нужно строить процесс добавление пакетов через composer, чтобы они спокойно коммитились в репозиторий моего проекта? Нужно ли для каждого добавленного пакета делать вручную *rebase* репозитория? Или нужно удалять *.git/* директорию после импорта пакета в мой проект?  

  

Вобщем интересует наиболее оптимальный и простой процесс добавления пакетов с собственный проект. С Git я не досконально знаком, поэтому возможно не понимаю чего-то вполне очевидного? 

 Вы не волнуйтесь, фиксация версий будет, вот примерный принцип работы:  

Когда делаете «composer.phar update», из репозиториев затягиваются самые последние изменения, а в composer.lock записываются их версии.  

Важно composer.lock положить в гит своего проекта.   

В случае новой инсталляции проекта, нужно запустить «composer.phar install», тогда установятся именно те версии которые у нас зафиксированы в composer.lock 

 При развёртывании проекта часто нужно выполнить не только копирование файлов из репозитория, но и установку софта (php, mysql, curl, gearman, etc.) и выполнение миграций для заполнения БД и что-то ещё. Импорт внешних зависимостей — одна из таких операций.  

А зафиксировав версии пакетов, добавив composer.lock в репозиторий проекта, вы гарантированно получите именно те версии пакетов, что использовали при разработке. 

 Обычно подразумевается, что через composer устанавливаются внешние зависимости. Хранить их в своем репозитории смысла никакого нет.   

  

P.S. Но я задумался над вашем вопросом…   

Мало ли какие требования могут быть у проекта, если найду ответ, отпишу. 

[www.nabito.net/how-to-safely-commit-vendor-dir-wit...](http://www.nabito.net/how-to-safely-commit-vendor-dir-with-php-composer)