いくつかのサブモジュールを含むプロジェクトがあります。それらの多くは、カスタムmodのブランチを追加したGitHubフォークから複製されています。一般的な設定は次のようになります。
ローカルフォルダー内:MyProject1 / Frameworks / SomeAmazingRepo /
$ git branch -vva
*my-fork 123456 [my-fork/my-fork] Latest commit msg from fork
master abcdef [origin/master] Latest commit msg from original repo
remotes/my-fork/my-fork 123456 [my-fork/my-fork] Latest commit msg from fork
remotes/my-fork/master abcdef [origin/master] Latest commit msg from original repo
remotes/origin/HEAD -> origin/master
remotes/origin/master abcdef [origin/master] Latest commit msg from original repo
$ git remote -v
my-fork git@github.com:MyUser/SomeAmazingRepo.git (fetch)
my-fork git@github.com:MyUser/SomeAmazingRepo.git (push)
origin git://github.com/OriginalOwner/SomeAmazingRepo.git (fetch)
origin git://github.com/OriginalOwner/SomeAmazingRepo.git (push)
私git clone --recursive
のプロジェクトは新しいスピンオフプロジェクトを開始し、それが再発し始めると、これらのリポジトリの保存されたコミットが見つからないと主張するエラーを吐き出します。調べてみると、リモートが追加されておらず、ブランチがマスターに残っている(空になっている)ようです...
ローカルフォルダー内:MyProject2 / Frameworks / SomeAmazingRepo /
$ git branch -vva
*master abcdef [origin/master] Latest commit msg from original repo
remotes/origin/HEAD -> origin/master
remotes/origin/master abcdef [origin/master] Latest commit msg from original repo
$ git remote -v
origin git://github.com/OriginalOwner/SomeAmazingRepo.git (fetch)
origin git://github.com/OriginalOwner/SomeAmazingRepo.git (push)
唯一の解決策は、リモートをすべてのリポジトリに手動で追加することです(非常に面倒です)。
上記のように追跡ブランチが2つあるが、リモートが1つしかない場合(origin => my github fork)にも同様の問題があります。このような場合、コミットを見つけてチェックアウトしますが、追跡ブランチの再作成に失敗し、「ぶら下がっている」コミットが残ります...警告が表示されないため、非常に怖いです。
サブモジュールのリモートとブランチを確実に再作成するために、プロジェクトのクローンを作成するにはどうすればよいですか?