git submoduleをよくわからないままに使う
vim関連ファイルの管理を見直した.
具体的には,以下のようなことを行った.
この中で,1,2に関連してgit submodule機能を使う必要があり
しかも使い方がよくわからず,わからないままに現在運用している.
正しい運用方法を知っている人がいたら是非教えて欲しい.
neobundle.vimのインストール
以前はpathogen.vimというツールでプラグインを管理していのだが
よりモダンらしいneobundle.vimを使って管理することにした.
neobundle.vimでは.vimrcに次のように記述し
:NeoBundleInstallというコマンドを実行することで
githubやその他vimプラグイン管理サイトからプラグインを
ズルズルインストールすることが出来る.
僕がインストールしているプラグインはこんなかんじ.
NeoBundle 'git://github.com/Shougo/neocomplcache.git' NeoBundle 'git://github.com/Shougo/neobundle.vim.git' NeoBundle 'git://github.com/Shougo/unite.vim.git' NeoBundle 'git://github.com/Shougo/neocomplcache-snippets-complete.git' NeoBundle 'git://github.com/anyakichi/vim-surround.git' NeoBundle 'git://github.com/vim-scripts/tComment.git' NeoBundle 'git://github.com/vim-scripts/Align.git' NeoBundle 'git://github.com/Lokaltog/vim-powerline.git' NeoBundle 'git://github.com/mattn/webapi-vim.git' NeoBundle 'git://github.com/basyura/twibill.vim.git' NeoBundle 'git://github.com/tyru/open-browser.vim.git' NeoBundle 'git://github.com/h1mesuke/unite-outline.git' NeoBundle 'git://github.com/basyura/bitly.vim.git' NeoBundle 'git://github.com/basyura/TweetVim.git' NeoBundle 'git://github.com/mattn/zencoding-vim.git'
構成は下のようなかんじ.
dotfiles ├── .vim │ ├── autoload │ ├── bundle │ │ └── neobundle.vim │ ├── doc │ │ └── tags │ ├── neobundle │ │ ├── .neobundle │ │ ├── Align │ │ ├── TweetVim │ │ ├── bitly.vim │ │ ├── neocomplcache │ │ ├── neocomplcache-snippets-complete │ │ ├── open-browser.vim │ │ ├── tComment │ │ ├── texput.log │ │ ├── twibill.vim │ │ ├── unite-outline │ │ ├── unite.vim │ │ ├── vim-powerline │ │ ├── vim-surround │ │ ├── webapi-vim │ │ └── zencoding-vim │ └── plugin │ └── python_fold.vim ├── .gvimrc └── .vimrc
neobundle.vimだけbundleディレクトリに入ってて その他はneobundleディレクトリへ.
githubでのdotfiles管理
以前はDropBoxにdotfiles系のファイルを突っ込んでUbuntuでもWindowsでもMacOSXでもなんでもDropBoxで同期を行なっていたが,サーバーOSで動くことも多くなってきたのでgithubに移行することに.
kuhataku/dotfiles · GitHub
GitHub Links GitHub About Blog Features Contact & Support Training GitHub Enterprise Site Status Cli...
https://github.com/kuhataku/dotfiles
これで,cloneしてシンボリックリンクを貼れば使えると思っていたのだが
Cloneしてみた
git clone git://github.com/kuhataku/dotfiles
vimを起動してみると,プラグインが一切ない.
:NeoBundleInstallコマンドを実行してみたが
コマンドが実行できない.neobundle.vimがインストールされていない.
実際,bundle/neobundle.vim/の中身を見てみると,
.gitなどのファイルを除いて空っぽ.
実体のないディレクトリが作られていた.
githubから見てみても同様だった.
どうやらgitでは,外部レポジトリを取り込んだ 自分のレポジトリを作るには,cloneするだけではだめなようである.
gitで外部モジュールを取り込むには【よくわかっていない】
これが,git submoduleというやつらしい. cloneではなく,次のようにして,プラグインを取り込む.
git submodule add [repository URL] cd [repository] git init git update
init=>updateを行わないと,repositoryの中身が落ちてこない.
これは,git cloneした後も同様であり,init=>updateする必要がある.
neobundle.vimについてこれを行うと,確かに
repositoryの中身が取得され,また別マシンでcloneした時に
中身を取ってくることができた.
また,github上では,元repositoryへのリンクとして表示されるようになった.
なんとなく,この表示からして,cloneする時はrepository元から
データがcloneされてくるのではないだろうか.
git submoduleを使ったvim管理
外部レポジトリの取り込み方はわかった.
しかし,全てのvimプラグインに対してsubmodule系コマンドを実行するのは嫌だ.
addもinitもupdateも嫌だ.
(折角NeoBundleInstallで超ベンリにインストールできてるのに) br
そこで,submoduleとして管理するのはneobundle.vimrcだけにして
プラグインについては,新しい環境を作るたび:NeoBundleInstallを実行することにした.
これなら比較的許容できる作業量である.
わからないところ
これで,一応それなりの管理はできたが
使っていて???なところもあるので列挙しておく
git submoduleコマンドでWarning
git submoduleコマンドは,レポジトリに含まれる
submoduleを表示するコマンドあるが,次のような表示がでる.
4d025ed28584b1aa05588794d92ed617fa925680 vim/.vim/bundle/neobundle.vim (ver.1.0-54-g4d025ed) No submodule mapping found in .gitmodules for path 'vim/.vim/neobundle/Align'
1行目は,neobundle.vimをsubmoduleにしているということ.
問題は2行目で,NeoBundleを使ってインストールしたAlign.vimがsubmoduleになってない,という旨が表示されている
どうも,submoudleで導入していない外部レポジトリをgit addするとこのように表示されるようだ.
別段問題になっているわけではないが,気持ちが悪い.
外部レポジトリが消えたらどうなるのか
自レポジトリに外部レポジトリを取り込んでいるのならいいものの,
github上では,レポジトリのリンクとして扱われているので
取り込んでいるレポジトリがgithub上からデータを消したら
もうcloneすることができなくなるのでは?