Search code examples
phpcomposer-phppackagist

Use PHP composer to clone git repo


I'm trying to use composer to automatically clone a git repository from github that isn't in packagist but it's not working and I can't figure out what am I doing wrong.

I think I have to include it among "repositories" like so:

"repositories": [
    {
        "url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
        "type": "git"
    }
],

and then probably list it in "require" section. It should be similar to this example but it doesn't work. It just gives this error:

Your requirements could not be resolved to an installable set of packages.

Have anyone tried to do something like this already?


Solution

  • At the time of writing in 2013, this was one way to do it. Composer has added support for better ways: See @igorw 's answer

    DO YOU HAVE A REPOSITORY?

    Git, Mercurial and SVN is supported by Composer.

    DO YOU HAVE WRITE ACCESS TO THE REPOSITORY?

    Yes?

    DOES THE REPOSITORY HAVE A composer.json FILE

    If you have a repository you can write to: Add a composer.json file, or fix the existing one, and DON'T use the solution below.

    Go to @igorw 's answer

    ONLY USE THIS IF YOU DON'T HAVE A REPOSITORY
    OR IF THE REPOSITORY DOES NOT HAVE A composer.json AND YOU CANNOT ADD IT

    This will override everything that Composer may be able to read from the original repository's composer.json, including the dependencies of the package and the autoloading.

    Using the package type will transfer the burden of correctly defining everything onto you. The easier way is to have a composer.json file in the repository, and just use it.

    This solution really only is for the rare cases where you have an abandoned ZIP download that you cannot alter, or a repository you can only read, but it isn't maintained anymore.

    "repositories": [
        {
            "type":"package",
            "package": {
              "name": "l3pp4rd/doctrine-extensions",
              "version":"master",
              "source": {
                  "url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
                  "type": "git",
                  "reference":"master"
                }
            }
        }
    ],
    "require": {
        "l3pp4rd/doctrine-extensions": "master"
    }