Composer install したらgit submodule化してしまった

  • 3
    Like
  • 0
    Comment
More than 1 year has passed since last update.

状況

gitで管理しているレポジトリをgithubにプッシュした際に、webhookを利用して、開発サーバーにソースをアップ(開発サーバーからpull)している。
gitpullは正常に行われているのに、開発サーバーで一部モジュール(今回は cebe/markdown)が読み込めていない。
githubを見てみると、対象のモジュールのフォルダのみがアップされていない。


調査

Composer でPHPのモジュールをインストールした際に、モジュールにgitで管理されているモジュールが含まれていた為、submodule扱いとなり、コチラの意図通りにgit管理出来なくなってしまったとアテをつけて調査。

試しに直接 git add してみる
$ git submodule deinit vendor/cebe/markdown/

No submodule mapping found in .gitmodules for path 'vendor/cebe/markdown'

・・・出来ない。

サブモジュールの削除?
$ git submodule deinit vendor/cebe/markdown/

No submodule mapping found in .gitmodules for path 'vendor/cebe/markdown'

これもムリ。

submoduleのキャッシュがあるらしい。クリアを試す。
$ git rm --cached vendor/cebe/markdown/

error: the following file has staged content different from both the
file and the HEAD:
    vendor/cebe/markdown
(use -f to force removal)

手応えあり・・?


対策

まずは上記のエラーメッセージの導きに従い、-f オプションを付けてみる

git rm --cached -f
$ git rm --cached -f vendor/cebe/markdown/
rm 'vendor/cebe/markdown'

エラーなし。

念のため submodule deinit
$ git submodule deinit vendor/cebe/markdown/

error: pathspec 'vendor/cebe/markdown/' did not match any file(s) known to git.
Did you forget to 'git add'?

git add してないよって言われる。

git add してからやってみる
$ git add vendor/cebe/markdown/
$ git submodule deinit vendor/cebe/markdown/

一応エラーは出ない。

これで $ git status してみると、無事にaddされてる!

実際にはsubmodule化している訳ではないので、submoduleのキャッシュをクリアするのがキーだったぽい。(たぶん)