web-dev-qa-db-ja.com

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

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 = [email protected]:interstar/BEACHhtml.git

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

[submodule "external_libraries/BEACHhtml"]
path = external_libraries/BEACHhtml
url = [email protected]:interstar/BEACHhtml.git

誰が何が欠けているのか知っていますか?

82
interstar

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


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

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

# rm -rf external_libraries/BEACHhtml
# git submodule update

以前のチェックアウトフォルダーに何か問題があるようで、削除し、再度更新すると問題が解決します。

181
Han He

私はこの問題を抱えていました(不安定なネットワークなので、このようにサブモジュールのチェックアウトを落としました)。このスクリプトを作成して解決しました(名前は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
4
epatel

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

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

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

3
Lu55

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

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

Gitを(Git-1.7.11-preview20120710から)最新バージョンに(Git-1.8.1.2-preview20130201に)更新すると、問題はなくなりました。奇妙なことに、私の同僚は古いバージョンさえ持っていて、問題なく働いていましたが、彼らはMacにいました。 Win7 64ビットを使用しています。

0
David Lukac

diffツールを使用して、動作している元のクローンとこれを比較します。また、git submodule出力。行う前に、各リポジトリの同じブランチを指していることを確認してください。

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

お役に立てれば

0
Adam Dymitruk

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

0
vehsakul