2017-11-08 6 views
1

gitの助けを借りてモデリング/予測タスクを開始したいと考えています。私はこれを容易にするためにgitアーキテクチャを設定したいが、いくつかの問題がある。データ更新を伴うモデリングタスクのワークフロー

目標:地域におけるモデリング作業の終わりに /サブ領域branchs(必要に応じて人間の改正、人間の改正は=コミット)、コードのどのバージョンのレビューのために利用できる予測のすべてを持っているマスターにダウンマージそれが実行されたデータセットです。後で改訂を行う必要がある場合、モデラーは、正確な予測が完了した時点から分岐して、正しい(おそらく古い)バージョンのコードで作業する必要があります。

問題:データとコードのバージョンが変更されることがあります。古いモデルの実行では、古いコード/データと互換性がないようになります(たとえば、リージョン1、コードバージョン1およびデータバージョン2を使用できますが、リージョン2、コード4およびデータ6)。プロジェクトの予測を再現できる必要があります。

私の解決策: gitの考え方に反しているようですが、データセットやコードの更新があるたびに、それをmasterに置き、ファイル名にバージョン番号を追加してください。リージョン/サブリージョンをブランチにし、すべての予測完了コミットにタグを付ける予測が完了したら、マスターにマージし、コードとデータのバージョンを示す別のファイルを追加します。リビジョンを作成する必要がある場合は、完了タグを見つけて、コードの適切なバージョンでリモデリングし、リージョンにマージしてからマスタにします。モデルを再現する必要がある場合は、作成された追加のファイルから正しいコード/データを使用してモデルを実行します。

これはgitを使ってこのプロセスを追跡する最善の方法ですか、より良い/より簡単な方法ですか?このプロセスはうまくいくのですか、それともそれに起因する意図しない問題がありますか?

答えて

1

データとコードバージョンでは、強い結合を持つが、そのカップリング内に自分自身の進化を持つファイルの2セットを持っていることを意味し

を変更することができます。

Git submodulesのための仕事です:あなたは自分の別のgitリポジトリ内のコードとデータそれぞれを入れて、あなたがメインの親レポ内の各固定SHA1を参照します。その方法を

parent/ 
    code/ 
    data/ 

、親リポジトリから、codedataの両方が変更されるブランチを作成することができます。予測が完了したら、master(親会社)にマージするものは最新のSHA1がcodedataです。

サブモジュールの関心事は、repoの正確なSHA1が親リポジトリに記録され、codeリポジトリと互換性があると考えられることです。
ファイルの名前を変更するなどの "ハック"を完全に避けることができます。

+0

「親リポジトリに記録すると、正確なSHA1 ...」と表示されるのは、後で古い予測を実行するために、そのSHA1に--softをリセットする必要があるということですか? – RayVelcoro

+0

@RayVelcoro親を自分が望むSHA1にリセットすると、親コミットによって記録されたサブモジュールがそれぞれのSHA1にリセットされます。これらのSHA1はgitlinkです:https://stackoverflow.com/a/2227598/6309とhttps://stackoverflow.com/a/17442045/6309を参照してください。 – VonC

関連する問題