【git】addできずにfatal: Pathspec '/hoge/piyo' is in submodule '/hoge'と表示される
gitでaddしようとした際に、
fatal: Pathspec '/hoge/piyo' is in submodule '/hoge'
と表示されて、addできなかった際の対処方法をまとめておきます。
まずは落ち着いてstatusを確認してみましょう。
$ git status ..... /hoge .....(submodule untracked content)
のように表示されているかと思われます。これはaddしようとしているgitリポジトリ(以降:上位リポジトリ)内にさらに別のgitリポジトリ(以降:下位リポジトリ)などがあった場合に、上位リポジトリが下位リポジトリをサブモジュールとして認識している際に起こる現象です。例えば下のようにgitリポジトリが入れ子になっている状況です。
foo /.git /hoge /.git /piyo
ここで
$ cd foo
$ git add /hoge/piyo
を行おうとすると、冒頭のようにエラーが出てaddできません。
対処方法としては、
$ git rm --cached /hoge $ git add /hoge/piyo
のように一度、上位リポジトリの管理から外してから、直接addすることで解決できます。
このエラーには自分のROS環境をgitで管理している際に、catkin_wsをまとめて管理しようとして行き当たりました。catkin_wsのgitリポジトリが各外部パッケージのgitリポジトリをサブモジュール化しようとしてaddできない状態になっていました。
ちなみにこの方法では外部パッケージを自分のリポジトリに入れてしまうので、うっかりどこかに公開してしまうとライセンス違反になるかもしれません。ROSで同じようなことをしている方はお気をつけください。
参考サイト
stackoverflow.com