Gitサブモジュール。スーパープロジェクトの新しいクローンを引き込む


87

OK。だから私はこれを舐めたと思った...しかし今は...。

GitHubの小さなライブラリをサブモジュールとして1つ含むプロジェクトがあります。そのスーパープロジェクトの元のバージョンでは、サブモジュールは期待どおりに機能しています。

ただし、スーパープロジェクトのクローンを作成し、「git submodule init」と思ったとおりに実行し、サブモジュールのディレクトリを表示しましたが、空です。

私が今やろうとしたら

git submodule update

私は得る

fatal: Needed a single revision 
Unable to find current revision in submodule path 'external_libraries/BEACHhtml'

やってみたら

git submodule foreach git pull

私は得る

Entering 'external_libraries/BEACHhtml'
fatal: Where do you want to fetch from today?
Stopping at 'external_libraries/BEACHhtml'; script returned non-zero status.

私の.git / configには、これがあります:

[submodule "external_libraries/BEACHhtml"]
    url = git@github.com:interstar/BEACHhtml.git

私の.gitmodulesにはこれがあります:

[submodule "external_libraries/BEACHhtml"]
path = external_libraries/BEACHhtml
url = git@github.com:interstar/BEACHhtml.git

誰が何が欠けているのか考えましたか?

回答:


189

以下のコメントによると、現在(2019年)最新のGITクライアントをインストールすることで問題を解決できるようです。これは今のところ最良の解決策になるはずです。


私はあなたと同じ問題を抱えています。これはgitのバグです:http//git.661346.n2.nabble.com/BUG-git-submodule-update-is-not-fail-safe-td7574168.html

要するに、あなたの問題のために、試してみてください:

# rm -rf external_libraries/BEACHhtml
# git submodule update

以前のチェックアウトフォルダに問題があるようです。それを削除して、もう一度更新すると問題が解決します。


1
私にとって、フォルダをロックしたままにしていたのは、ハングしたgit-fetchでした
Mihai Timar 2012

31
サブモジュールのワークツリー(ext/blah)とGIT_DIR.git/modules/ext/blah)の下の一致するフォルダーの両方を削除する必要がありました。
Tobu

2
私の特定のケースgit submodule updateでは、誰かがRSAキーを受け入れる必要があるため、CIサーバーで失敗し続けました(CIサーバーは通常https接続を使用し、サブモジュールがssh接続をプルしたのはこれが初めてでした)。それが誰かの頭を掻く時間を節約することを願っています!
Maverik 2017年

8
2016年もこのバグは続いています:(
Paulo Neves

6
2017年のチェックイン、まだ存在します。
william.taylor.09 2017

4

私はこの問題を抱えていました(ネットワークが不安定なため、このようにサブモジュールのチェックアウトが削除されました)、このスクリプトを作成して解決しました(名前を付けてgit-submodule-fix実行できるようにしましたgit submodule-fix

#!/bin/bash 

for arg 
do 
  echo $arg 
  find . -name "`basename $arg`" | grep "$arg\$" | xargs rm -fr
done

あなたがこれを得るならば、すなわちから git submodule update

fatal: Needed a single revision
Unable to find current revision in submodule path 'some/submodule/path'

行う

git submodule-fix some/submodule/path
git submodule update

3

2つのディレクトリを削除し、サブモジュールを再フェッチすることで解決しました。

  1. ファイルに移動しexternal_libraries/BEACHhtmlて調べ.gitます。その内容は次のようなものでなければなりませんgitdir: ../../.git/modules/external_libraries/BEACHhtml
  2. external_libraries/BEACHhtml.git/modules/external_libraries/BEACHhtmlディレクトリの両方を削除します。

これからはgit submodule updateエラーなしで実行されます。


サブモジュールが再初期化さgit submodule initれるgit submodule updateように前に実行する必要がある場合があります。そうすれば、これは機能します。
ペレット2018年

1

2019年以降に読んでいる場合は、gitクライアントを更新するだけです。私のために働いた。


0

差分ツールを使用して、機能している元のクローンとこのクローンを比較します。また、何がgit submodule出力されますか。実行する前に、各リポジトリで同じブランチを指していることを確認してください。

サブモジュールが定義されていないブランチまたは古いリビジョンに切り替えたのではないかと思われます。

お役に立てれば


0

プロジェクトのサブモジュールでも同じ問題が発生しました。サブモジュールを個別に複製しようとすると、うまく機能しました。

上記のすべての答えを試しましたが、成功しませんでした(git submodule update、...、サブモジュールフォルダーの削除、...)。

この問題は、git(Git-1.7.11-preview20120710)を最新バージョン(Git-1.8.1.2-preview20130201)に更新した時点で解消されました。不思議なことに、私の同僚はさらに古いバージョンを持っていて、問題なく動作しましたが、彼らはMacを使用していました。私はWin764ビットを使用しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.