2014年9月6日土曜日

php: composer の対応リポジトリーにローカルファイルシステムのgitリポジトリーを定義するには?

composer で、いわゆるオレオレパッケージをローカルファイルシステム等から入手するように composer.json を記述するにはどうすれば良いか、という備忘録。

ローカルファイルシステム上のGitリポジトリーを定義する方法は参考記事がすぐに見つかった。
例えば、phpmigを独自に改変してtagを打ったローカルファイルシステム /home/usagi/repos/phpmig にあるパッケージを適当なプロジェクト phpmig-test-1 にて composer で扱う場合:


"repositories"でパッケージを探索する"type"と"url"をリストで追加する。今回は1つローカルファイルシステムのパッケージのあるディレクトリーを定義したのみ。typeはvcsとすると対象リポジトリーをバージョン管理システムで管理しているものとして回収するパッケージのバージョン依存を解決してくれる。

"type"に"vcs"を定義した場合、Git、Subversion、Mercurialに対応する。

また、ローカルファイルシステムではなく "git@bitbucket.org:user/repo-name.git" 形式に対応するサービス(GitHub、Bitbucket)やGitリポジトリーも使用できる。
試しに、ローカルに clone した phpmig リポジトリーに適当な改変をコミットするなりしないなりして、適当な tag を打ち、 composer install/update などすると、ローカルの改変版を優先的に取得してくれた。


本家よりも新しいバージョンの tag を打ってみたところ、 v1.2.3 形式であれ、 1.2.3 形式であれ "*"ではともかく最新版をきちんと入手してくれた。"vcs"リポジトリーの場合にはcloneで扱ってくれるのが当然だけど良いですね。

と、いうわけでComposerで任意のgitリポジトリーを優先して適当に扱う方法が分かったのでphpのパッケージ管理も捗る、といいね・w・

git使ってる時点でそれsubmoduleで良いのでは?という気もしないでもないけどこれはこれで知っておいて良いでしょう。

(ついき1)

composerのバージョン判定は1.2.3など数値とドット形式じゃないと受け付けないので、 release タグを取ってこいとかはむーりーです・w・

(ついき2)

composerに git リポジトリーから tag ではなく特定ブランチの最新を取得させたい場合には、 "version" を例えば "dev-master" と composer.json に定義すると master ブランチの最新を clone/checkout してくれる。

0 件のコメント:

コメントを投稿