281

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

git submodule add の path オプションを使用してフォルダーを指定しました。

git submodule add url_to_repo projectfolder

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

'projectfolder' already exists in the index"

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

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

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

4

12 に答える 12

422

あなたは私のフォローアップの質問に答えていないので、あなたの質問には何が起こっているのかを確認するのに十分な情報がありません.

このエラーは、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
于 2012-10-15T19:43:00.207 に答える
20

git 制御下に名前の付いたフォルダーが存在する場合はx、同じ名前のサブモジュールを追加する必要があります。フォルダーを削除xして最初にコミットする必要があります。

@ujjwal-singh による更新:

コミットは必要ありません。ステージングで十分です.. git add/git rm -r

于 2017-02-14T07:30:39.277 に答える
5

エラーが何を伝えようとしているのかを人間の言葉で明確にするために:

メイン リポジトリで既に追跡されているこのフォルダにリポジトリを作成することはできません。

例:専用リポジトリと呼ばれるテーマフォルダがありAwesomeTheme、メインリポジトリに直接ダンプしようとするgit submodule add sites/themesと、これが得られます"AwesomeTheme" index already exists.

sites/themes/AwesomeThemeサブモジュールをそこに作成できるように、メイン リポジトリのバージョン トラッキングにまだ がないことを確認する必要があります。

sites/theme/AwesomeThemeしたがって、空のディレクトリがある場合は、メインリポジトリで修正してから削除してください。メインリポジトリのディレクトリですでにコミットを行っている場合はsites/theme/AwesomeTheme、次のようなコマンドですべての履歴を消去する必要があります:

git filter-branch --index-filter \
              'git rm -r --cached --ignore-unmatch sites/theme/AwesomeTheme'     HEAD

これで実行できますgit submodule add git@AwesomeTheme.repowhateverurlthing sites/themes/AwesomeTheme

メイン リポジトリはこれまでに何も (インデックス化された) ものを見たことがないため、sites/themes/AwesomeTheme作成できるようになりました。

于 2016-07-25T15:02:25.867 に答える
1

私は逆の方法でそれを機能させました。空のレポから始めて、「projectfolder/common_code」という新しいフォルダーにサブモジュールを追加します。その後、プロジェクト コードを projectfolder に追加することができました。詳細を以下に示します。

空のリポジトリ タイプ:

git submodule add url_to_repo projectfolder/common_code

これにより、目的のフォルダー構造が作成されます。

repo
|-- projectfolder
    |-- common_code

サブモジュールを追加できるようになり、プロジェクト コードを projectfolder に追加できるようになりました。

なぜこのように機能し、他の方法では機能しなかったのかはまだわかりません。

于 2012-10-16T09:18:55.767 に答える
0

IntelliJ 15 内からファイルをコミットしようとしたときに同じ問題が発生しましたが、これが役立つかどうかはわかりません。最終的に、SourceTree を開いて、そこでファイルをコミットするだけで済みました。問題が解決しました。派手な git コマンドを発行する必要はありません。誰かが同じ問題を抱えている場合に備えて、それについて言及するだけです。

于 2016-10-12T09:53:10.623 に答える
-26

git ディレクトリで、すべての変更を同期したとします。

rm -rf .git 

rm -rf .gitmodules

次に、次のようにします。

git init
git submodule add url_to_repo projectfolder
于 2016-12-12T07:08:01.233 に答える