12

一部のソース コード (S) を共有する 2 つの密接に関連するプロジェクト (A と B) があります。どちらも同時にリリースされ、リリースされたバージョンは常に同じバージョンの共有コードを使用する必要があります。共有コード S は妥当な頻度で変更されます。

したがって、次のようになります。

  • バージョン 1 は S バージョン 1 を使用します
  • B バージョン 1 は S バージョン 1 を使用します
  • バージョン 2 は S バージョン 2 を使用します
  • B バージョン 2 は S バージョン 2 を使用します

これを git (および/または git を使用するいくつかのツール) で処理する最良の方法は何ですか?

ここに私の懸念があります:

  • プロジェクト A とプロジェクト B は別々のリポジトリにある必要があります (これらは関連していますが、それらの間で自由にコードをやり取りしたくありません)
  • 共有コードが 1 つのプロジェクトで更新された場合、別のプロジェクトで自動的に更新される必要があります (開発者が何かをするのを忘れて、古いバージョンの共有コードになってしまうような状況は望んでいません)。

私が理解しているように、標準的な答えの1つは「gitサブモジュールを使用する」です。しかし、私はこのアプローチについていくつかの批判を読みました。めったに変更されない共有ライブラリ向けに設計されているように感じました。

私が読んだ別のアプローチは、gitサブツリーを使用していました

また、あまり人気のないアプローチがいくつかあります: RepoGitSlave

この種のコード共有を処理するには、どのような方法が最適でしょうか?

4

1 に答える 1

4

非常に簡単な解決策は、A、B、および S の 3 つのリポジトリを使用することです。プロジェクト リポジトリ A および B は、開発者がリポジトリにプッシュされた最新のコードを使用していることを確認するために Makefile にチェックを入れます。

check:
      git fetch /path/to/S master:tip
      git branch --contains tip | grep -q master

開発者が古いバージョンの共有リポジトリを使用している場合、2 行目の戻り値はゼロ以外になります。これにより、エラーが発生してコンパイルが中止されます。その後、開発者はリポジトリを手動で取得して続行できます。

S のマスター ブランチをチェックする代わりに、開発者が常に使用する必要があると定義されている他のブランチをチェックすることもできます。

于 2013-01-22T07:08:14.790 に答える