2012-01-16 7 views
1

何らかの理由で、2つ(またはそれ以上)のバージョンに断片化された特定のプログラミング言語でプロジェクトが実装されているとします。プラットフォームの2つのバージョンを満たすプロジェクトを維持する適切な方法は何ですか?

これらの2つのバージョンは、プロジェクトの一部の機能を実装するさまざまなメカニズムを提供します。したがって、同じコードはバージョン間で移植できません。

この状況をgitリポジトリでどのように整理するのですか?それでも、ブランチ内の特定のバージョンのディレクトリを保持しますか?同じリポジトリにブランチが重複していますか?または、バージョンごとに異なるリポジトリを使用しますか?

これは、プログラミング言語に少し依存するが、あなたのコードでは有意な差で二つのバージョンの結果の差は、その後、私がしたい場合は
+1

違いを両方のバージョンで調整する必要があるようです。 – robert

答えて

2

  1. が実装機能を表すインタフェースを定義異なる必要があります。
  2. そのインターフェイスの2つの実装を記述します。
  3. 言語とプロジェクトに応じて、ビルド時または実行時に適切なものを選択します。

2つの異なる実装を分かれば、ブランチ内の同じインターフェースの2つの異なる実装を保つのと同じように、同じブランチにそれらを保持することができます。

些細な違いのために、例えば、少し異なるフラグを関数に渡す必要がある場合は、おそらくすべての問題には行かないでしょう。代わりに、私はただの同等行いたい:コードが発展するよう

#if NEW_PLATFORM 
    // enable useful new flag 2 
    #define FLAGS 0x11 
#elif OLD_PLATFORM 
    // we can live without flag 2 if it's not supported 
    #define FLAGS 0x1 
#else 
    #error what platform even is this? 
#endif 

をしかし、注意してください、些細な違いが成長することができ、あなたは、プラットフォームの検出コードの混乱で終わります。プラットホームをに最大での場所でテストすることを目指すべきです。ビルドオプションを使ってすべてを制御するだけでも良いでしょう。上記の場合、特定のプラットフォームのバージョンに依存していることを明示的に記述するのではなく、USE_USEFUL_NEW_FLAGと呼ぶことができます。次に、どのプラットフォームがどの機能をサポートしているかを知るために、ビルド設定に従います。

+0

私は、コードでは解決できない状況への答えを期待していましたが、バージョンコントロールによってのみ解決できました。しかし、少し反映された後、おそらくあなたのソリューションは私にとって役に立ちます。ありがとうございました! – borges

+0

@borges:公正であるように、私はgitが一般的にどのように使われているのかわからないので、望むならばあなたが*単一のブランチを使うことができる方法を提示します。おそらく、Linuxにはプラットフォーム固有のコードがどのように管理されているのかというコンベンションがあります:gitがその役割を果たしているのであれば、おそらくそれをコピーする必要があります。 –

1

これはブランチで達成できます。マージ中にそれらの間で変更できるものと変更できないものを判断する必要があります。

git merge --no-commit 

最終的なコミットステップは行いません。これにより、ソリューションがまだ動作しているかどうかを調べることができます。一度作業したら、

git merge 

という既定のメッセージがあるはずです。そのままにしておくこともできますし、この特定のバージョンを機能させるために行ったことについての情報を追加することもできます。

関連する問題