1

問題:ホスト マスター リポジトリに 2 番目のリポジトリを保存せずに、git リポジトリに git リポジトリをネストします。リポジトリは、2 つの別個のエンティティである必要があります。このようにして、クライアント サイトのベース コード (複数のサイトで使用される) を簡単に更新できます。

2 つのリポジトリの理由:プロジェクトで使用するベースの php フレームワークがあります。各クライアントは、そのサイトに必要なファイルを含む独自のリポジトリを取得します。git/submodules の動作方法により、「フレームワーク」をマスター リポジトリとして保持し、「クライアント コード」をサブモジュールとして保持する必要があります。その理由は、index.php と .htaccessが必要だからです。(フレームワークの一部) ルートにあります。私のフレームワークは必要に応じて拡張するように設計されているので、それは問題ありません。必要なクライアント ファイルを "site" フォルダーに配置し、それを別のリポジトリとして保存するだけです。明らかな欠点は、サイトをセットアップするには、最初に「フレームワーク リポジトリ」をインストールしてから、「クライアント リポジトリ」をインストールする必要があることです。これらは非公開なので、この設定は問題ありません。フレームワークを別のプロジェクトから更新できるという利点も気に入りました。問題は、そのクローンからのプッシュに「クライアントコード」が含まれていることです。また、フレームワークのローカル テストにも同じセットアップが必要なので、サブモジュールがメイン フレームワーク リポジトリに追加されます。「クライアントコード」を保持する「サイト」フォルダーを複製して、そのフォルダーを無視リストに追加するだけではない理由をよく考えました。それぞれを手動で更新する必要がありますが、それでも問題ありません。しかし、torisegit はサブプロジェクト (限定的なサポート) であると考えているようで、そのフォルダーを無視リストに追加することさえできません。だから私はgitクローンをネストするのは悪いと思っていますが、間違っている可能性があります。

目標: 2 つのリポジトリをデプロイできるようにする必要があります。私の「フレームワーク」は確かにベース/ルートリポジトリでなければなりません。次に、ベースリポジトリ内のフォルダーに2番目の「クライアント」リポジトリを何らかの方法で埋め込む必要があります。「クライアント」リポジトリには、フレームワーク コードは格納されず、独自のコードのみが格納されます。「クライアントコード」について何も保存せずに「フレームワークコード」(アルファ版なので多くのバグ修正)の変更を更新してプッシュできるようにしたいので、新しいサイトの新しいフォルダーに簡単に複製できます. ここでもクライアント コードは、フレームワーク ルートから 1 レベル上の 1 つのフォルダーに格納されます。(以下の例を参照)。これを git クローンとして実行すると、TortoiseGit が破損し、フォルダーをコピーして貼り付けようとしたり、手動で無視ファイルに追加したりすると、おそらく git が破損します。

最終的な考え:おそらくサブプロジェクトは機能しますが、それに対するサポートはあまりないようで、使用方法がわかりません。私の 2 つの主要なツールである TortoiseGit と NetBeans がすべてをサポートするように、主要なツールに限定しようとしています。サブモジュールをマスターリポジトリに保存しない方法があるかもしれませんが、見つけられません。サブフォルダーが機能する可能性もありますが、これもあまりサポートされていないようです。最も簡単なのは、フォルダーを無視することですが、これを試してみると少なくとも TortoiseGit が壊れているように見えますが、間違っている可能性があります。

フォルダ レイアウトの例:

-.git (フレームワーク リポジトリ)
- system *framework フォルダ
-- foo *framework フォルダ
-- bar *framework フォルダ
- サイト (2 番目のレポ別名クライアントのルート)
-- .git (クライアント リポジトリ)
-- config.php *クライアントファイル
- index.php *フレームワーク ファイル
- .htaccess *フレームワーク ファイル

「システム」フォルダ、index.php、および .htaccess は PHP フレームワークの一部であり、私のすべてのサイトに共通です。「サイト」フォルダーには、そのサイトのファイルを含む 2 番目のリポジトリが保持されます。2 番目のオプションは、独自のフォルダーに格納され、新しい index.php によって呼び出されるようにフレームワークを書き直すことです。ただし、これは大幅な書き直しであり、その書き方には悪夢のような悪夢があります。さらに、ルートにある必要があるため、.htaccess ファイルを処理するという問題もあります。確かにコピーできましたが、そのファイルへの変更はプルで更新されません。しかし、現時点ではそれが唯一の方法だと思います。

これが理にかなっていることを願っています。私はアイデアがありませんが、本当にこれを機能させたいと思っています。

4

2 に答える 2

2

最初のリポジトリ内の好きな場所にいつでも2番目のリポジトリを複製してから、2番目のフォルダを.gitignoreファイルに追加できます。

上記の例では、次を追加するだけです。

site/

あなたに.gitignore

于 2012-09-13T21:58:13.380 に答える
1

Git Submodules は、私が考えることができる最高のものです。ここでチェックしてください。コードを再利用可能なリポジトリに分割するのにも非常に便利です。

于 2012-09-13T21:48:12.583 に答える