git submodule
参考
git 1.6.0.2 submoduleを使おう!その1:add, status - satoko's blog - s21g
git 1.6.0.2 submoduleを使おう!その2 - satoko's blog - s21g
こんな感じで使うと。
$ git submodule add git://github.com/dchelimsky/rspec.git vendor/plugins/rspec $ git submodule status -fd553b85af3da59a35cf8366319fb244fc4172b5 sub/rspec $ git submodule update --init $ git submodule update
じゃvimのプラグインを管理しよう
submoduleの使い方は分かったので、vimプラグインをsubmoduleで管理してみる。
Tips – Using git submodule keep your vim plugin up-to-date | DIG RUBY
vimプラグインの管理 - うんたらかんたら日記
↑この状態(pathogenできれいにした状態)からsubmodule化して管理してみます。
git submodule add
管理対象の一覧。
$ cd .vim $ find . -name .git -depth 2 ./git-vim/.git ./nerdcommenter/.git ./snipmate.vim/.git ./vim-cucumber/.git ./vim-endwise/.git ./vim-pathogen/.git ./vim-quickrun/.git ./vim-rails/.git ./vim-ruby/.git ./vim-surround/.git
matchit と vim-fuzzyfinder だけvim.orgから持ってきたんだけど
githubで探してみたらありました。
edsono's vim-matchit at master - GitHub
vim-scripts's FuzzyFinder at master - GitHub
これで全部submodule管理できる。
git submodule add するために、.git/configに書かれている内容をリストアップ。
$ find . -name 'config' | xargs cat | grep url | awk '{print $3}' http://github.com/motemen/git-vim.git http://github.com/scrooloose/nerdcommenter.git http://github.com/msanders/snipmate.vim.git git://github.com/tpope/vim-cucumber.git http://github.com/tpope/vim-endwise.git http://github.com/tpope/vim-pathogen.git http://github.com/thinca/vim-quickrun.git git://github.com/tpope/vim-rails.git http://github.com/vim-ruby/vim-ruby.git http://github.com/tpope/vim-surround.git
む?
なんかプロトコルばらばらやん。
別に問題ないけど、ブラウザでgithubを一通り見るとhttpsになってるようなので、一括置換します。
実行コマンドを出力。
$ find . -name 'config' | xargs cat | awk '/url/ {print $3}' | ruby -ne '$_ =~ /(.+:)(.+)\/(.+)\.(.+)$/; puts "git submodule add https:#{$2}/#{$3}.#{$4} vim/bundle/#{$3}"' git submodule add https://github.com/motemen/git-vim.git vim/bundle/git-vim git submodule add https://github.com/scrooloose/nerdcommenter.git vim/bundle/nerdcommenter git submodule add https://github.com/msanders/snipmate.vim.git vim/bundle/snipmate.vim git submodule add https://github.com/tpope/vim-cucumber.git vim/bundle/vim-cucumber git submodule add https://github.com/tpope/vim-endwise.git vim/bundle/vim-endwise git submodule add https://github.com/tpope/vim-pathogen.git vim/bundle/vim-pathogen git submodule add https://github.com/thinca/vim-quickrun.git vim/bundle/vim-quickrun git submodule add https://github.com/tpope/vim-rails.git vim/bundle/vim-rails git submodule add https://github.com/vim-ruby/vim-ruby.git vim/bundle/vim-ruby git submodule add https://github.com/tpope/vim-surround.git vim/bundle/vim-surround
#awkで一発で取れないかと試行錯誤したけど、修行が足りないようで結局rubyを使いました。
githubから取得し直すので、ディレクトリを新規追加後、上記git submodule addを実行。
mv vim/bundle vim/bundle_bk mkdir vim/bundle
git submodule status
$ git submodule status -b2a32b9cfc1037c6adfbcfdcb2d37290484e41e4 vim/bundle/git-vim -930be32a23e902ddc46135ddbb9e76b0fac0c14b vim/bundle/nerdcommenter -f5a75d075d3c005ebe69e3f5e56cf99516e8aa3b vim/bundle/snipmate.vim -35b4a3ea17bab837540c7d371d3bd71b5d46eaf5 vim/bundle/vim-cucumber -780fa5603c0917d9b22e3b64dd8ab0423e006eb5 vim/bundle/vim-endwise -968e87ef7fa5ce19dbd3ffe23f0e0d58d88fae43 vim/bundle/vim-pathogen -a8080199b48b4886139dcd59bf087fdfecb8809a vim/bundle/vim-quickrun -26dade8251a07da3d78467bcbc08bd1b2767008d vim/bundle/vim-rails -d6f99550574f6ce1e400cf49796eb6de17be44ff vim/bundle/vim-ruby -27710a2224d6dd0486d1c40d09ef18dd752e7d37 vim/bundle/vim-surround
あとは、git submodule update --init。
doc/tags
これでお終いと思ったけど、git statusするとuntracked contentというメッセージが。
$ git status # On branch master # Your branch is ahead of 'origin/master' by 4 commits. # # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # (commit or discard the untracked or modified content in submodules) # # modified: vim/bundle/git-vim (untracked content) # modified: vim/bundle/snipmate.vim (untracked content) # modified: vim/bundle/vim-quickrun (untracked content) # modified: vim/bundle/vim-ruby (untracked content) # modified: vim/bundle/vim-surround (untracked content)
submodule化したプラグイン内でdoc/tagsってファイルが作成される。
これを管理対象としたいのだが、どうしたもんかと調べてみると
globalの gitignoreに設定する方法が紹介されていた。
.gitignoreを複数プロジェクトで共有する。 - redtower's memo
$ vim ~/.gitignore doc/tags doc/tags-ja $ git config --global core.excludesfile ~/.gitignore
なるほど。
思ったより時間が掛かったが、なんとかできた。
補足
追記
FuzzyFinderを追加すると下記エラーとなった。
Error detected while processing /Users/rochefort/Dropbox/github/dotfiles/vim/bundle/FuzzyFinder/plugin/fuf.vim: line 13: ***** L9 library must be installed! ***** Press ENTER or type command to continue
L9という別プラグインを使用しているようで
L9 - Vim-script library : vim online
これを追加するとうまくいきました。
clones's vim-l9 at master - GitHub
git submodule add https://github.com/clones/vim-l9.git vim/bundle/vim-l9 git submodule init
さらに追加
vundleでvimのプラグインを管理 - うんたらかんたら日記
submoduleの削除。
.gitmodule
.git/config
git rm --cached path_submodule
さらにさらに追加
git submoduleの更新 - うんたらかんたら日記
submoduleのpull。
$ git submodule foreach 'git pull origin master' $ git submodule update
$ git submodule foreach 'git checkout master; git pull' $ git submodule update