Reputation: 647
I've got some packages host on the Gitlab of my company. I want to request a specific version of these packages but each time I try, composer download the latest commit of the master branch.
composer.json :
{
"name" : "MyProject",
"require" : {
"user/project" : "v0.5.0"
},
"type" : "project",
"repositories" : [
{
"url" : "[email protected]:user/project.git",
"type" : "vcs"
}
],
"config" : {
"vendor-dir" : "private/class"
}
}
The structure of the repository of my package :
When I execute "composer install" :
Loading composer repositories with package information
Installing dependencies (including require-dev)
Analyzed 69 packages to resolve dependencies
Analyzed 67 rules to resolve dependencies
Installing user/project (dev-master f15600a)
Cloning f15600a1
It downloads the last commit only.
How can I configure the composer.json file of my project to use a specific tag ?
Upvotes: 54
Views: 64683
Reputation: 10780
To require a specific branch you can also just dev-
branchname like this:
"require": {
"user/project" : "dev-my-branch"
},
Upvotes: 11
Reputation: 423
Pull by git tag:
{
"repositories": [
{
"type": "git",
"url": "https://gitlab.xxx.com/some/repo.git"
}
],
"require": {
"some/repo": "1.0.2"
}
}
Pull by latest git commit:
{
"repositories": [
{
"type": "git",
"url": "https://gitlab.xxx.com/some/repo.git"
}
],
"require": {
"some/repo": "dev-master"
}
}
Pull by specific git commit:
{
"repositories": [
{
"type": "git",
"url": "https://gitlab.xxx.com/some/repo.git"
}
],
"require": {
"some/repo": "dev-master#68696f39"
}
}
Add repository via Composer Cli and pull latest git commit:
composer config repositories.repo git https://gitlab.xxx.com/some/repo.git
composer require "some/repo:dev-master"
composer update
Upvotes: 31
Reputation: 121
You can use a specific version hash after '#', for example:
require": {
"user/project": "dev-master#31454f258f10329ae7c48763eb898a75c39e0a9f"
}
see: https://getcomposer.org/doc/04-schema.md#package-links
Upvotes: 2
Reputation: 41756
How to require a specific Git tag?
Change the version requirement to dev-master
, followed by a hash #
and the Git tag name, e.g. v0.5.0
, like so:
"require": {
"vendor/package": "dev-master#v0.5.0"
}
How to require a specific Git commit?
Change the version requirement to dev-master
, followed by a hash #
and the Git commit reference, e.g. dd6ed3c8
, like so:
"require": {
"vendor/package": "dev-master#dd6ed3c8"
}
Referencing: https://getcomposer.org/doc/04-schema.md#package-links
Define your own package and set version and reference
An alternative to working with repositories of "type": "vcs"
is to define a custom package "type": "package"
inside repositories and work with a reference.
The reference is either a Git commit hash, or a tag or branch name, like origin/master
.
This will tie the version
to a specific commit reference
, in this case dd6ed3c8.
"repositories": [
# ...
{
"type": "package",
"package": {
"name": "vendor/package",
"version": "v0.5.0",
"source": {
"url": "[email protected]:vendor/project.git",
"type": "git",
"reference": "dd6ed3c8"
}
}
}
]
Upvotes: 77