最初ctagsを導入して、vimプラグインを使用して自動更新する方法を調べていたら、
gitから自動で更新する記事を目にして、こちらの方も調べて導入する時に Linuxやmacの書き方はいくつも見つかったが、
Windowsの書き方がいまいち分からなかった。
調べていくうちに、Pythonで書くことが出来るのが判って、希望どうりの動きをしてくれている物を書くことが出来た。
前提
- windows
- git
- python
インストールしてコマンドラインからも呼び出せるようになっていること
hooksファイルを作成
そもそも、hooks/
は $ git init
したら .git/
内に作成される。
git で merge, pull, commit, checkoutなどが実行されたら、
記載されている動作を実行するようになる。
しかし、$ git init
するたびに hooks/
内のファイルを書き換えるのは面倒なので、
テンプレートを作成して、$ gint init
したらテンプレートをコピーしてくれるように設定する。
- 新しくフォルダを
.git_tmp/hooks/
などと作成 hooks/
内に、post-merge, post-commit, post-checknut
を作成post-*
すべてのファイル内容を下記のコードにする
#!/usr/bin/env python
import os
import subprocess
tags = '.git/tags'
if os.path.exists(tags):
os.remove(tags)
cmd = 'ctags -R --sort=yes --append=no -f ' + tags + ' %CD%'
returncode = subprocess.Popen(cmd, shell=True)
動作は.git/tagsファイルが存在していれば削除して新しくctagsで.git内にtagsファイルを作成する。
$ git init
するたびにhooks
の内容を.git_tmp/hooks/
の中身で作成されるようにする。
コマンドラインなどで$ git config --global init.templatedir .git_tmp
を実行
これで、git init
したら、 .git_tmp/hooks/
の内容で .git/hooks/
が作成される。
参考
gitのhookでtags作成 - Qiita
ctagsと連携するように環境を構築する - Qiita
GitHub - AdaCore/git-hooks: Git hooks Python-based scripts
Pythonからコマンドを呼び出す(Windows編) - Qiita
トラブル
- .git_tmpがコピーされない。
- .gitconfigを直接開いて、
templatedir = ‘./.git_tmp‘
からtemplatedir = .//.git_tmp
に変更したらうまくコピーした。 - tagsファイルが読み込まれない。(Error: E429: File "project/.git/lib\util.php" does not exist)
- vim-fugitive でおかしくなっている?
- tagsファイルをそのまま.gitから出して、projectフォルダに移動させたら正常に動いた。
- tagsファイル内のパスがおかしい のか?
lib\util.php
ではなく..\lib\util.php
だと動作した。 - つまりは、
project/.git/lib
の/.git/
部分が余計なのかな? - 解決:フルパスで作成するようにしたら、問題なく動いた。ソースコードを更新