私はあなたの問題に別の解決策(git-submodulesの代わり)を提案できます-gil(gitリンク)ツール
複雑なgitリポジトリの依存関係を記述および管理できます。
また、git再帰サブモジュールの依存関係の問題に対する解決策も提供します。
次のプロジェクト依存関係があると考えてください:
サンプルgitリポジトリ依存関係グラフ
次に.gitlinks
、リポジトリ関係の説明を含むファイルを定義できます。
# Projects
CppBenchmark CppBenchmark https://github.com/chronoxor/CppBenchmark.git master
CppCommon CppCommon https://github.com/chronoxor/CppCommon.git master
CppLogging CppLogging https://github.com/chronoxor/CppLogging.git master
# Modules
Catch2 modules/Catch2 https://github.com/catchorg/Catch2.git master
cpp-optparse modules/cpp-optparse https://github.com/weisslj/cpp-optparse.git master
fmt modules/fmt https://github.com/fmtlib/fmt.git master
HdrHistogram modules/HdrHistogram https://github.com/HdrHistogram/HdrHistogram_c.git master
zlib modules/zlib https://github.com/madler/zlib.git master
# Scripts
build scripts/build https://github.com/chronoxor/CppBuildScripts.git master
cmake scripts/cmake https://github.com/chronoxor/CppCMakeScripts.git master
各行は、次の形式でgitリンクを示しています。
- リポジトリの一意の名前
- リポジトリの相対パス(.gitlinksファイルのパスから開始)
- チェックアウトするgit cloneコマンドリポジトリブランチで使用されるGitリポジトリ
- 空行または#で始まる行は解析されません(コメントとして扱われます)。
最後に、ルートサンプルリポジトリを更新する必要があります。
# Clone and link all git links dependencies from .gitlinks file
gil clone
gil link
# The same result with a single command
gil update
その結果、必要なすべてのプロジェクトを複製し、適切な方法で相互にリンクします。
いくつかのリポジトリのすべての変更を子リンクされたリポジトリのすべての変更とともにコミットする場合は、1つのコマンドで実行できます。
gil commit -a -m "Some big update"
プル、プッシュコマンドは同様に機能します。
gil pull
gil push
Gil(gitリンク)ツールは、次のコマンドをサポートしています。
usage: gil command arguments
Supported commands:
help - show this help
context - command will show the current git link context of the current directory
clone - clone all repositories that are missed in the current context
link - link all repositories that are missed in the current context
update - clone and link in a single operation
pull - pull all repositories in the current directory
push - push all repositories in the current directory
commit - commit all repositories in the current directory
詳細をgitの再帰的なサブモジュールの依存関係の問題。