ここでの問題は、Git の設計と解決しようとしている問題との不一致だと思います。
Git はツリーを追跡するのに適しています。プロジェクト間の依存関係は、グラフを形成できます (おそらく形成します)。ツリーはグラフですが、グラフは必ずしもツリーではありません。問題はグラフを効果的に表現する方法であるため、ツリーはジョブに最適なツールではありません。
うまくいくかもしれないアプローチは次のとおりです。
git プロジェクトには .gitmodules ディレクトリがあり、コミットが依存する可能性のあるプロジェクト、それらが見つかる場所、プロジェクト内のどのパスに挿入されるかを示す「ヒント」が記録されます。( http://osdir.com/ml/git/2009-04/msg00746.html )
一連のプロジェクトからこの情報を読み取り、各プロジェクトの .gitmodules ファイルにあるヒントを、それらのプロジェクトが実際に配置されているファイルシステム上の場所にマップし、git が期待するパスからシンボリック リンクを追加するスクリプトを追加できます。サブモジュールをそれぞれのプロジェクトの実際のファイルシステムの場所にチェックアウトします。
このアプローチでは、シンボリック リンクを使用してツリー型から抜け出し、グラフを構築します。リンクを git リポジトリに直接記録すると、ローカル セットアップに固有の相対パスが個々のプロジェクトに記録され、プロジェクトが「完全に独立」することはありません。したがって、シンボリックリンクを動的に構築するスクリプト。
私は、このアプローチは望ましくない方法で git に干渉する可能性があると考えています。これは、あるものを見つけることが期待されるパスをたどり、代わりに別のものを配置したためです。おそらく、シンボリックリンクのパスを .gitignore することができます。しかし今、私たちはそれらのパスを 2 回書き留めており、DRY に違反しています。この時点で、サブモジュールを使用するふりをすることからもかなり離れています。各プロジェクトの別の場所に依存関係を記録し、git が期待するもののために .gitmodules ファイルを残すことができます。したがって、独自のファイル、たとえば .dependencies を作成し、各プロジェクトはその依存関係をそこに記述できます。私たちのスクリプトはそこを見て、シンボリックリンクを構築します。
うーん、独自の軽量パッケージ形式を備えたアドホック パッケージ管理システムについて説明したところかもしれません :)
megamic の提案は、私には git サブモジュールの良い使い方のように思えます。ここでは、グラフではなくセットを追跡することのみを扱っており、セットはツリーに簡単に収まります。1 レベルの深さのツリーは、基本的に親ノードと子ノードのセットです。
あなたが指摘したように、それはあなたの質問に記載されている問題を完全に解決するものではありません。私たちが関心を持っている可能性が高い「これはそれで動作する」という情報を 2 つの異なるタイプに分けることができます。 . 独自のビルド セットアップで使用される、「この一連のプロジェクト バージョンを使用してシステム全体を正常にテストしました」というステートメント
megamic の回答は解決されましたが (2)、(1) については、プロジェクトに依存関係を教えてもらいたいと考えています。次に、(1) からの情報を使用して、最終的に (2) として記録するバージョン セットを計算できます。これは、独自のツールを保証するのに十分複雑な問題であり、パッケージ管理システムに戻ります:)
私の知る限り、優れたパッケージ管理ツールのほとんどは、特定の言語またはオペレーティング システムのユーザー向けに作られています。Ruby の世界の「gem」パッケージについては Bundler を、Debian の世界の「.deb」パッケージについては apt を参照してください。
「ポリグロット」( http://blog.heroku.com/archives/2011/8/3/polyglot_platform/ ) プログラミング プロジェクトに適した、言語に依存せず、OS に依存しない優れたソリューションを誰かが知っている場合は、とても興味があります!それを質問として投稿する必要があります。