2 回目のbundle install実行以降、Gemfile が変更されない限り、Gemfile.lock から依存関係が読み込まれます。
しかし、これら 2 つのファイル間の変更の検出はどのように行われるのだろうか。
たとえば、新しい依存関係を Gemfile に追加せずに Gemfile.lock に直接追加する場合 (Gemfile.lock は Gemfile から自動生成されるため、ベスト プラクティスとは対照的に)、bundle installGemfile を変更済みと見なしますか?
実際、bundle installプロセスは、変更を検出するために、Gemfile ツリーと Gemfile.lock ツリー全体を比較しますか?
そうであれば、依存関係を Gemfile.lock に直接追加していても、Gemfile は変更されたものとして検出され (異なるため)、Gemfile.lock を再消去します (したがって、追加された依存関係が失われます...)
bundle install2回目の打ち上げからの経緯は?
より明確にするために、私の質問は次のとおりです。
変更は Gemfile のみに基づいていますか? bundle installつまり、バンドラーはすべての実行番号 Nの Gemfile スナップショットを保持し、それをbundle install実行 N+1 と比較するだけですか?
または、バンドラーのメモリにスナップショットが作成されず、バンドラーは毎回 Gemfile.lock と比較して、Gemfile が変更されたと見なす必要があるかどうかを検出します。