2013-01-21 8 views
6

私はいくつかのソースコード(S)を共有する2つの緊密に関連するプロジェクト(AとB)を持っています。両方とも同時にリリースされ、リリース版は常に同じバージョンの共有コードを使用する必要があります。共有コードSは合理的に頻繁に変更されます。gitの2つのプロジェクト間でコードを共有

だから、それはいつかのようになります。

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

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

は私の関心事です:

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

標準的な回答のうちの1つが「git submoduleを使用する」とわかります。しかし、このアプローチについてはcriticismを読んでいます。まれにしか変わらない共有図書館にもっと設計されたような気がしました。

私はgit subtree

を使用していた読み、あまり人気のアプローチがいくつかあります別のアプローチ:Repoは、GitSlave

コード共有のこのタイプを処理するための最良の方法でしょうか?

+0

リンクは良いものではなく、サブツリーを固定しましたが、他のものを推測することはできません(gitサブモジュールと批判を使用してください) – CharlesB

+0

ありがとうございました。私は1つを除くすべてのリンクを修正しました。私はそれを挿入すると、何らかの理由でそれは間違ったリンクにリンクしている。 –

+0

あなたはマークダウンコード – CharlesB

答えて

3

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

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

開発者に古いバージョンの共有リポジトリがある場合、2行目は0以外の戻り値を持ちます。これにより、コンパイルがエラーで中止されます。その後、開発者はリポジトリを手作業で引き出して処理を進めることができます。

Sのマスターブランチをチェックするのではなく、常に開発者が使用するはずのブランチを確認することもできます。

関連する問題