rath3r
rath3r

Reputation: 323

How to include Composer dependencies in a Git repo

When creating sites using a framework like Silverstripe I often want to use helper modules like gridfieldextensions and lumberjack.

I therefore use composer require to add the dependencies.

However when I follow my regular development work flow and use git add -A to add the module to the repo rather than the code being added to the repo I get a reference to it.

git reference rather than code

This causes problems when I then try to clone the site elsewhere (using Jenkins or another developer). The git clone or git pull leaves an empty directory.

I solve this by deleting the .git dir of the module and adding all the files.

Is there a better way to do this? Is using git submodule an option?

Upvotes: 0

Views: 592

Answers (1)

wmk
wmk

Reputation: 4626

Somewhere i found a good .gitignore file that ignores everything and i have to tell it to include the custom modules for my project. It's like:

# ignore everything...
/*

# ...but
!/.htaccess
!/.gitignore
!/composer.json
!/composer.lock

!/Capfile
!/Gemfile
!/favicon.ico
!/touch-icon-*


!/mysite
!/some-module
#...other modules

# theme stuff
!/themes/
**/.sass-cache
**/node_modules

!**/node_modules/_manifest_exclude

#no assets in general, but /assets/.htaccess
!/assets
/assets/*
!assets/.htaccess

As FinBoWa already said you need the composer.json and composer.lock file in your project and running

composer install

on another machine it'll install the packages in the versions saved in the composer.lock file on that machine

composer install --no-dev

will only install the "normal" requirements, no dev-requirements like phpunit or other stuff you only need for developing or testing but not live

composer install --no-dev -o

will also optimize (-o) the auto loader, so it'll be a bit faster.

composer update

will update your packages, which might have funny side effects and break your site. So use it carefully and test afterwards.

composer update silverstripe/framework

will just update that package and finally

composer update silverstripe/*

will update all packages by the vendor silverstripe (e.g. framework and cms package)

See also:

Upvotes: 4

Related Questions