私は実際に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
フランスの学生として、私は自分の持っている英語のドキュメントで何かを見逃していたかもしれませんが、検索したのですが、なぜこの問題が発生するのか本当に分かりません。
解決策が得られれば嬉しいですが、説明だけでも役立ちます。
最近削除したサブモジュールと同じパスを持つサブモジュールを追加しようとして、このSO投稿に来ました。
これが最終的に私のために働いたものです( この記事は大いに役立ちました ):
git rm --cached path_to_submodule
だけでなくrm -rf path_to_submodule
(末尾のスラッシュなし)をまだ実行していない場合は、そうしてください!
次に:
.gitmodules
ファイルから関連する行を削除します。例えばこれらを削除します:
[submodule "path_to_submodule"] path = path_to_submodule url = https://github.com/path_to_submodule
関連するセクションを.git/configから削除します。例えばこれらを削除します:
[submodule "path_to_submodule"] url = https://github.com/path_to_submodule
rm -rf .git/modules/path_to_submodule
その後、最終的に次のことができます。
git submodule add https://github.com/path_to_submodule
jbmilgromのソリューションを試してみました。具体的にはgit rm --cache
を試してみましたが、ディレクトリ/サブモジュールが存在しなかったため、うまくいきませんでした。私のために働いたのは:
rm -rf .git/modules/blah
git submodule add git://path.to.new
--force
コマンド内でgit submodule
と他のすべてのディレクトリ、rm
を試してからこれを行いました。 .git/modules
で、このエラーがあった場所になります。
'projets/fdf'
をディスクから削除した可能性がありますが、Gitリポジトリにはまだあります。 git rm -rf projets/fdf
を使用してGitから削除し、変更をコミットします。その後、このフォルダーをサブモジュールとして追加できます。
すでにサブモジュールディレクトリを削除している場合は、jbmilgromの残りの指示に従ってください。キーはrm -rf .git/modules/path_to_submodule
ですが、先に進んで親リポジトリディレクトリ全体を最初にバックアップしますです。
サブモジュールが1つしかない場合は、.gitmodules
を削除するだけです
これらの2つのコマンドは、私にとっては有効です。
rm path/to/submodule -rf
rm .git/modules/path/to/module -rf
私はこれらの答えを試してみましたが、私にはうまくいきませんでした。私のために働いた唯一のことは、私の親リポジトリを削除し、それを再びプルダウンすることでした。これが誰かを助けることを願っています