Git Submoduleのディレクトリを変更したい
サブモジュールのディレクトリを変更するのにハマったのでメモ。
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
- メディア: おもちゃ&ホビー
- この商品を含むブログを見る