web-dev-qa-db-ja.com

gitが特定のコミットに対して特定の有効なサブモジュールの取得に失敗する理由と修正方法

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リポジトリの最近の更新のためにコードが壊れるので、問題なく動作している特定のバージョンを取得する必要があります。

29
rbaleksandar

はい、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" エラーメッセージ。

20
VonC

クローン作成後に(およびエラーを受け取って)このコマンドを実行すると、問題が解決しました。

git submodule update --force --recursive --init --remote

もちろんこれは良い解決策ではありません。根底にある問題を見つけて解決する方が良いのですが、急いでいる人がいれば、私にとってはうまくいきました。

6

私にとっての問題は、サブモジュールがgithubでホストされている個人(クローン)リポジトリを指していることでした。

同じサブモジュールへの参照を含む複数のホストリポジトリがありました。これらのリポジトリのいずれかでサブモジュールのHEADを変更し、リポジトリをコミットしました。残念ながら、新しいサブモジュールをプッシュすることを怠っていましたHEADリポジトリの他のインスタンスには、git submodule updateなどの後でも、最新のヘッドのレコードがありませんでした。

0
EoghanM