[解決済み] 複数プロジェクトが存在するサーバーのGITリポジトリレイアウト
質問
私が Subversion をセットアップする方法について気に入っていることのひとつは、複数のプロジェクトで単一のメインリポジトリを持つことができることです。あるプロジェクトで作業したいとき、そのプロジェクトだけをチェックアウトすることができます。このように
\main
\ProductA
\ProductB
\Shared
では
svn checkout http://.../main/ProductA
gitの新しいユーザーとして、私は特定のワークフローにコミットする前に、この分野のベストプラクティスを少し探したいと思っています。これまで読んだ限りでは、git はプロジェクトツリーのルートにある単一の .git フォルダにすべてを保存します。ですから、私は2つのことのうちの1つを行うことができました。
- 製品ごとに個別のプロジェクトをセットアップする。
- 1つの巨大なプロジェクトを設定し、サブフォルダに製品を格納します。
製品間に依存関係があるので、単一の巨大なプロジェクトが適切だと思われます。すべての開発者がコードを共有できるサーバーを使用する予定です。私はすでにこれを SSH & HTTP で動作させており、その部分は気に入っています。しかし、SVN のリポジトリはすでに何 GB もあるため、各マシンにリポジトリ全体をドラッグするのは悪い考えのように思われます - 特に、過剰なネットワーク帯域幅を請求されるためです。
Linux カーネルプロジェクトのリポジトリも同様に大きいので、Git でこれを扱う適切な方法があるはずですが、私はまだそれを見つけ出していません。
非常に大きなマルチプロジェクト・リポジトリを扱うためのガイドラインやベストプラクティスはあるのでしょうか?
どのように解決するのですか?
ガイドラインは簡単で、以下の通りです。 Git の制限 :
- 1つのプロジェクトに1つのレポ
- メインプロジェクトに サブモジュール .
アイデアは すべてを を一つの巨大な git リポジトリに保存するのではなく、メインプロジェクトとして小さなリポジトリを構築し、他のリポジトリの正しいコミットを参照し、それぞれがプロジェクトまたはそれ自身の共通のコンポーネントを表すようにすることです。
は OP ポール・アレクサンダー コメント :
これは subversion が提供する "externals" のサポートに似ているように思えます。
私たちはこれを試してみましたが、プロジェクトが互いに依存しながら同時に開発されているため、externals のバージョン参照を常に更新することは非常に面倒であることがわかりました。他のオプションはありますか?
@Paul: はい、メインプロジェクトからバージョンを更新する代わりに、次のいずれかを行います。
- メイン プロジェクトから直接サブプロジェクトを開発する (" で説明されているように)。 サブモジュールの真の姿 "で説明しています)。
-
または、サブレポの中で
origin
を参照し、別の場所で開発されている同じサブレポに移動します。そこから、別の場所で行われた変更をそのサブレポからプルするだけです。
どちらの場合でも、新しい設定を記録するために、メイン プロジェクトをコミットすることを忘れてはいけません。ここで更新するための "external" プロパティはありません。すべてのプロセスははるかに自然です。
正直なところ、これは本当に面倒なことのようで、開発者が毎回手動で何かをする必要があるものは、バグやメンテナンスの定期的なソースになりそうです。
スーパープロジェクトでいくつかのスクリプトを使用して、これを自動化することを検討すると思います。
と返信しておきました。
正直なところ、あなたは正しかったかもしれません...それは、最新の
Git リリース 1.7.1
.
git diff
そして
git status
は、たとえメインプロジェクトから実行されたとしても、 サブモジュールの状態を考慮することを学びました。
サブモジュールの変更を見逃すことはできないのです。
とは言うものの
- サブモジュールは SVN 外部モジュールとは異なります: " を参照してください。 なぜgitサブモジュールはsvnエクスターナルと互換性がないのですか? を参照してください。
- サブモジュールの管理は厄介です: " を参照してください。 git サブモジュールはどのように動作するのですか? をご覧ください。
関連
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] Git リポジトリでのマージの衝突を解決するには?
-
[解決済み] リモート Git リポジトリの URI (URL) を変更するには?
-
[解決済み] 新しいローカルブランチをリモートの Git リポジトリにプッシュし、それを追跡するにはどうすればよいのでしょうか?
-
[解決済み] ローカルの Git リポジトリが元々クローンされた URL を特定するにはどうすればよいですか。
-
[解決済み] Gitで変更された複数のファイルのうち、1つのファイルだけを隠す?
-
[解決済み] Git リポジトリで削除されたファイルを検索して復元する方法
-
[解決済み] Git で最新のコミットを新しいブランチに移動する
-
[解決済み】Git リポジトリに空のディレクトリを追加するには?
-
[解決済み] 別のユーザーでコードをコミットするにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
gitlab をアップロード ! [リモート拒否] dev -> dev (受信前のフックが拒否されました)
-
hint: 現在のブランチの先端が hint: そのリモートカウントより遅れているため、更新が拒否されました。
-
git push please tell me who you are or git fatal: empty ident name (for <>) not llowed.
-
[解決済み】git リポジトリに複数のプロジェクトを入れる方法はありますか?[クローズド]
-
[解決済み】Gitサブモジュールのアップデート
-
[解決済み] Gitのファイル制限(数とサイズ)について教えてください。
-
[解決済み] ローカルレポとリモートレポを接続する
-
[解決済み] GitHubのウェブサイト上でディレクトリやフォルダの名前を変更するには?
-
[解決済み] gitで、stashを適用せずに、追跡されていないstashedファイルを表示する方法はありますか?
-
[解決済み] Git タグリスト、コミット sha1 ハッシュの表示