git
依存関係として別のものがあるsubmodule
リポジトリがあります。私のプロジェクトのルート(.git
、.gitsubmodules
などがあります)で
git submodule update
これは次のメッセージで失敗しました。
サブモジュールパス「src/framework」で取得されましたが、cc8c38e9d853491c672452d8dbced4666fc73ec8が含まれていませんでした。そのコミットの直接フェッチに失敗しました。
ここで、src/framework
は私のプロジェクトのサブディレクトリ(PROJECT_ROOT/src/framework
)であり、サードパーティのリポジトリが置かれる場所でなければなりません。指定されたコミットハッシュは有効なものです。
git clone --recursive <my-repo>
も試しましたが、失敗します。
.gitsubmodules
の内容は
[submodule "src/framework"]
path = src/framework
url = [email protected]:gh/framework.git
それに加えて、次の重要な事実に注意する必要があります:framework
リポジトリの最近の更新のためにコードが壊れるので、問題なく動作している特定のバージョンを取得する必要があります。
はい、Webブラウザでリンクをたどることができます(GitLabを使用)
ただし、そのコミットを含めて、そのレポのクローンを作成できますか?
GitLabには 許可レベル があり、これによりアクセスが制限されるため、適切なユーザーと、上記のuser home directory/.ssh
。
サブモジュールリポジトリを(ローカルハードドライブの任意の場所で)自分で複製できない場合、エラーメッセージが説明されます。
この問題は、私が作業していたリポジトリ内のサブモジュールとしてリンクされていたものよりも先にコミットにヘッドをリセットした人から来ました。これにより、参照が無効になりました。これを修正する方法がわかりません
サブモジュールがブランチに続くことを確認する (ここでは、たとえば、master
):
cd /path/to/parent/repo
git config -f .gitmodules submodule.bar1.branch master
次に、最後にフェッチされたコミットでサブモジュールを更新しますmaster
git submodule update --remote
--remote
option は、notスーパープロジェクトの記録されたSHA-1を使用してサブモジュールを更新しますが、サブモジュールのリモートのステータスを使用します-代わりにブランチを追跡します。
それは「did not contain cc8c38e9d853491c672452d8dbced4666fc73ec8
" エラーメッセージ。
クローン作成後に(およびエラーを受け取って)このコマンドを実行すると、問題が解決しました。
git submodule update --force --recursive --init --remote
もちろんこれは良い解決策ではありません。根底にある問題を見つけて解決する方が良いのですが、急いでいる人がいれば、私にとってはうまくいきました。
私にとっての問題は、サブモジュールがgithubでホストされている個人(クローン)リポジトリを指していることでした。
同じサブモジュールへの参照を含む複数のホストリポジトリがありました。これらのリポジトリのいずれかでサブモジュールのHEADを変更し、リポジトリをコミットしました。残念ながら、新しいサブモジュールをプッシュすることを怠っていましたHEADリポジトリの他のインスタンスには、git submodule update
などの後でも、最新のヘッドのレコードがありませんでした。