2012-11-30 6 views
6

私たちは、データとコードを持ち、単一のMercurialリポジトリにバンドルされたプロジェクトを持っています。データはコードと同じくらい重要です(ビジネスロジック、入力などのパラメータが含まれています)。しかし、データファイルのフォーマットはほとんど変更されません。データファイルをコードから独立して変更するのは自然です。コードとデータを別々のリポジトリに保存するための長所と短所

統合リポジトリのメリットの1つは、複数のリビジョンを追跡する必要がないことです。以前の実行結果を再作成する必要がある場合は、システムを1つのリビジョン番号出力ログ。

1つの欠点は、複数のヘッドがアクティブな状態でデータを変更すると、手動で変更を各ヘッドにコピーしない限り、データの変更が失われる可能性があるという欠点があります。

コードとデータを別々のリポジトリに分割する他の賛否両論はありますか?

答えて

1

複数のレポ

  • 賛否

    • component-based approach(あなたが独立して別のものを進化させることができ、ファイルのグループを識別する)
    • 構成仕様:あなたあなたに必要なリファレンス(ここでは "リビジョン")をリストしますrシステムを動作させる。他のパーツを変更せずにパーツを変更する場合は、そのパーツを更新します。
    • 部分クローン:あなたはすべてのコンポーネントを必要としない場合は、あなただけ
  • 両論

    • 構成管理(お使いの場合には適用されません)あなたが欲しいものを複製することができます:あなたはその設定を追跡する必要があります(通常は親リポジトリを使って登録する必要があります。subrepos
    • あなたのケースでは、データは特定のバージョンのプロジェクトにかなり依存していますプロジェクトのイオン)

一つレポ

  • 賛否
    • system-based approach:あなたは一つのシステム(プロジェクトとデータとして、あなたのモジュールを参照してください)。
    • レポ管理:
  • 両論
    • データ伝播(あなたが言及したように、いくつかのHEADである(CANデータの意味があります)、モジュール間のすべての内の1つの
    • タイトリンクアクティブ)
    • 中間リビジョン(新しい機能を反映するのではなく、一部のデータが変更されたため)
    • 大きなクローンあなたのデータはまれ変更で)非バイナリデータの場合

を、大規模なバイナリが含まれていない限り、私はまだ同じレポでそれらを続けるだろう。

+0

非常に参考になりました。ありがとうございます。私はあなたが手動でデータの伝播を扱うことを前提としています。それを他のヘッドにコピーすることで(一度に、あるいは2つのヘッドがマージしないことに気づいたとき)? – max

+0

@max:yes、マージ(http://kiln.stackexchange.com/questions/1696/how-to)を試した後に、それらを妨げない限り(http://mercurial.selenic.com/wiki/TipsAndTricks#Prevent_a_push_that_would_create_multiple_heads) -fix-multiple-heads) – VonC

0

はい、コードとデータを区切る必要があります。バージョン管理のコードとデータベースのデータを保持します。

私はバージョン管理が大好きです。なぜなら私は10年以上も経ってからプログラマーです。私はこの仕事が好きです。

しかし、私が気づいた最後の数ヶ月の間に、データはバージョン管理にあってはならない。 Git(または他のバージョン管理システム)に精通している人にとっては、 "放置する"ことが難しい場合があります。

データベーススキーマの移行をサポートする適切なORMが必要です。移行(schemamigrationsとdatamigrations)はバージョン管理で保持されますが、データはそうではありません。

私はあなたの質問が1つまたは2つのリポジトリを使用していたことを知っていましたが、多分私の答えはあなたが別の視点を得るのを助けます。

関連する問題