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
ファイルの一部ではないので、このパスをどこから取得しているのかわかりません。
何か案は?
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であるサブモジュールについて言及しています。
このようなディレクトリを実際のサブモジュールに変換するには、 追跡されていないコンテンツの追跡方法 を参照してください。
パス 'OtherLibrary/MKStore'の.gitmodulesにサブモジュールマッピングが見つからない場合
$ git submodule update --init
なぜエラーが発生するのかわかりませんでした。ちょっと時間をかけて、stackoverflowで答えを見つけた後。
$ git rm --cached OtherLibrary/MKStore
その後、サブモジュールを再度更新してください。それはうまくいっています。
http://en.saturngod.net/no-submodule-mapping-found-in-gitmodules
私が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のゴミを取り除き、清潔に保ちます。
私はこの問題を解決しました。最初に私はこれをやろうとしました:
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]
リポジトリの新しいチェックアウトで "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がモジュールを間違ったフォルダに初期化しているのか(私のコマンドの間違った大文字小文字の区別を無視して)、その後のコマンドで(失敗して)正しく動作しているからです。
フォルダマッピングは.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サブモジュールの名前を変更する を参照してください。
この問題がありました。しばらくの間、パスの削除、gitのパスの削除、.gitmodulesの削除、.git/configからのエントリの削除、サブモジュールの追加、変更のコミットとプッシュに関するアドバイスを試してみました。 "git commit -a"を実行しても何も変わらないように見えたので戸惑いました。それで私は削除だけを押し、次にそれを変更のように見せるために再追加を押してみました。
しばらくして、私は "git submodule update --init"を実行したときにすべてを削除した後に、gitが参照しなくなったという特定の名前についてのメッセージを受け取ったことに気付きました。リンク先であり、チェックアウト先のパス名ではありません。 Greppingは、この参照が.git/indexにあることを明らかにしました。だから私は "git rm --cache repo-name"を実行してからモジュールを読み直しました。今回コミットしたとき、コミットメッセージに、この予期しないオブジェクトを削除していたという変更が含まれていました。その後はうまくいきます。
何が起こったのかわからない、私は誰かがgit submoduleコマンドを誤用していたと思います。おそらく引数を逆にしたのでしょう。私でさえあったかもしれません...これが誰かに役立つことを願っています!
git rm subdir
だけでも大丈夫です。これはサブディレクトリをインデックスとして削除します。
ファイル内。gitmodules、文字列を置き換えました
"path = thirdsrc\boost"
と
"path = thirdsrc/boost",
そしてそれは解決しました! - -
シナリオ:サブモジュールをディレクトリーdirA-xxxから別のディレクトリーdirB-xxxに変更する
git submodule status
を実行
エラーが返される場合:パスdirA-xxxの.gitmodulesにサブモジュールマッピングが見つかりません。これはdirA-xxxが存在しないためですが、それでもgitによって追跡されます。 gitインデックスを次のように更新します:git rm --cached dirA-xxx
git submodule foreach git pull
で試してください。私はgitサブモジュール構造の実際の研究を行っていないので、上記のステップは何かを壊すかもしれません。それにもかかわらず、上記のステップを経て、物事は現時点では良く見えます。あなたが物事を成し遂げるために何らかの洞察力または適切なステップを持っているならば、ここでそれを共有してください。 :)
私の.gitmodules
を見た後、私が持ってはいけないところに大文字があったことがわかりました。 .gitmodules
ディレクトリは大文字と小文字を区別します
通常、gitはプロジェクトのルートディレクトリ(.git /)に隠しディレクトリを作成します。
あなたがCMSで作業しているとき、それはあなたが特定のモジュール/プラグインのためのgitのメタデータと共に.git /ディレクトリを運ぶモジュール/プラグインをインストールすることが可能です
最も早い解決策は、すべての.gitディレクトリを見つけて、あなたのルートのgitメタデータディレクトリだけを残すことです。そうした場合、gitはそれらのモジュールをプロジェクトサブモジュールと見なしません。
私たちにとっての問題は、重複したサブモジュールエントリが.gitmodulesに追加されたことです(おそらくマージから)。 gitモジュールで文句を言われたパスgitを検索し、2つの同じセクションを見つけました。セクションの1つを削除すると、問題が解決しました。
その価値があるために、git 1.7.1は "no submodule mapping"エラーを出しましたが、git 2.13.0は気にしませんでした。
私の場合、このエラーはおそらく、異なるサブモジュール構成を持つ2つのブランチ上の.gitmodules間の誤ったマージが原因でした。このフォーラムから提案を得た後、私は手動で.gitmodulesファイルを編集する問題を解決しました、足りないサブモジュールエントリを追加することはかなり簡単です。その後、コマンドgit submodule update --init --recursiveは問題なく動作しました。