2

私は、git リポジトリに保持する予定の新しいプロジェクトに取り組んでいます。CVSでこれを行う方法は知っていますが、gitには少し慣れていないため、いくつかの提案を使用できます。

このプロジェクトは、互いに通信し、ペアとしてパッケージ化された 2 つの組み込みデバイス用のファームウェアです。両方のデバイスに、コードの生産バリアントと製造バリアントがあります。両方のデバイス プロジェクトには、ハードウェアのさまざまなビット (LED の点滅など)、またはハードウェア関連のコード (ドライバーなど) を実行するためのサブ/兄弟プロジェクトが多数あります。ほとんどのコードはすべて共通です。

また、検証によって一方の変更が他方に送り返されるのを防ぐために、本番用と製造用のファームウェアを互いに独立して改訂できるようにする必要があります。

以下は私の既存のディレクトリレイアウトです。それは有機的に成長し、私が git を使用することになる前に大部分が敷設されました。より良い方法があれば、全体を再編成することを嫌いません。

  • プロジェクトルート
    • 含む
    • ソース
    • デバイスA
      • 製造
      • 製造業
      • まばたき
      • ボタン
      • ...
    • デバイスB
      • 製造
      • 製造業
      • まばたき
      • ボタン
      • ...

私はブランチにプロダクションとマニュファクチャリングを配置したいと思っていますが、通常、特定の日に両方の作業を行っており、git では一度に 1 つのブランチしかアクティブにできません。そして、まばたきやボタンなどは実際には製造や生産ではないため、どうすればよいかわかりません。提案?

説明:

  • コードの製造バージョンは、製造ラインでハードウェアをテストするために使用されます。製品コードは、ハードウェアがテスト ステーションを通過した後に読み込まれ、顧客に出荷されます。この 2 つは少なくとも 75% は似ていますが、製造ラインを停止することなく生産コードのバグを修正できるように、独立している必要があります。

  • DeviceA と DeviceB はペアであるため、両方のコード セットがタグ付けされ、同じリリース バージョン番号で同時にリリースされます。

4

2 に答える 2

2

ハードウェア/ソフトウェアのコードサインを管理するために git を使用したので、役立つアドバイスがいくつかあるかもしれません。

経験則として、作業中のリビジョンに関係なく相互運用できる設計の部分がある場合は、これらに対して個別の git リポジトリを作成することをお勧めします。

例を挙げると、ハードウェア設計とは別のリポジトリにドライバーを配置したいとします。これは、ソフトウェアとハ​​ードウェアの間のインターフェイスが非常に明確であり、分解する自然な継ぎ目であるためです。さらに、同じドライバー バージョンがデバイスのさまざまな設計段階に適用されます。

デザインのプロダクション エディションとマニュファクチャリング エディションの意味がわかりません。開発版と安定版を分離したい場合は、これらに別々のブランチを用意しても問題ありません。

git でのブランチとマージは可能な限り安価であり、ブランチ間の切り替えは非常に高速です。したがって、ブランチを持つことに対するペナルティはありません。ブランチ間で互換性のある変更を選択するのもかなり簡単です。ソフトウェアの世界で通常見られるアプローチ (リリース用のブランチと 1 つの HEAD) は、かなりうまく機能します。

おそらく、デモ/テスト モジュール (ブリンカーなど) を、デモ/テストするモジュールと一緒に保持する必要があります。これは、デモ カップリング インターフェイスが頻繁に変更されやすいためです。このようにして、デモ コードを実際のデバイスと同期させておく必要があります。これにより、長期的に設計の安定性が向上します。

余談ですが、FPGA の世界では、通常、大型デバイスでプロトタイピングを行い、制限付きデバイスで製品化しています。このように、モジュールは、独立して開発された 2 つの種類を持つことになります。これらは実質的に異なるエンティティであるため、おそらくこれらの種類を別々のリポジトリに保持することをお勧めします。この場合、2 つの間で共有されるコード (再利用できる移植可能なコードが常に存在します) は、別のリポジトリに存在し、別のライブラリになることができます。特にコードサイズがそれを正当化する場合。

次に、git サブモジュールを使用して、前述のすべてのモジュールをバインドできます。

于 2009-05-19T07:00:22.750 に答える
1

サブモジュールを使用できると思います。これがどのように機能するかは100%確信が持てませんが、共通コード(LEDとユーザーインターフェイス、またはそれぞれに1つのリポジトリなど)のgitリポジトリを作成し、このリポジトリのコピーをリポジトリのサブモジュールとして含めることができますA、および B のリポジトリのサブモジュールとしての別のコピー。

共通部分を変更したい場合は、現在作業中のユニットで行ってください。完了したら、他の製品のサブモジュールに変更をプッシュします。より快適に感じる場合は、共通部分のレポを別の場所に置くこともできます。

要約すると、再利用可能なコードを別のリポジトリに配置して、再利用できるようにします。

私はサブモジュールの王様ではありませんが、すぐにあなたと同じことをする必要があります. だから私はあなたがそれをどのように機能させるかに興味があります。

于 2009-05-19T06:57:39.213 に答える