LoginSignup
3
1

More than 5 years have passed since last update.

windowsでgit hookを使用してtagsファイル作成(自己流)

Posted at

最初ctagsを導入して、vimプラグインを使用して自動更新する方法を調べていたら、

gitから自動で更新する記事を目にして、こちらの方も調べて導入する時に Linuxやmacの書き方はいくつも見つかったが、

Windowsの書き方がいまいち分からなかった。

調べていくうちに、Pythonで書くことが出来るのが判って、希望どうりの動きをしてくれている物を書くことが出来た。

Git Hooks (Part II) – Implementing Git hooks using Python — Omer Katz — A Blog about Software Development, DevOps, Source Control, SCM, ALM & other related topics.

前提

  • windows
  • git
  • python
    インストールしてコマンドラインからも呼び出せるようになっていること

hooksファイルを作成

そもそも、hooks/$ git init したら .git/ 内に作成される。
git で merge, pull, commit, checkoutなどが実行されたら、

記載されている動作を実行するようになる。

しかし、$ git init するたびに hooks/ 内のファイルを書き換えるのは面倒なので、

テンプレートを作成して、$ gint init したらテンプレートをコピーしてくれるように設定する。

  1. 新しくフォルダを .git_tmp/hooks/などと作成
  2. hooks/内に、post-merge, post-commit, post-checknutを作成
  3. 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ファイルを作成する。

  1. $ 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/ 部分が余計なのかな?
  • 解決:フルパスで作成するようにしたら、問題なく動いた。ソースコードを更新
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1