kuro

1 minute read

git submodule add がうまくいかない時のメモ

Git管理しているディレクトリの中に、さらにGit管理しているディレクトリ directory/name が存在している場合に起きた現象でした。

git add .

上記のコマンドを入力しても、

git status

...
....

directory/name (untracked contents)

と表示されていました。 こちらをサブモジュールとして管理しましょうというメッセージが表示されました。

なので directory/name をサブモジュールかしていきます。

しかし、その前に direcotory/name がGit管理されていて、 git statusをした時、クリーナ状態かを確認します。

まだ編集中だったりステージング中だった場合、まず directory/name の方で

git add .

git commit

git status

クリーンな状態になったら元のディレクトリへ戻り、

以前に、git add . で追加してしまった分を解除します。

git reset

既にあった中で別にGit管理されているディレクトリ directory/name を削除します。
今回はフォルダをそのまま移動させて退避させておきました。

// 退避
mv directory/name ~/desktop/directory/name

// 退避させただけだとGitではまだ残っているので git rm で消す
git rm -r --cached directory/name

// サブモジュールとしてさっき退避させたGit管理していた directory/name のリモートリポジトリを登録する
git submodule add git@gitlab.com:user/directory/name.git directory/name

git status

//再度ステージングしてみる
git add .

//確認して正常にステージングされているか確認
git status

// コミット
git commit -m "サブモジュールの追加"

git push

これでサブモジュールが追加されました。

同じリモートリポジトリを使って git pull をしている側ではサブモジュールの更新をします。

// -iで新規なのでinitも一緒に実行
git submodule update -i

これでpushもpull側も両方正しくできればOKです。