执行vim命令作为git pre-commit hook

时间:2017-11-20 02:52:13

标签: git vim githooks pre-commit-hook pre-commit

我在vim中使用以下命令批量自动格式化特定文件类型:

:args ~/someDirectory/**/*.filetype | argdo execute "normal gg=G" | update

我试图找出如何将此命令作为预提交挂钩运行,以确保我关注的文件类型的所有文件在提交之前都是自动格式化的。

我将如何做到这一点?

提前致谢。

1 个答案:

答案 0 :(得分:2)

一个解决方案as in this answer,即vim

files=`find /path/to/repo -name "*.filetype" -type f`
for file in $files
do
    vim -e -s -n "+normal gg=GZZ" $file
done

但是,您可以定义一个pre-commit脚本,而不是使用clean挂钩,该脚本将执行脚本(如上所述调用vim)。

使用content filter driver(在您的情况下为*.filetype)通过 .gitattributes declaration 调用脚本。

https://i.stack.imgur.com/tumAc.png
(来自"Customizing Git - Git Attributes"的图片来自“Pro Git book”))

在本地git配置中声明该内容文件管理器驱动程序后,它将自动在git commit上应用该脚本。

请参阅“Best practice - Git + Build automation - Keeping configs separate”中的完整示例。