6

プロジェクトディレクトリにgitリポジトリのツリーがあるとします。

Projects/
+A/
|+.git/
+B/
|+.git

Projects.gitプロジェクトの内容を追跡せず、その存在とステータスのみを追跡する git リポジトリをセットアップしたいと思います。このリポジトリを複製する人は、複製されていないリポジトリなどのスケルトンのみを持ち、AそれらBが同期しているかどうかに関係なく個別にアクティブ化する必要があります。一般的なワークフローは次のようになります。

  • 初回セットアップ:git clone server:Projects.git
  • プロジェクトをアクティブ化しますA。これにより、プロジェクトのクローンも作成されます
  • これで、すべての について、の両方の情報を更新する必要があるかgit-push/pullどうかに関係なく。非アクティブでローカルに空であるため、関連するものはすべて無視する必要がありますProjects/Projects/AA.git Projects.gitAB
  • プロジェクトをアクティブ化Bし、それも複製します
  • これで、 any git-push/pullinもとProjectsの両方でそうする必要がありますが、プッシュ/プル インは影響を受けません。ABAB
  • プロジェクトを非アクティブ化しますA。これにより、(検証後にA.gitが不要であることが確認された後git-push) ローカル ディレクトリが空になり、A影響はありません。Project.git

これをどのように治療するのが最善ですか?私の現在のアプローチはフックマジックですが、サブモジュールでこれを達成できるかどうか、または他のソリューションを使用する必要があるかどうかを確認するには、 git サブモジュールに十分に精通していません。

4

3 に答える 3

3

これは実際にサブモジュールの目的です:
各サブレポの正確な構成 (つまり、正確なコミット SHA1) を追跡します。

「 git clone --recursive and checkout master on all submodules in a single line? 」で詳しく説明されているように、親リポジトリとそのすべてのサブモジュールを 1 つのコマンドで複製できます。

「サブモジュールの本質」で説明されているように、それぞれがDETACHED HEADモード (最初にローカル ブランチをチェックアウトする必要があります) であり、最初にサブモジュールをコミットしてプッシュする必要があることを認識していれば、それらを変更できます。親リポジトリに戻る前に、そこにコミットしてプッシュします(新しい構成、つまり新しいサブモジュールSHA1を記録するため)

そのサブモジュールへの親リポジトリ参照を損傷することなく、サブモジュール ディレクトリを削除できます。


OP Tobias Kienzler の コメント:

それは私が望むもののように聞こえますが、この場合、切り離されたヘッドはかなり役に立ちません-サブモジュールを複製するとき、それはマスターヘッドにあるはずです。
基本的に、すべてのプロジェクトのローカル インデックスを個別に複製せずに利用できるようにする方法と、「現在複製されているすべてのプロジェクトを同期する」オールインワン コマンドを探しています。

git-slaveを確認することをお勧めします:

Gitslave は、関連するリポジトリのグループ (スーパープロジェクト リポジトリと多数のスレーブ リポジトリ) を作成します。これらはすべて同時に開発され、すべての git 操作が正常に動作する必要があります。
したがって、分岐すると、プロジェクト内の各リポジトリが順番に分岐されます。
同様に、コミット、プッシュ、プル、マージ、タグ付け、チェックアウト、ステータス、ログなどの場合。各 git コマンドは、スーパープロジェクトとすべてのスレーブ リポジトリで順番に実行されます。

于 2012-10-08T10:32:10.573 に答える