Gitサブモジュールを使用することは、私の開発ワークフローにとってはやや面倒だと感じています。 GitサブツリーとGitslaveについて聞いたことがあります。
どちらが最適かは、ニーズ、要望、ワークフローによって異なります。ある意味では準同型であり、特定のタスクで他のものよりも使いやすいものもあります。
gitslave は、サブプロジェクトをスーパープロジェクトとほぼ同じ時間で制御および開発し、さらに通常はすべてのリポジトリを同時にタグ付け、ブランチ、プッシュ、プルなどする場合に便利です。時間。 gitslaveは、私が知っているウィンドウでテストされたことはありません。 Perlが必要です。
git-submodule は、サブプロジェクトを制御しない場合、またはサブプロジェクトが変更された場合でも特定のリビジョンでサブプロジェクトを修正したい場合に適しています。 git-submoduleはgitの標準部分であるため、Windowsで動作します。
git-subtree は、gitの組み込みサブツリーマージ戦略のフロントエンドを提供します。単一リポジトリの「統合された」git履歴が必要な場合に適しています。サブツリーのマージ戦略とは異なり、変更を異なる(ディレクトリ)ツリーにエクスポートして元のプロジェクトに戻すのは簡単ですが、gitslaveやgit-submoduleの場合ほど自動ではありません。
repo は、理論上はgitslaveに似ていますが、私が見つけたAndroid以外の操作についてはあまり文書化されていません。 Google Android開発モデルに専念しており、少数のgitコマンドのみをネイティブでサポートします(ただし、任意のコマンドを実行できます)。また、限定的なネイティブサポートはサポートしません。ブランチにプッシュしてチェックアウトするための集中リポジトリは、かなり難しいようです。
kitenetの mr は、複数のバージョン管理システムを使用している場合に使用したいものですが、最も一般的な分母のアプローチのため、gitのみのスーパープロジェクトに限定されています。任意のコマンドを実行する方法はありますが、それらはあまり統合されていません。
さまざまな言語で依存関係があるプロジェクトでGitサブモジュールを使用すると、同様の問題が発生しました。それらに対処するために、MDLR(「モジュラー」)と呼ばれるツールを構築してオープンソース化しました。 GitHub repo の指示/ダウンロードでインストールして依存関係を管理できます
現在、サードパーティのライブラリを関連付けるだけでなく、開発にサブモジュールを使用しています。特にマージまたはリベースの競合のソースである場合、サブモジュールを使用して作業を楽にする方法がいくつかあります。 ls-treeを見て、サブモジュールの競合に関係する2つのコミットを取得します。これはおそらく、人々が対処するためのサブモジュールの最も難しい部分です。今のところ、スクリプティングを使用すると、作業がはるかに簡単になります。 Gitの将来のバージョンでは、それらに対処するためのネイティブサポートが改善されるはずです。
お役に立てれば。