1. ホーム
  2. ギット

[解決済み】サブモジュールを削除する方法は?

2022-03-17 22:24:41

質問

Git サブモジュールを削除するには?

ちなみに、単純に git submodule rm whatever ?

解決方法は?

以来 git1.8.3 (2013年4月22日) :

<ブロッククオート

サブモジュールへの興味を"で表明した後、"このサブモジュールにはもう興味がありません"と言えるポーセリン方法がありませんでした。 git submodule init "です。

" git submodule deinit "がその方法です。

また、削除処理では git rm (2013年10月 git1.8.5 以降).

概要

そうすると、3ステップの削除作業が発生します。

0. mv a/submodule a/submodule_tmp

1. git submodule deinit -f -- a/submodule    
2. rm -rf .git/modules/a/submodule
3. git rm -f a/submodule
# Note: a/submodule (no trailing slash)

# or, if you want to leave it in your working tree and have done step 0
3.   git rm --cached a/submodule
3bis mv a/submodule_tmp a/submodule

説明

rm -rf : に記載されています。 ダニエル・シュローダー 's 回答 で要約されています。 エオニール コメント :

これは .git/modules/<path-to-submodule>/ は変更しない。

そのため、この方法で一度サブモジュールを削除し、再度追加しても、すでにリポジトリが破損しているため、追加することはできません。


git rm : 参照 コミット 95c16418 :

現在、"を使用中です。 git rm サブモジュールの " は、そのサブモジュールの作業ツリーをスーパープロジェクトの作業ツリーから削除し、インデックスから gitlink を削除します。

しかし、サブモジュールのセクションの .gitmodules がそのままになっているのは、今は削除されたサブモジュールの名残で、ユーザーをイラつかせる可能性があります (これに対して .git/config これは、ユーザーがこのサブモジュールに興味を示したことを思い出させるために残しておく必要があり、後で古いコミットがチェックアウトされたときに再投入されます)。

<ブロッククオート

を " とします。 git rm "は、作業ツリーからサブモジュールを削除するだけでなく、 ".を削除することによってユーザーを支援します。 submodule.<submodule name> "セクションから .gitmodules ファイルを作成し、両方をステージングします。


git submodule deinit : に由来するものです。 本パッチ :

With "です。 git submodule init を次に呼び出したときに、そのサブモジュールの情報を取得するように指示することができます。 git submodule update "です。

しかし現状では、サブモジュールにはもう興味がないのでローカルの作業ツリーを削除したいとgitに伝える簡単な方法はありません(ユーザーがサブモジュール内部についてよく知っていて、"を削除する場合は別ですが)。 submodule.$name.url からの設定 .git/config を、ワークツリー自身と一緒に)。

<ブロッククオート

そのようなユーザーを支援するために、' deinit ' コマンドを使用します。

これは を削除します。 submodule.<name> セクションから .git/config 指定された サブモジュール (の場合、初期化されたものすべてに対して)。 . 'が指定された場合)。

現在の作業ツリーに変更があった場合、強制的に変更されない限り失敗する。

コマンドラインで指定されたサブモジュールについて、url 設定が .git/config しかし、それにもかかわらず、失敗することはありません。

これは、(de)初期化ステップ( .git/config.git/modules/xxx )

git1.8.5以降では git rm を取る また をケアする。

  • ' add ' ステップで、サブモジュールの url を .gitmodules ファイルを削除する必要があります。
  • サブモジュールの 特別項目 (例として この質問 ): git rm はインデックスからそれを削除します。

    git rm --cached path_to_submodule (末尾のスラッシュはなし)

    これにより、特殊なモード "160000" でインデックスに格納されているそのディレクトリが削除され、サブモジュールのルートディレクトリとしてマークされます。

もし、最後のステップを忘れて、サブモジュールだったものを普通のディレクトリとして追加しようとすると、次のようなエラーメッセージが表示されるでしょう。

git add mysubmodule/file.txt 
Path 'mysubmodule/file.txt' is in submodule 'mysubmodule'


注:Git 2.17(2018年第2四半期)以降、gitサブモジュールdeinitはシェルスクリプトではなくなりました。

C言語の関数の呼び出しです。

参照 コミット 2e61273 , コミット 1342476 (2018年1月14日)による プラタメッシュ・チャバン( pratham-pc ) .

(によって統合されました。 ジュニオ・C・ハマノ--。 gitster -- コミットead8dbe , 2018年2月13日)

git ${wt_prefix:+-C "$wt_prefix"} submodule--helper deinit \
  ${GIT_QUIET:+--quiet} \
  ${prefix:+--prefix "$prefix"} \
  ${force:+--force} \
  ${deinit_all:+--all} "$@"