375

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

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

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

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

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

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

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

何か案は?

4

17 に答える 17

453

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

$ git submodule update --init

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

$ git rm --cached OtherLibrary/MKStore

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

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

于 2012-11-15T09:36:21.253 に答える
348

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

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

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

git ls-files --stage | grep 160000

前の回答(2010年11月)

最初のサブモジュールを正しく宣言していない可能性があります(つまり、私の古い回答.gitmoduleで説明されているように、パスが正常に見える場合でも、最後にテール'/'がありません)。

このスレッドは言及しています:

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

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

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


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

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

于 2010-11-15T14:58:48.740 に答える
17

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

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

master ブランチのクローンを作成する場合は、 --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]
于 2012-02-22T09:12:31.330 に答える
11

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

"path = thirdsrc\boost" 

"path = thirdsrc/boost", 

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

于 2015-09-10T10:19:50.770 に答える
10

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

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

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

Myapp/Resources/Project

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

于 2012-07-13T16:07:59.670 に答える
7

ちょうどいいgit rm subdir でしょう。サブディレクトリをインデックスとして削除します。

于 2013-01-23T06:47:38.727 に答える
5

この問題が発生しました。しばらくの間、パスの削除、git によるパスの削除、.gitmodules の削除、.git/config からのエントリの削除、サブモジュールの追加、変更のコミットとプッシュに関するアドバイスを試しました。「git commit -a」しても変化がないように見えて不可解だったので、削除だけを押してから、readdition を押して変更したように見せてみました。

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

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

于 2012-06-22T18:25:37.907 に答える
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が見つからない場合は、サブモジュール dir に移動して、git reset HEAD --hardまたはを試す必要がありgit checkout master -fます。これで問題が解決しない場合は、破損したサブモジュールへのすべての参照を削除して再度追加することをお勧めします。

于 2016-02-28T17:14:33.893 に答える
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 サブモジュール構造の実際の調査は行っていないため、上記の手順で何かが壊れる可能性があります。それにもかかわらず、上記の手順を実行すると、現時点では問題がないように見えます。物事を成し遂げるための洞察や適切な手順がある場合は、ここで共有してください。:)

于 2014-02-06T09:27:38.583 に答える
2

あなたが持っている場合:

  • ;rmの代わりに単純なものを使用してサブモジュールを削除しました。git rm
  • のサブモジュールへの参照を削除しました.gitmodules
  • の参照を削除しました.git/config

それでもエラーが発生します。私にとってそれを解決したのは、サブモジュールがあった空のフォルダーを読み戻すことでした。これは次の方法で実行できます。

mkdir -p path/to/your/submodule
touch path/to/your/submodule/.keep

.keepただの空のファイルです。git commitそれとエラーが消えるはずです。

于 2020-08-30T14:41:00.073 に答える
1

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

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

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

于 2015-01-13T09:30:09.107 に答える
1

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

于 2016-02-04T17:30:22.207 に答える