J'essaie d'utiliser composer pour cloner automatiquement un dépôt git à partir de github qui n'est pas présent dans packagist mais cela ne fonctionne pas et je ne peux pas comprendre ce que je fais. faux.
Je pense que je dois l'inclure parmi les "dépôts" comme ceci:
"repositories": [
{
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git"
}
],
et ensuite probablement l'énumérer dans la section "require". Il devrait ressembler à cet exemple mais cela ne fonctionne pas. Cela donne juste cette erreur:
Vos besoins n'ont pas pu être résolus en un ensemble de packages installables.
Est-ce que quelqu'un a déjà essayé de faire quelque chose comme ça?
Au moment d'écrire en 2013, c'était une façon de le faire. Composer a ajouté le support pour de meilleures façons: voir @igorw's answer
AVEZ-VOUS UN DÉPÔT?
Git, Mercurial et SVN sont pris en charge par Composer.
AVEZ-VOUS UN ACCÈS ÉCRITE AU DÉPÔT?
Oui?
LE REPOSITORY A-T-IL UN FICHIER composer.json
Si vous avez un référentiel, vous pouvez écrire dans: Ajoutez un fichier composer.json
, Ou corrigez le fichier existant, et N'UTILISEZ PAS la solution ci-dessous.
Allez à @igorw's réponse
UTILISEZ UNIQUEMENT CELA SI VOUS N'AVEZ PAS DE DÉPÔT
OU SI LE REPOSITOIRE N'A PAS UN composer.json
ET VOUS NE POUVEZ PAS L'AJOUTER
Ceci remplacera tout ce que Composer pourra peut-être lire à partir du composer.json
Du référentiel d'origine, y compris les dépendances du paquet et le chargement automatique.
L'utilisation du type package
transférera la charge de la définition correcte de tout sur vous. Le moyen le plus simple est d’avoir un fichier composer.json
Dans le référentiel et de l’utiliser.
Cette solution concerne uniquement les rares cas où vous avez un téléchargement Zip abandonné que vous ne pouvez pas modifier, ou un référentiel que vous ne pouvez que lire, mais il n'est plus maintenu.
"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"
}
Ce paquet en fait est disponible via packagist . Dans ce cas, vous n'avez pas besoin d'une définition de référentiel personnalisé. Assurez-vous simplement d’ajouter un require
(qui est toujours nécessaire) avec une contrainte de version correspondante.
En général, si un package est disponible sur packagist, n'ajoutez pas d'ajout de rapport VCS. Cela ne fera que ralentir les choses.
Pour les packages qui ne sont pas disponibles via packagist, utilisez un référentiel VCS (ou git), comme indiqué dans votre question. Lorsque vous le faites, assurez-vous que:
require
pour le paquet en questionrequire
correspond aux versions fournies par le référentiel VCS. Vous pouvez utiliser composer show <packagename>
Pour trouver les versions disponibles. Dans ce cas, ~2.3
Serait une bonne option.require
correspond au nom dans la télécommande composer.json
. Dans ce cas, il s'agit de gedmo/doctrine-extensions
.Voici un exemple composer.json
Qui installe le même package via un dépôt VCS:
{
"repositories": [
{
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git"
}
],
"require": {
"gedmo/doctrine-extensions": "~2.3"
}
}
Les documentation de dépôt VCS expliquent tout cela très bien.
S'il existe un référentiel git (ou un autre VCS) avec un composer.json
Disponible, n'utilisez pas un référentiel "package". Les pensions de paquets exigent que vous fournissiez tous des métadonnées dans la définition et complètement ignorer tout composer.json
Présent dans les sources et sources dist. Fournies. Ils ont également des limitations supplémentaires, telles que ne pas permettre des mises à jour appropriées dans la plupart des cas.
Évitez les pensions de paquets ( voir aussi la documentation ).
Vous pouvez inclure le dépôt git dans composer.json comme ceci:
"repositories": [
{
"type": "package",
"package": {
"name": "example-package-name", //give package name to anything, must be unique
"version": "1.0",
"source": {
"url": "https://github.com/example-package-name.git", //git url
"type": "git",
"reference": "master" //git branch-name
}
}
}],
"require" : {
"example-package-name": "1.0"
}
Il suffit de dire à composer d'utiliser le source si disponible):
composer update --prefer-source
Ou:
composer install --prefer-source
Vous obtiendrez ensuite les paquets sous forme de référentiels clonés au lieu d'archives extraites, ce qui vous permettra d'apporter des modifications et de les valider. Bien sûr, en supposant que vous ayez les autorisations d'écriture/Push sur le référentiel et que Composer) connaisse le référentiel du projet.
Déni de responsabilité: Je pense avoir répondu à une question un peu différente, mais c’était ce que je recherchais lorsque j’ai trouvé cette question; j’espère donc qu’elle sera utile aux autres également.
Si Composer ne sait pas où se trouve le référentiel du projet ou si le projet ne dispose pas du composeur approprié.json, la situation est un peu plus compliquée, mais d'autres ont déjà répondu à de tels scénarios.
Je rencontrais l'erreur suivante: The requested package my-foo/bar could not be found in any version, there may be a typo in the package name.
Si vous demandez à un autre référentiel de faire vos propres modifications, vous vous retrouverez avec un nouveau référentiel.
Par exemple:
https://github.com/foo/bar.git
=>
https://github.com/my-foo/bar.git
La nouvelle URL devra aller dans la section référentiels de votre composer.json.
N'oubliez pas si vous voulez vous référer à votre fork comme my-foo/bar
dans votre section require, vous devrez renommer le paquet dans le composer.json
fichier dans votre nouveau dépôt.
{
"name": "foo/bar",
=>
{
"name": "my-foo/bar",
Si vous venez de créer un fichier, le moyen le plus simple de le faire est de le modifier directement dans github.
Dans mon cas, j'utilise Symfony2.3.x et le paramètre minimum-stabilité est par défaut "stable" (ce qui est bien). Je voulais importer un référentiel qui ne soit pas dans packagist mais qui posait le même problème "Vos exigences ne pouvaient pas être résolues avec un ensemble de packages pouvant être installé.". Il est apparu que le composer.json dans le dépôt que j'ai essayé d'importer utilise un "dev" à stabilité minimale.
Donc, pour résoudre ce problème, n'oubliez pas de vérifier le minimum-stability
. Je l'ai résolu en demandant un dev-master
version au lieu de master
comme indiqué dans ce post .
Si vous voulez utiliser un composer.json
De GitHub, regardez cet exemple (sous la section VCS).
La section des paquets concerne les paquets qui n'ont pas le composer.json
. Cependant, vous n'avez pas suivi cet exemple aussi, sinon cela aurait également fonctionné. Lisez ce qui est écrit sur les référentiels de paquets:
Fondamentalement, vous définissez les mêmes informations que celles incluses dans le
packages.json
Du référentiel composer, mais uniquement pour un seul package. Encore une fois, les champs obligatoires minimum sont name, version et dist ou source.