2010-02-23 47 views
3

我想写一个自动执行代码清理的git钩子,比如删除尾随空白。编写脚本拒绝某些提交很容易,但我宁愿在可能的情况下透明地解决问题。虽然我意识到git有一些像这样的东西(自动转换换行符等)的内置支持,但我希望更灵活的东西。预提交钩子可以执行此操作吗?你能直接修改索引(还是有更好的方法)?编写一个git钩子来在本地提交时自动修改代码

我也意识到最终我需要一个服务器钩子来拒绝那些不使用本地钩子的开发人员的坏提交,但我想帮助那些选择使用它的人。 (如果可以修改服务器上更好的代码,但我不相信你可以。)

+0

你不能用一个提交钩子做到这一点,但你可以用一个过滤器驱动程序来做到这一点。 – 2010-02-23 04:12:43

+0

你可以做一个预先提交的钩子。我使用它来在特定文件上放置时间戳。其实很简单。 – tjameson 2011-09-13 21:57:53

回答

0

下面是使用过滤器驱动程序删除尾随空白的示例。请注意,在您提交之后,空白将保留在工作副本中,直到您完成结帐。另请注意,下面的sed命令括号中的空格是一个制表符和一个空格。

 
$ rm -rf .git 
$ git init 
Initialized empty Git repository in /private/tmp/foo/.git/ 
$ echo 'trailing white ' > file 
$ echo 'file filter=white' > .git/info/attributes 
$ cat << EOF >> .git/config 
> [filter "white"] 
>   clean = sed 's/[  ]*$//' 
> EOF 
$ git add file 
$ git ci -m"Sample commit" 
[master (root-commit) 654fa8d] Sample commit 
1 files changed, 1 insertions(+), 0 deletions(-) 
create mode 100644 file 
$ git checkout -f master file 
$ cat -tve file 
trailing white$