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


335

サブモジュールがあるプロジェクトがあります 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ファイルの一部ではないため、このパスの取得元がわかりません。

何か案は?


1
そのパスをgitlinkとして追加できたようです-サブモジュールはgitlinkと.gitmoddulesおよび.git / configファイルのエントリの組み合わせです。これについて最近質問がありました。それを見つけようとしている...
Cascabel


@Jefromi- .gitフォルダ内のどこにもそのパスについての言及はありません。aを実行grep -r "Classes/Support/Three20" *.*しても結果は得られません
Ben Scheirman、

2
@ベン:.gitフォルダでそのテキストを検索するのはなぜですか?それはgitがコンテンツを保存する方法ではありません。本当にgitの内容を確認したい場合は、を試してくださいgit ls-tree HEAD Classes/Support。Three20がコミットであると表示されている場合は、そこにgitlinkがあります。存在する場合は、上にリンクされている質問VonCの適切な手順に従って、適切なサブモジュールにするか、定期的に追跡されるコンテンツにしてください。
Cascabel 2010年

2
今後の訪問者のために、問題が削除されたサブモジュールにリンクされ、herokuがエラーをスローする場合は、github.com / heroku / heroku-repo およびheroku repo:reset -a appname からheroku -repoをインストールしてください
fadomire

回答:


309

rajibchowdhury回答(賛成)に続いて、サブモジュール(特別なモードの「フォルダ」)を示すインデックス内の特別なエントリを削除することをお勧めするgit rmコマンドを使用します。 160000

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

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

git ls-files --stage | grep 160000

以前の回答(2010年11月)

最初のサブモジュールが正しく宣言されていない可能性があります(つまり、末尾に末尾に「/」がないため、 私の古い回答.gitmoduleパスに問題がないように見えます)。

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

新しいクローンから「git submodule init」を実行すると同じエラーが発生しますか?
もしそうなら、あなたは何か間違っています。

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

もちろん、メインを削除しないでください .gitmodulesファイル.gitmodulesに、作業ツリー内の他の余分なファイルの世話をしてください。


「サブモジュールの初期化が正しくない」というトピックには、 Jefromiは実際にはgitlinkであるサブモジュールについて言及しています。

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


5
.gitmodulesファイルがなく、すべてのチェックアウト/プルでこのメッセージが引き続き表示されます。私は何をしますか?
アーロンバウマン2017年

2
ここに私の答えを見つけた:stackoverflow.com/questions/14720034/...
aaronbauman

4
@aaronbaumanはい、gitlinkを削除する必要があるため、git rm xxx(末尾のスラッシュなしで)git rm --cachedインデックスから削除する間、それをディスク上に保持できます。
VonC 2017年

git ls-files --stage |を実行した後 grep 16000、いくつかのエントリを見つけました。これらを削除するにはどうすればよいですか?
John Mike

1
@JohnMikeは、.gitmoduleそれらのエントリを参照している場合は、stackoverflow.com / a / 16162000/6309です。そうでない場合は、単純git rm afolder(末尾/スラッシュなし)
VonC

412

次の場合、パス 'OtherLibrary / MKStore'の.gitmodulesにサブモジュールマッピングが見つかりません

$ git submodule update --init

エラーが発生する理由がわかりませんでした。1分を費やした後、stackoverflowで答えを見つけました。

$ git rm --cached OtherLibrary/MKStore

その後、サブモジュールを再度更新します。正常に動作しています。

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


2
.gitmodulesファイルを編集してhttps://リンクをgit://リンクで変更した後、私にとってはうまくいった
Diwann

1
これも私にとってはうまくいきましたが、サブモジュールパスの最後にスラッシュがないことを確認する必要がありました。
ピーター2014年

initオプションを忘れたなんて信じられません。プロジェクトを複製する場合は、更新する前にサブモジュールを開始する必要があります。
アレックス、

リポジトリのルートディレクトリでこれを実行しなければならなかった場合、すべてが正常に機能しました。ありがとう!
Pwdr 2015年

rmコマンドありがとうございます。私が呼ばれgit submodule sync | grep "mapping found"た後git rmともう一度git submodule sync。問題が解消されました。
nine9five 2016年

24

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でゴミを取り除き、きれいに保ちます。


17

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

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]

9

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

git submodule add git@github.com:user/project.git MyApp/Resources/Project
Cloning into 'MyApp/Resources/Project'

成功しましたが、問題はディスク上のパスが

Myapp/Resources/Project

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


理由はわかりませんが、ここでも同じです(Windows)。チェックアウト用に大文字と小文字が異なるフォルダーを自由に指定できます。これによりモジュール名が変更されることはありません。
ザビエルポイナス

6

ただ、git rm subdir OKになります。インデックスとしてサブディレクトリを削除します。


5

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

しばらくして、すべてを削除した後、 "git submodule update --init"を実行すると、gitが参照してはならない特定の名前に関するメッセージがあったことに気づきました:サブモジュールのリポジトリの名前チェックアウト先のパス名ではなく、リンク先でした。Greppingは、この参照が.git / indexにあることを明らかにしました。そこで「git rm --cached repo-name」を実行して、モジュールを再読み込みしました。今回コミットしたとき、コミットメッセージには、この予期しないオブジェクトを削除するという変更が含まれていました。その後は正常に動作します。

何が起こったのかわからない、誰かがgitサブモジュールコマンドを誤用した、おそらく引数を逆にしたと思います。私だったかもしれない...これが誰かを助けることを願っています!


5

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

"path = thirdsrc\boost" 

"path = thirdsrc/boost", 

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


おかげで私の問題は解決しました。おそらくウィンドウで発生する問題。私の場合、パスは "path = something \\ folder"でした
Roozbeh G

これは、Windowsでgitの代わりにgit-lfsを使用しているときにエラーが発生したときに機能しました。(標準gitを使用してもエラーは発生しませんでした)
Frage

5

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

だから.gitmodules正しいパスがあります:

[submodule "<path>"]
  path = <path>
  url = git@github.com:foo/bar.git

そして中.git/modules/<path>/config[core]セクションあなたに正しい道をした<path>、例えば

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

の正しいフォルダ.git/modulesが見つからない場合は、サブモジュールのディレクトリに移動して、git reset HEAD --hardまたはを試してくださいgit checkout master -f。これで問題が解決しない場合は、壊れたサブモジュールへの参照をすべて削除してから再度追加することをお勧めします。次に、「gitサブモジュールの名前を変更する」を参照してください。


3

シナリオ:サブモジュールをディレクトリ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サブモジュール構造の実際の研究を行わなかったので、上記の手順は何かを壊すかもしれません。それでも、上記の手順を実行すると、現時点では状況は良好です。何かをするための洞察や適切な手順がある場合は、ここで共有してください。:)


1

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

CMSで作業しているときに、特定のモジュール/プラグインのgitのメタデータを含む.git /ディレクトリを含むモジュール/プラグインをインストールできます。

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


1

私のを調べた後.gitmodules、あるべきではないところに大文字があったことがわかりました。したがって、.gitmodulesディレクトリは大文字と小文字が区別されることに注意してください


1
.gitmodules代わりにあなたが意味しなかったと確信していますか?
Serhii Kheilyk 2018

0

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


0

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

価値のあることとして、git 1.7.1は「サブモジュールマッピングなし」エラーを出しましたが、git 2.13.0は気にしていませんでした。

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