共通コードをgitサブモジュールとして追加する際の問題:「インデックスに既に存在します」質問する

共通コードをgitサブモジュールとして追加する際の問題:「インデックスに既に存在します」質問する

Git サブモジュールをいくつか追加したいです。共通コードを共有する 2 つのプロジェクトを受け取りました。共有コードは 2 つのプロジェクトにコピーされただけです。共通コード用に別の Git リポジトリを作成し、gitサブモジュールとして追加する計画でプロジェクトから削除しました。

フォルダーを指定するために、git submodule add のパス オプションを使用しました。

git submodule add url_to_repo projectfolder

しかし、次のエラーが発生しました:

'projectfolder' already exists in the index"

これは私のリポジトリの望ましい構造です:

repo
|-- projectfolder
    |-- folder with common code

サブモジュールをリポジトリ内に直接追加したり、新しいフォルダーに追加したりすることはできますgitが、プロジェクト フォルダーには追加できません。問題は、サブモジュールがプロジェクト フォルダー内にある必要があることです。これについてどうすればよいのでしょうか。また、git submodule add のパス オプションについて何を誤解しているのでしょうか。

ベストアンサー1

私のフォローアップの質問に返信をいただいていないため、何が起こっているのかを確実に知るには質問に十分な情報が含まれていないようです。しかし、いずれにしてもこれが役に立つかもしれません。

このエラーは、projectfolderすでにステージングされている(「インデックスにすでに存在する」)ことを意味します。ここで何が起こっているのかを確認するには、次のコマンドを使用して、そのフォルダーの下のインデックス内のすべてのものを一覧表示してみてください。

git ls-files --stage projectfolder

出力の最初の列には、インデックス内のオブジェクトのタイプが示されますprojectfolder。(これらは Unix ファイルモードのように見えますが、git では特別な意味を持ちます。)

次のようなものが表示されると思います:

160000 d00cf29f23627fc54eb992dde6a79112677cd86c 0   projectfolder

(つまり、 で始まる行160000) の場合、 のリポジトリはprojectfolderすでに「gitlink」として追加されています。 の出力に表示されずgit submodule、サブモジュールとして再度追加したい場合は、次のようにします。

git rm --cached projectfolder

...ステージを解除し、次に:

git submodule add url_to_repo projectfolder

...リポジトリをサブモジュールとして追加します。

ただし、多くの BLOB がリストされる可能性もあります (ファイル モードが および100644) 100755。これは、新しいリポジトリをコピーする前に のファイルを適切にアンステージしなかったことを示唆していると考えられますprojectfolder。その場合は、次の操作を実行して、それらのファイルをすべてアンステージできます。

git rm -r --cached projectfolder

...そして、次のようにサブモジュールを追加します。

git submodule add url_to_repo projectfolder

おすすめ記事