サブモジュールのディレクトリを変更するのにハマったのでメモ。
EX
環境: git version 2.12.2
サブモジュールの追加
$ git submodule add git@my_module.git
追加した my_module
を vendor/my_module
に移動させたい。
1. ディレクトリを変更する方法
.gitmodules
を開いて[submodule] と path= の2箇所のパスを変更[submodule “vendor/my_module”] path = vendor/my_module url = git@module.git
$ git add .gitmodules
- サブモジュールを移動させる
$ mk dir vendor $ mv -vi my_module vendor/my_module
- 旧サブモジュールのGit管理対象から除外する
$ git rm –cached my_module
.git/modules
にあるサブモジュールを変更するパスと同じ状態に変更する- サブモジュールの指定されているパスを変更
vendor/my_module/.git
をエディタで開きgitdir:
に続く相対パスを4.で移動させたmy_module
になるように変更する (ディレクトリを変更したら../
の数に気をつける)gitdir: ../../.git/modules/vendor/my_module
.git/config
に記述されているサブモジュールのパスを変更する[submodule “vendor/my_module”] url = git@github.com:chaika-design/my_module.git
- 新しいサブモジュールのディレクトリをgit管理下に追加
$ git add vendor
- 変更状態を確認
$ git status On branch master Changes to be committed: (use “git reset HEAD
サブモジュールが…” to unstage)
modified: .gitmodules renamed: my_module -> vendor/my_modulerenamed
になっていればOK
.git/modules/vendor/my_module/config
やvendor/my_module/.git
のパスを間違えているとgit status
した時にfatal: Could not chdir
というエラーが出るのでその場合はパスを見直す - 問題がなければ変更をコミット
$ git commit $ git submodule status b5852af17275cXXXXX vendor/my_module (heads/master)
わーい。できた〜!
2. サブモジュールを一度削除して再登録する方法
- サブモジュールの登録を解除
$ git submodule deinit my_module
.git/config
からsubmoduleの設定が消える - サブモジュールの削除
$ git rm my_module
.gitmodules
に記入されたsubmoduleの指定とサブモジュールのディレクトリが消える $ git commit
でサブモジュールの削除をコミット- 再度変更したいディレクトリを指定してサブモジュールを追加
$ git submodule add git@my_module.git vendor/my_module
Git Submodule クセが強すぎて辛い。不用意にgit reset
とかするとハマりまくる…
ディレクトリの変更がうまくいかない場合は、サブモジュールを削除したコミットログが残ってしまいますが一度git submodule deinit
でサブモジュールを削除して、再度変更するディレクトリにgit submodule add
する方が楽かもしれないと思いました。(ディレクトリ変更の方法だと手順も多いし… )
記事内容とは関係ないけれど、
はてなブログのマークダウンでリスト内にコードブロックを書く方法が知りたい…
直接HTML書いてるんだけど……. つらい
[参考]
- Git - git-submodule Documentation
- How do I move an existing Git submodule within a Git repository? - Stack Overflow
- move - Moving submodules with Git - Stack Overflow
- Rename a git submodule - Stack Overflow
- gitでsubmoduleを移動する方法 | tipshare.info
- 【Git】git rm --cached [ファイル名]:ファイルを管理対象から除外する - Qiita
- git submoduleを今風な感じで削除する - Qiita
- git submoduleしてるリポジトリをリモートの最新に更新する - Qiita
- Git Submoduleで右往左往したのでメモ φ(`д´)|杏z 学習帳
ねんどろいど 冴えない彼女の育てかた♭ 澤村・スペンサー・英梨々 ノンスケール ABS&PVC製 塗装済み可動フィギュア
- 出版社/メーカー: グッドスマイルカンパニー
- 発売日: 2017/07/31
- メディア: おもちゃ&ホビー
- この商品を含むブログを見る