少なくとも私の環境 Git for Windows 2.7.0-windows.1 で、Git のサブモジュールのパスを移動するには、おなじみ git mv
だけで事足りてます。
昔は大変だったんだよね
Gitのサブモジュールは扱いにくいと言われてきました。
場所を移動したり、削除したりする時、手操作でいろいろやらないとリポジトリが変な状態になってしまったりして困ってました。
今回、サブモジュールを別のディレクトリに移す必要が生じて極度の緊張。
怖れをなしてインターネッツで検索すると、それ見たことか「いろんなファイルをいじり倒さないといけません」と。
直感的には git mv
でお願いしたい
その手順があまりにややこしくてげんなりしました。
「直感的には git mv
なんだがなあ・・・」と愚痴が出たので、モノは試しとやってみたら大成功。
Gitのversionは、、、
$ git version
git version 2.17.0.windows.1
最近のGitでは改善されてたようですね。
いつから有効なのかは不明です。
少なくとも最新版にすれば問題ないと思います。
サブモジュールの移動例
以下は、既存のサブモジュールを別ディレクトリに移動する例。.gitsubmodules
もきちんと更新されますよ。
$ git submodule #移動前のサブモジュールを確認(hashは省略)
********** org-dir/sub-mod (***********)
$ mkdir dst-dir/ # 移動先ディレクトリの作成
$ git mv org-dir/sub-mod dst-dir/ # 移動(warningは無視)
warning: LF will be replaced by CRLF in .gitmodules.
The file will have its original line endings in your
working directory.
$ git submodule #移動後のサブモジュールの確認(hashは省略)
********** dst-dir/sub-mod (***********)
$ git status # 変更点の確認
On branch mv-sub-mod
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: .gitmodules
renamed: org-dir/sub-mod -> dst-dir/sub-mod
$ git diff --staged
diff --git a/.gitmodules b/.gitmodules
index *******..******* *******
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,4 +1,4 @@
[submodule "sub-mod"]
- path = org-dir/sub-mod
+ path = dst-dir/sub-mod
url = ssh://git@xxx.xxx.xxx.xxx/yyy/zzz.git
branch = mv-sub-mod
(略)
サブモジュールの名前変更
サブモジュールのディレクトリ名を変えるのも同じく可能です。
$ git submodule
********** org-dir/sub-mod (***********)
$ mkdir dst-dir/
$ git mv org-dir/sub-mod dst-dir/submod2
(略)
$ git status # 変更点の確認
On branch mv-sub-mod
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: .gitmodules
renamed: org-dir/sub-mod -> dst-dir/submod2
ということで
とりあえず最近のGitでサブモジュールの場所を移動したり名前を変えたりするには、git mv
で充分ですって話でした。.gitsubmodules
もちゃんと更新してくれます。
0 件のコメント:
コメントを投稿