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


190

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

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

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

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

'projets / fdf'のgitディレクトリは、リモートでローカルにあります:origin ssh://git@XXX.XXX.XXX.XXX:XXXXX / opt / git / fdf.gitこのローカルgitを再利用する場合ssh://XXX.XXX.XXX.XXX:XXXXX / opt / git / fdf.gitから再度クローンを作成する代わりに、「-force」オプションを使用します。ローカルのgitディレクトリが正しいリポジトリではない場合、またはこれが何を意味するのかわからない場合は、「-name」オプションで別の名前を選択してください。

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

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

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

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

フランス人の学生だったので、英語のドキュメントを見逃していたかもしれませんが、検索したのになぜこの問題が発生したのか理解できません。

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


小さな修正:「リポジトリ」ではなく「リポジトリ」です。実際には答えではありませんが、プロジェクトが相互に独立している場合は、各プロジェクトがサブモジュールの代わりに独自のリポジトリを持つことをお勧めします。
jcm 2014年

ありがとう、訂正しました。わかっていますが、すべての作業を同じリポジトリに、別々のプロジェクトとして収集したいと思います。自宅から学校へ、またはその逆のときに仕事全体を最新の状態に保つことを選択します(これらのツールの使用方法を知りたいので、興味があります))
vmonteco

まあ、好奇心は常に正当な理由です!:) それ、変だよ。以前にサブモジュールを追加したことがありませんか?
jcm 2014年

Travail /にはありません。fdf.gitを〜/に複製する問題はありません。Travail /にはfdfの痕跡はありません。ただlibft:/
vmonteco 2014年

5
ちょっと待って、調べ/Travail/.git/modules/projets/fdfディレクトリを見つけました。これは作業ツリーではなく、古いコミットにあるようです。問題が発生する可能性はありますか?
vmonteco 2014年

回答:


437

私が最近削除したサブモジュールと同じパスのサブモジュールを追加しようとしてこの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


47
他に何も機能しないので、これは本当に役に立ちました。他の提案との主な違いは、ステップ3でした。ありがとう!
AndroidDev 2016年

8
手順2と3が必要でした。
U007D 2016

8
手順3が必要でしたが、なぜサブモジュールもそこに存在するのですか?
Crt

1
私にとっては、手順1と2(既に正しい設定がされている)をスキップし、手順3で修正しました。(私はすでに初期の段階行っていたgit rmrm -rfの手順を。)
ロック・リー

2
ステップ3でもうまくいきませんでした。私はサブモジュールを1つしか持っていなかったので、全体を削除しましたが.git/modules、最終的には機能しました。
ACH

47

私はjbmilgromの解決策を試しました、具体的には試みgit rm --cacheましたが、ディレクトリ/サブモジュールがそこになかったため、それも私にとってはうまくいきませんでした。私のために働いたのは:

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

コマンドと他のすべてのディレクトリ、マスターへのプッシュなどを試した後--force、これを行いました...ディレクトリが存在せず、キャッシュの理由がありませんでした。このエラーが嘘をついていたことが判明しました。git submodulerm.git/modules


15

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


うまくいきました:)ありがとう。私は実際にこの間違いをしたと思います。
vmonteco 2014年

21
これを行うと、ディレクトリが存在しないと言われます。両方存在し、存在しないようです:/
ネイサンホーンビー

40
@ tom-mcfarlin最後に、.gitmoduleから行を手動で削除し、.git / modulesからフォルダーを削除してから、新しいサブモジュールを追加しました。これを行うにはもっと良い方法があるかもしれませんが、私は時間を使い果たしていました。この方法を使用する場合は、適切なバックアップを作成することをお勧めします。問題が発生しても、私を責めないでください。幸運を。
sparklos 2015年

5
ありがとう、.git / modulesからフォルダーを削除する別の投稿を見つけましたが、それは私にとってはうまくいきました。それがエラーだと言ったのが矛盾だというのは理にかなっています...私はそのフォルダに気づいていませんでした
トムマクファーリン

10
@NathanHornby @Sparklos @TomMcFarlin-最近のバージョンのgitでは、git-submoduleが.gitフォルダーにディレクトリを追加することがわかります。たとえば、ディレクトリ/tmp/repoにいる場合は、を実行するとgit submodule add ../otherrepo.git、その/tmp/repo/.git/modules/otherrepoフォルダが存在することがわかります。それが問題でした。そのフォルダを.gitから手動で削除しましたが、すべてうまくいきました。
Alexander Bird

13

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

サブモジュールが1つしかない場合は、削除してください .gitmodules


2

これら2つのコマンドは私にとってはうまくいきます。

rm path/to/submodule -rf
rm .git/modules/path/to/module -rf

この。サブモジュールを作成するには2つの方法があるようです。それらの1つでは、サブフォルダーには、スーパープロジェクトのディレクトリを指す単一の.gitファイルのみが含まれ、で始まり.git/modules/ます。サブモジュールのリポジトリを格納するフォルダがあります。そのリポジトリを削除すると問題が解決しましたが、承認された回答では解決しませんでした。
William Randokun
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.