web-dev-qa-db-ja.com

サブモジュールではないパスの.gitmoduleにサブモジュールマッピングが見つかりません

lib/three20にサブモジュールを持つプロジェクトがあります。

私の.gitmoduleファイルは次のようになります。

[submodule "lib/three20"]
    path = lib/three20
    url = git://github.com/facebook/three20.git

私は過去にこれをエラーなしで複製しました(git submodule initの後にgit submodule update)、そしてそれはしばらくの間働いていました。

これを新しいマシンに複製しようとしたところ、git submodule initでこのエラーが発生しました。

No submodule mapping found in .gitmodules for path 'Classes/Support/Three20'

そのパスはXcodeの空のフォルダで、他のディレクトリからプロジェクトを格納するために使用します。これは.gitmodulesファイルの一部ではないので、このパスをどこから取得しているのかわかりません。

何か案は?

291
Ben Scheirman

rajibchowdhury回答 (投票済み)に続いて、git rmを使用してください =推奨される/コマンドは、 特別なエントリを削除するためのものです サブモジュールを示すインデックス内の/ (特別モードの160000を持つ 'フォルダ') 。

その特別なエントリパス.gitmoduleで参照されていない場合(元の質問の 'Classes/Support/Three20'のように)、 "を避けるためにそれを削除する必要がありますパス.gitmodulesにサブモジュールマッピングが見つかりません "というエラーメッセージが表示される.

サブモジュールを参照しているインデックス内のすべてのエントリを確認できます。

git ls-files --stage | grep 160000

前回の回答(2010年11月)

最初のサブモジュールを正しく宣言していない可能性があります(つまり、 私の以前の答え で説明されているように、末尾に '/'を付けずに)。あなたの.gitmoduleにはそれで問題ないように見えるパスがありますが)。

このスレッド は次のように述べています。

新鮮なクローンから 'git submodule init'を実行したときに同じエラーが発生しますか?
もしそうなら、あなたは何か問題があります。

サブモジュールがない場合は、.gitmodules、および.git/config内のサブモジュールへの参照をすべて削除し、Pikimalディレクトリの.gitディレクトリがないことを確認してください。
それで問題が解決する場合は、チェックインして、あなたのクルーズ作業コピーに同じことをします。

明らかに、あなたのメインの.gitmodulesファイルを削除しないで、あなたの作業ツリーの中の他の余分な.gitmodulesファイルの世話をしてください。


それでも "不正なサブモジュールの初期化"のトピックでは、 Jefromi は実際にgitlinksであるサブモジュールについて言及しています。

このようなディレクトリを実際のサブモジュールに変換するには、 追跡されていないコンテンツの追跡方法 を参照してください。

279
VonC

パス 'OtherLibrary/MKStore'の.gitmodulesにサブモジュールマッピングが見つからない場合

$ git submodule update --init

なぜエラーが発生するのかわかりませんでした。ちょっと時間をかけて、stackoverflowで答えを見つけた後。

$ git rm --cached OtherLibrary/MKStore

その後、サブモジュールを再度更新してください。それはうまくいっています。

http://en.saturngod.net/no-submodule-mapping-found-in-gitmodules

372
rajibchowdhury

私がSourceTreeを使って何かをするとき、それはこのメッセージを吐き出すでしょう。
私が遭遇したメッセージ:

git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree submodule update --init --recursive
No submodule mapping found in .gitmodules for path 'SampleProject/SampleProject'
Completed with errors, see above

私のシナリオは、プロジェクトディレクトリに含まれる。gitフォルダを誤って適用したことです。
SourceTreeはこのフォルダをgitサブモジュールと見なしましたが、実際はそうではありませんでした。

私の解決策はそれを削除するためにコマンドラインを使用することです。

$ git rm -r SampleProject --cached
$ git commit -m "clean up folders"

gitのゴミを取り除き、清潔に保ちます。

20
Johnny

私はこの問題を解決しました。最初に私はこれをやろうとしました:

git submodule add --branch master [URL] [PATH_TO_SUBMODULE]

マスターブランチを複製したい場合は--branchオプションの指定を使用しないでください。それはこのエラーを投げます:

fatal: Cannot force update the current branch.
Unable to checkout submodule '[PATH_TO_SUBMODULE]'

あなたがしようとするたびに

git submodule sync

このエラーがスローされます。

No submodule mapping found in .gitmodules for path '[PATH_TO_SUBMODULE]'

そして.gitmodulesに必要な行は追加されません。

だから私のための解決策はこれでした:

git submodule add [URL] [PATH_TO_SUBMODULE]
15
luksak

リポジトリの新しいチェックアウトで "git submodule init"を実行しようとしたところ、このエラーが発生しました。最初はモジュールのサブフォルダを間違ったケースで指定していました。大文字と小文字を区別するファイルシステム(hurr)を搭載したMacを使っているので失敗しました。例えば:

git submodule add [email protected]:user/project.git MyApp/Resources/Project
Cloning into 'MyApp/Resources/Project'

成功するが、問題はディスク上のパスが

Myapp/Resources/Project

私が理解できないのは、なぜgitがモジュールを間違ったフォルダに初期化しているのか(私のコマンドの間違った大文字小文字の区別を無視して)、その後のコマンドで(失敗して)正しく動作しているからです。

8
James Moore

フォルダマッピングは.git/modulesフォルダ(それぞれにconfigを参照するworktreeファイルがあります)にありますので、これらのフォルダが.gitmodulesおよび.git/configの設定に対応するようにしてください。

.gitmodulesには正しいパスがあります。

[submodule "<path>"]
  path = <path>
  url = [email protected]:foo/bar.git

.git/modules/<path>/configセクションの[core]には、<path>への正しいパスがあります。

[core]
  repositoryformatversion = 0
  filemode = true
  bare = false
  logallrefupdates = true
  worktree = ../../../<path>

.git/modules内の正しいフォルダーが見つからない場合は、サブモジュールdirに移動してgit reset HEAD --hardまたはgit checkout master -fを試してください。これでうまくいかない場合は、おそらく壊れたサブモジュールへの参照をすべて削除してから再度追加してください。 gitサブモジュールの名前を変更する を参照してください。

5
kenorb

この問題がありました。しばらくの間、パスの削除、gitのパスの削除、.gitmodulesの削除、.git/configからのエントリの削除、サブモジュールの追加、変更のコミットとプッシュに関するアドバイスを試してみました。 "git commit -a"を実行しても何も変わらないように見えたので戸惑いました。それで私は削除だけを押し、次にそれを変更のように見せるために再追加を押してみました。

しばらくして、私は "git submodule update --init"を実行したときにすべてを削除した後に、gitが参照しなくなったという特定の名前についてのメッセージを受け取ったことに気付きました。リンク先であり、チェックアウト先のパス名ではありません。 Greppingは、この参照が.git/indexにあることを明らかにしました。だから私は "git rm --cache repo-name"を実行してからモジュールを読み直しました。今回コミットしたとき、コミットメッセージに、この予期しないオブジェクトを削除していたという変更が含まれていました。その後はうまくいきます。

何が起こったのかわからない、私は誰かがgit submoduleコマンドを誤用していたと思います。おそらく引数を逆にしたのでしょう。私でさえあったかもしれません...これが誰かに役立つことを願っています!

5
anomolos

git rm subdirだけでも大丈夫です。これはサブディレクトリをインデックスとして削除します。

5
hit9

ファイル内。gitmodules、文字列を置き換えました

"path = thirdsrc\boost" 

"path = thirdsrc/boost", 

そしてそれは解決しました! - -

3
zhuzhai liu

シナリオ:サブモジュールをディレクトリーdirA-xxxから別のディレクトリーdirB-xxxに変更する

  1. dirA-xxxをdirB-xxxに移動します。
  2. dirB-xxxを使用するように.gitmodulesのエントリを変更します。
  3. dirB-xxxを使用するように.git/configのエントリを変更します。
  4. 正しいディレクトリを反映するように.git/modules/dirA-xxx/configを変更します。
  5. 正しいディレクトリを反映するようにdirA-xxx/.gitを変更します。
  6. git submodule statusを実行

    エラーが返される場合:パスdirA-xxxの.gitmodulesにサブモジュールマッピングが見つかりません。これはdirA-xxxが存在しないためですが、それでもgitによって追跡されます。 gitインデックスを次のように更新します:git rm --cached dirA-xxx

    git submodule foreach git pullで試してください。私はgitサブモジュール構造の実際の研究を行っていないので、上記のステップは何かを壊すかもしれません。それにもかかわらず、上記のステップを経て、物事は現時点では良く見えます。あなたが物事を成し遂げるために何らかの洞察力または適切なステップを持っているならば、ここでそれを共有してください。 :)

3
ken

私の.gitmodulesを見た後、私が持ってはいけないところに大文字があったことがわかりました。 .gitmodulesディレクトリは大文字と小文字を区別します

1
Kelsey

通常、gitはプロジェクトのルートディレクトリ(.git /)に隠しディレクトリを作成します。

あなたがCMSで作業しているとき、それはあなたが特定のモジュール/プラグインのためのgitのメタデータと共に.git /ディレクトリを運ぶモジュール/プラグインをインストールすることが可能です

最も早い解決策は、すべての.gitディレクトリを見つけて、あなたのルートのgitメタデータディレクトリだけを残すことです。そうした場合、gitはそれらのモジュールをプロジェクトサブモジュールと見なしません。

1
yilmi

私たちにとっての問題は、重複したサブモジュールエントリが.gitmodulesに追加されたことです(おそらくマージから)。 gitモジュールで文句を言われたパスgitを検索し、2つの同じセクションを見つけました。セクションの1つを削除すると、問題が解決しました。

その価値があるために、git 1.7.1は "no submodule mapping"エラーを出しましたが、git 2.13.0は気にしませんでした。

0

私の場合、このエラーはおそらく、異なるサブモジュール構成を持つ2つのブランチ上の.gitmodules間の誤ったマージが原因でした。このフォーラムから提案を得た後、私は手動で.gitmodulesファイルを編集する問題を解決しました、足りないサブモジュールエントリを追加することはかなり簡単です。その後、コマンドgit submodule update --init --recursiveは問題なく動作しました。

0
user2281802