2014年2月8日土曜日

gitでサブモジュールを削除する(バージョンごとの方法まとめ)

gitのサブモジュールってバージョンによって削除の方法が違う。
サブモジュールのリポジトリのルートからの相対パスが path/to/submodule の場合、リポジトリのルートで次のようなコマンドを実行すればいいと思う。

v1.8.5以上
$ git submodule deinit path/to/submodule
$ git rm path/to/submodule
$ rm -rf .git/modules/path/to/submodule

v1.8.3以上v1.8.5未満
$ git submodule deinit path/to/submodule
$ git config -f .gitmodules --remove-section submodule.path/to/submodule
$ git rm path/to/submodule
$ rm -rf .git/modules/path/to/submodule

v1.8.3未満
$ git config -f .git/config --remove-section submodule.path/to/submodule
$ git config -f .gitmodules --remove-section submodule.path/to/submodule
$ git rm --cached path/to/submodule
$ rm -rf .git/modules/path/to/submodule
$ rm -rf /path/to/submodule

ちなみに、これまで使ってたgitはDebian7のパッケージ管理システム(apt-get)でインストールしたやつだったけど、バージョンは1.7.10.4と古かったので、サブモジュールの削除も面倒。この際バージョンアップすることにした。他にも表示が親切になるらしいし。

まずコンパイルに必要なパッケージを入れる。
$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev
 

git最新版のDebian公式パッケージはないので、ソースからコンパイルする。
https://code.google.com/p/git-core/downloads/list
から最新版をダウンロードする。この記事を書いている時点では1.8.5.4が最新だ。ダウンロードしたら解凍して、コンパイル&ルート権限でインストール。
% wget https://git-core.googlecode.com/files/git-1.8.5.4.tar.gz
% tar zxvf git-1.8.5.4.tar.gz
% cd git-1.8.5.4
% ./configure
% make
% su -
# make install

特に迷うこともなくあっさり完了。

ちなみに僕はzsh使いだけれど、git submodule deinitが補完で出てこない。gitのソースにはzsh用の補完関数スクリプトが添付されている(解凍したソースのcontrib/completion/git-completion.zsh)けど、これを使っても補完候補に出てこないので注意。

余談だけれどgitのバージョン上げたらgitコマンドの出力がモノクロからカラーになってて超便利。中でもgit diffで差分を色分けしてくれるのは素晴らしいね。

参考サイト:
git submoduleを今風な感じで削除する - Qiita
git submoduleについてのメモ - rcmdnk's blog
How do I remove a Git submodule? - Stack Overflow

※この記事について指摘・意見・提案・感想などありましたら下のコメント欄にどうそ。

0 件のコメント:

コメントを投稿