git submodule で苦労した記録

 git submodule というコマンドを使うことで、レポジトリにサブモジュールを追加・調査することができる。

 僕が今回使ったのは、 Vimプラグインを pathogen.vim を用いて Git で管理するため。

 正確には、 pathogen.vim を使い始めたのは半年ほど前のことなのですが、その時は特に問題は起きなかった。 pathogen.vim を用いたプラグインの管理については、ググればたくさん情報が出てくると思うので省略。

git submodule を使うために

 問題がおきたのは、新しい環境で Vim の設定を行った時。 Git のレポジトリで管理しているプラグインを取得するために、以下のコマンドを実行しました。

git submodule update --init

 ここでエラーが出た。どうやら git submodule が使えない様子。

 この環境は Debian GNU/Linux 5.0 (Lenny) だった。 Lenny で aptitude install git-core をしたときに入る Git のバージョンは 1.5.6 だが、実は git submodule は、古い Git では動かない。バージョン 1.7.0 以降で使える機能ですので、バージョンをあげる必要があります(正確にはバージョン 1.6.6 くらいから使えるらしい)。 1.7 は Lenny では aptitude でインストールできないバージョンなので、手動でダウンロードしてきて、インストールする必要あり。

 僕はここで、何も考えずに ./configure して、 make && make install してしまったため、余計に時間をかけてしまった。

 インストールしたあと、 /usr/bin/git をシンボリックリンクとして追加。そして git submodule update を再実行。しかしやはり上手くいかない。 HTTPS でこけていたので、 SSL 周りが怪しいかと思い、 curl や openssl などを調べるはめに。それでもわからなかったので、同じような現象で困っている人を探していろいろ検索。検索して見つけた中で、同じと思われる現象について書かれたものをいくつか見つけ、日本語で書かれているものについて全部読んでみたけど、解決策は得られず。結局、一晩置くことに。

 次の日、自分の危うい英語力で英語サイトを読んでいって、やっと原因を理解した。簡単に言うと、 /usr/bin/git 以外の実行ファイルが最新化されていなかったのが原因だった。 /usr/bin 以下には git* な名前の実行ファイルがたくさんあります。これらをちゃんと最新化しないといけない。ということで、今入っている Git を remove して、再度インストール。今度は /usr/bin 以下に関連ファイルがインストールされるように。

 そして再実行。やっと submodule が正しくダウンロードできた。我ながらしょぼいミスだが、いつかまたやったりしたら(同じミスをするつもりはないけど)流石に自己嫌悪しそうなので、一応記録しておく。