1

私のローカル コンピューター上の次の 2 つのフォルダーには、共有ライブラリ/ヘルパーが含まれています。

  • /共有/ライブラリ/
  • /共有/ヘルパー/

上記のライブラリは、バックエンドのサブモジュールにする必要があります...

  • /バックエンド/アプリケーション/ライブラリ/
  • /バックエンド/アプリケーション/ヘルパー/

...そして私のフロントエンド:

  • /フロントエンド/アプリケーション/ライブラリ/
  • /フロントエンド/アプリケーション/ヘルパー/

これまでのところ、すべてが構成されており、動作しています!

さらに、フロントエンドとバックエンド用のリモート サーバーがあります。

今、私は次のことを望んでいます: 共有ライブラリの 1 つで変更をコミットする場合、1 つの git push (バックエンド、ローカル コンピューターのフロントエンドとバックエンド、サーバーのフロントエンド) で 4 つのリポジトリすべてに変更をプッシュします。

これが不可能な場合: ライブラリで変更をコミットする場合、1 回のプッシュで少なくとも 2 つのローカル ディレクトリに変更をプッシュしたいと考えています。ローカル ディレクトリの 1 つの変更をリモート サーバーにプッシュすると、サブモジュールの変更も自動的にリモート ディレクトリにプッシュされます。

共有ライブラリの変更は、共有フォルダーでのみ可能であり、バックエンドやフロントエンドでは可能ではありません!

ご協力いただきありがとうございます!

4

1 に答える 1

2

今、私は次のことを取得したい: 共有ライブラリの 1 つで変更をコミットする場合、1 つの git push (バックエンド、ローカル コンピューターのフロントエンドとバックエンド、サーバーのフロントエンド) で 4 つのリポジトリすべてに変更をプッシュしたい。

これは単純な git push では不可能です。作業コピーを使用してリポジトリに変更を「プッシュ」することはできません。ベア リポジトリにのみプッシュできます。作業コピーを含むリポジトリの場合、他の場所からのみプルできます。

サブモジュールは扱いが少し難しいので、あなたが以前話しているようなことを試してみました。私は自分の git サブモジュールにあったものをより汎用的にして、スタンドアロンのものとしてシステムにインストールできるようにすることを支持して、この考えを完全に放棄しました。

このように見てください。ライブラリ内のコードがメイン リポジトリから十分に分離できる場合は、それを独自のパッケージのように扱い、個別に開発/デプロイするのが論理的です。ライブラリ内のコードがメイン リポジトリに厳密に依存している場合は、いずれにせよ、すべてが 1 つのリポジトリにすぎないはずです。

サブモジュールのケースがないことは言うまでもありません - 私はまだそれらを使用しています。それらを使用したい場合は、それらのルールに従う必要があります。

  1. 変更が行われると、サブモジュールでサブモジュールの変更をコミットおよびプッシュします
  2. サブモジュールの変更がプッシュされた後
    • サブモジュールの変更を親リポジトリにコミットします
    • 親リポジトリをプッシュする
  3. サブモジュールからの変更が必要なリポジトリがある場合
    • 他のレポでサブモジュールをプルします
    • 競合を解決し、変更をプッシュします
    • サブモジュールの変更を親リポジトリにコミットします
  4. サブモジュールを他のリポジトリに引っ張った結果、変更が生じた場合
    • 元のリポジトリの手順 3 に戻ります

面倒に思えますが、サブモジュールは他のリポジトリと実際には何の違いもありません。それらは自立しており、そのように扱う必要があります。さらに、親の観点から見ると、サブモジュール フォルダーは sha1 ハッシュを含む単なるファイルです。コマンドは、git submodule親によって参照されるリポジトリを操作するための便利なスクリプトです。

アップデート

単一のコマンドで純粋な git を使用してこれを行うことはできませんが、ほとんどの作業を自動的に行う bash スクリプトを作成し、それを git フックと組み合わせて自動化することができます。

競合の解決を自動的に処理することはできず、何か問題が発生した場合、4 つの個別のリポジトリの状態を把握しようとすることになります。

ただし、このようなソリューションはお勧めしません。それは過度に複雑で壊れやすい可能性があり、堅牢で柔軟で汎用的なものにするためにカバーしなければならない可能性の数は膨大です。

于 2013-05-29T14:05:41.327 に答える