社内の開発者チーム向けに git ワークフローをセットアップしようとしています。
次の制約が適用されます。
- チェックインしたいのは、プロジェクト自体 (バイナリ :-() ではなく、そのエクスポートです。基本的に、これはプロジェクトのレイアウト (エクスポートによって表される) が与えられ、修正されることを意味します。
- 各「プロジェクト」には、「デバイス」や「ライブラリ」などのデータが存在します。
- 「デバイス」と「ライブラリ」には、「ユニット」と、場合によっては追加のデータが含まれています。
- これらのエクスポートは、各デバイス、ライブラリ、およびユニットのコンテンツを含む一連の xml ファイルです。
- 単なるデバイス、ライブラリ、またはユニットではなく、完全なプロジェクトのみがエクスポートされます。
- 各デバイス、ライブラリ、およびユニットには、そのコンテンツがフォルダー (サブフォルダーを含む) に含まれています。
- リポジトリは、サーバーと各ユーザーのコンピューターのネットワーク フォルダーに存在するものとします (つまり、各リンクのタイプは file:// です)。
- リモート アクセスは必要ありません。
- ユーザー数が非常に少ない (<10)
- 私たちの管理下にないリポジトリはありません
プロジェクトのエクスポートは次のようになります。
/exportFolder
/exportFolder/
device1 /exportFolder/device1/
unit1 /exportFolder
/device1/unit1/いくつかのファイル、おそらく他のサブフォルダー
/exportFolder/
device1/unit2 /exportFolder/device1/unit2/いくつかのファイル、おそらく他のサブ
フォルダー
/exportFolder
/device1/otherもの、おそらくサブフォルダー
/exportFolder/device1/各ユニット
(他のデバイス)
への相対リンクを含むファイル
/exportFolder/library1
/exportFolder/library1/unit1
/exportFolder/library1/unit1/いくつかのファイル、おそらく他のサブフォルダー
/exportFolder/library1/ unit2
/exportFolder/library1/unit2/いくつかのファイル、おそらく他のサブフォルダー
/exportFolder/library1/other のもの、おそらくサブフォルダー
/ exportFolder
/library1/index ファイルには各ユニット
(他のライブラリ)
への相対リンクが含まれています
(リンクはサブフォルダーを離れない場合があります。つまり、「..」で始まる絶対リンクまたは相対リンク)
再利用を有効にするために、次のように各リポジトリを設定したいと思いました:
~/repositoriesFolder/projects/project1
~/repositoriesFolder/projects/project2
...
~/repositoriesFolder
/devices/device1 ~/repositoriesFolder/devices/device2
...
~/repositoriesFolder /libraries/library1
~/repositoriesFolder/libraries/library2
...
~/repositoriesFolder/units/unit1
~/repositoriesFolder/
units/unit2
...
プロジェクト内のデバイスとライブラリは、それぞれのリポジトリに常駐する必要があるため、プロジェクトごとにサブモジュールにするつもりでした。各ライブラリおよびデバイスのユニットは、それらを含むデバイスまたはライブラリに存在するか、サブモジュールとして参照され、独自のリポジトリに格納されます。これは、各ユニットに付随できるメタデータに保存されます。
この repositoriesFolder レイアウトは、/repositoryServer/user1/ (ユーザー 1 からマスターにマージされる変更を含む) /repositoryServer/user2/ (ユーザー 2 からマスターにマージされる変更を含む) のサーバー (すべてベア リポジトリ) にも存在します。 /repositoryServer/main/ (メイン ブランチを含む)
私が意図するワークフローは次のようになります。
- 統合マネージャーはプロジェクトを作成し、それを /repositoryServer/main/* にプッシュします
- すべてのユーザーは、プロジェクト、デバイス、ライブラリ、およびユニットを /repositoryServer/main/* から複製/更新します。
- サブモジュールは、ローカル リポジトリを指す必要があります。これは、ユーザーがユニットにバグを見つけた場合、サーバーに接続していなくても、それを修正して、このユニットを含む他のプロジェクトで使用できるようにするためです。
- 変更を ~/repositoriesFolder/* から /repositoryServer/user1/* にプッシュします。
- 統合マネージャーは /repositoryServer/user*/ から変更をプルし、それらをローカルでマージ/解決して、/repositoryServer/main/ にプッシュします。
- 2に行く
では質問です ;-):
- このワークフロー アプローチは実行可能ですか? 他の選択肢はありますか?
- どうすればこれを達成できますか: ユーザーが空のローカル リポジトリ フォルダーを持っていると仮定しましょう。このユーザーがサーバーから最初のプロジェクト「project1」をフェッチした後 (デバイス「device1」のみを含み、単一のユニット「unit1」のみを含む)、ユーザーのコンピューターで次の設定を行います。
- 以前は空だったローカル リポジトリ フォルダーには、3 つのリポジトリがあります。
- /プロジェクト/プロジェクト1
- /デバイス/デバイス1
- /ユニット/ユニット1
- project1 の device1 はサブモジュールであり、対応するローカル リポジトリを指します。
- device の unit1 はサブモジュールであり、対応するローカル リポジトリを指します
- たとえば project1/device1/unit1/someFile への変更は、2 つのローカル リポジトリと /repositoryServer/user1/ のリポジトリに簡単にプッシュできるはずです。
- 変更の完全なフロー:
- プロジェクト 1 のデバイス 1 のユニット 1 の変更
- "export" => ~/repositoriesFolder/projects/project1 の変更
- ~/repositoriesFolder/projects/project1 の「commit」 => ~/repositoriesFolder/devices/device1 の変更
- ~/repositoriesFolder/devices/device1 の「何らかのコマンド (おそらく自動的に)」 => ~/repositoriesFolder/units/unit1 の変更
- 「何らかのコマンド」=>すべての変更を/repositoryServer/user1/にプッシュします