Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Composer and multiple branches

I have a git project with 2 branches:

  • Master: Currently the "stable branch" but subjected to changed. Releases are tagged from there.
  • Devel: A development branch for the next version. This is merged into master when we think some features from here are quite stable.

In master, I have a requirement in my composer.json that uses a specific version:

"require" : {
    "triagens/arangodb" : "1.2.1",
    "php" : ">=5.4.0"
},

In my devel branch, I would like to use the development version of the dependency:

"require" : {
    "triagens/arangodb" : "dev-devel",
    "php" : ">=5.4.0"
},

Effectively, when branches are switched, and composer install or composer update is run I would like to have composer update/change the dependencies to the appropriate versions.

Since composer install --dev does not support having a different version of a dependency in require-dev, I cannot set the different version in the require-dev section.

I would also prefer to not have a separate composer.json for each branch as merge would be quite painful.

If you have multiple branches and each branch uses some version of a dependency, what's the best way to do this?

like image 924
F21 Avatar asked May 02 '13 03:05

F21


People also ask

Can you have many different branches at the same time?

Git offers a feature referred to as a worktree, and what it does is allow you to have multiple branches running at the same time. It does this by creating a new directory for you with a copy of your git repository that is synced between the two directories where they are stored.

Can you be in two branches at the same time?

That's called Simultaneous Enlistment, and it's grounds for immediate discharge from both branches. However, you can be in one service and work for a different one.


1 Answers

You can maintain multiple versions of composer.json under different names:

  • composer.master.json
  • composer.dev.json

Then when you call composer.phar install or composer.phar update, you can preface the desired composer file to use:

  • COMPOSER=composer.master.json php composer.phar update
  • COMPOSER=composer.dev.json php composer.phar update

See the CLI docs.

like image 84
David Weinraub Avatar answered Sep 28 '22 19:09

David Weinraub