Mygem.gemspec内にgitブランチ依存関係がある可能性はありますか?
私は次のようなものを考えています:
gem.add_runtime_dependency 'oauth2', :git => '[email protected]:lgs/oauth2.git'
...しかし、それは機能しません。
これは不可能であり、RubyGemsがgem開発者がgemにアクセスするために特定のバージョン管理システムをインストールすることをユーザーに要求できるようにするのはかなり手間がかかるため、決してありえないでしょう。 Gemsは、できるだけ多くのアプリケーションで使用できるように、最小限の依存関係で自己完結型にする必要があります。
独自の内部プロジェクトでこれを実行したい場合は、 Bundler を使用することをお勧めします。
[〜#〜] edit [〜#〜]
コメント者によると、これはもはや真実ではありません。履歴コンテキスト用の以前の情報が保持されます。
Gemfileと.gemspecでgemへの参照を複製すると、Bundlerで警告メッセージが表示されるようになったため、この答えはもはや当てはまらないように思われます。
古い情報
これ Yehuda Katzの記事は、私にとって同様の混乱を解消しました。開発でのみ使用する場合は、gitのものをgemfileに追加するのが最善ですが、そのバンドルは引き続きgemspecの依存関係/バージョン情報を使用します(私には魔法のようですが、Yehudaを信頼しています)。
私もこの問題を理解しようとしていました。そして、次の解決策を思いつきました(gemを公開しているか、そのoauth2 gemを再配布する権利があるかどうかはわかりません)。
Oauth2 gemを必要とするgemでこれを実行します。
git submodule add [email protected]:lgs/oauth2.git lib/oauth2
デフォルトとは異なるブランチが必要な場合
cd lib/oauth2 && git checkout <branchname_or_ref>
cd .. && git add lib/oauth2
git commit -m "adding outh2 submodule"
Gemspecで、必要なバージョン行の上にこれを追加します
$:.Push File.expand_path('../lib/oauth2/lib', __FILE__)
また、oauth2 gemのランタイム依存関係をすべてgemspecに追加する必要があります。私はまだこれを回避する方法を見つけていません。
これは私がやったことであり、Gitはgit経由で必要なので、私にとってはうまくいきます。これがrubygemsで公開されたgemで機能するかどうかはわかりません。