Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

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

$
0
0

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

Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>