web-dev-qa-db-ja.com

Gitサブモジュールの追加:「gitディレクトリがローカルに見つかりました」問題

私は実際にgit submoduleサブコマンドを含むgitの使用方法を学ぼうとしています。 SSHを使用してgitリポジトリをホスト、プッシュ、プルできるサーバーを既にセットアップしています。このサーバー上にメインgitリポジトリ「Travail」を作成しました。ここで、すべてのプロジェクトをサブモジュールとして配置します。

私のTravailリポジトリでは、tools/libftのサブモジュールとして私のプロジェクトを既に追加しています。このサブモジュールを開発し、プッシュしてプルすることができます。

しかし、別のサブモジュール(サーバー上のfdf.gitからfdfという名前)を追加しようとすると、次の問題が発生します。

git submodule add ssh://XXX.XXX.XXX.XXX:XXXXX/opt/git/fdf.git projets/fdf

'projets/fdf'のgitディレクトリはリモートでローカルにあります:Origin ssh://[email protected]:XXXXX/opt/git/fdf.gitこのローカルgitを再利用したい場合ssh://XXX.XXX.XXX.XXX:XXXXX/opt/git/fdf.gitから再びクローンを作成する代わりに、「-force」オプションを使用します。ローカルgitディレクトリが正しいリポジトリではない場合、またはこれが「--name」オプションで別の名前を選択することを意味するかどうか不明な場合。

projets/には実際にはサブディレクトリはありません

別のスレッドで読んでgit submodule syncを使用するか、サブモジュールのOriginリポジトリへのURLが変更されている可能性のある.gitmodulesファイルを編集します。

しかし、私の.gitmodulesファイルには、最初のサブモジュール(tools/libft)に関する情報のみが含まれ、projets/fdfに関する情報は含まれません。

[submodule "tools/libft"]
    path = tools/libft
    url = ssh://[email protected]:XXXXX/opt/git/libft.git

フランスの学生として、私は自分の持っている英語のドキュメントで何かを見逃していたかもしれませんが、検索したのですが、なぜこの問題が発生するのか本当に分かりません。

解決策が得られれば嬉しいですが、説明だけでも役立ちます。

147
vmonteco

最近削除したサブモジュールと同じパスを持つサブモジュールを追加しようとして、このSO投稿に来ました。

これが最終的に私のために働いたものです( この記事は大いに役立ちました ):

git rm --cached path_to_submoduleだけでなくrm -rf path_to_submodule(末尾のスラッシュなし)をまだ実行していない場合は、そうしてください!

次に:

  1. .gitmodulesファイルから関連する行を削除します。例えばこれらを削除します:

    [submodule "path_to_submodule"] path = path_to_submodule url = https://github.com/path_to_submodule

  2. 関連するセクションを.git/configから削除します。例えばこれらを削除します:

    [submodule "path_to_submodule"] url = https://github.com/path_to_submodule

  3. rm -rf .git/modules/path_to_submodule

その後、最終的に次のことができます。

git submodule add https://github.com/path_to_submodule

324
jbmilgrom

jbmilgromのソリューションを試してみました。具体的にはgit rm --cacheを試してみましたが、ディレクトリ/サブモジュールが存在しなかったため、うまくいきませんでした。私のために働いたのは:

  1. rm -rf .git/modules/blah
  2. git submodule add git://path.to.new

--forceコマンド内でgit submoduleと他のすべてのディレクトリ、rmを試してからこれを行いました。 .git/modulesで、このエラーがあった場所になります。

40
pjammer

'projets/fdf'をディスクから削除した可能性がありますが、Gitリポジトリにはまだあります。 git rm -rf projets/fdfを使用してGitから削除し、変更をコミットします。その後、このフォルダーをサブモジュールとして追加できます。

15
bredikhin

すでにサブモジュールディレクトリを削除している場合は、jbmilgromの残りの指示に従ってください。キーはrm -rf .git/modules/path_to_submoduleですが、先に進んで親リポジトリディレクトリ全体を最初にバックアップしますです。

サブモジュールが1つしかない場合は、.gitmodulesを削除するだけです

12
Dmitri R117

これらの2つのコマンドは、私にとっては有効です。

rm path/to/submodule -rf
rm .git/modules/path/to/module -rf
2
W.Perrin

私はこれらの答えを試してみましたが、私にはうまくいきませんでした。私のために働いた唯一のことは、私の親リポジトリを削除し、それを再びプルダウンすることでした。これが誰かを助けることを願っています

0
Gerard Simpson