将checkstyle添加为pre-commit git hook

时间:2018-06-07 13:03:06

标签: java git hook checkstyle

我想添加这个:https://gist.github.com/davetron5000/37350 checkstyle代码格式检查为pre-commit git hook。

我按照下面的说明进行操作但不起作用。

我尝试过的步骤:

  
      
  1. Checkstyle的jar文件
  2.   
  3. Checkstyle XML检查文件
  4.   
  5. 配置git:      
        
    • git config --add checkstyle.jar <location of jar>
    •   
    • git config --add checkstyle.checkfile <location of checkfile>
    •   
    • git config --add java.command <path to java executable> [optional, defaults to assuming it's in your path]
    •   
  6.   
  7. 将此作为预提交
  8. 放入.git / hooks目录中   

也许它不起作用,因为我不明白git config --add java.command <path to java executable>的含义。但它说它是可选的如果那不是问题,我可能需要以某种方式使脚本文件成为可执行文件吗?

ps:操作系统是Windows

2 个答案:

答案 0 :(得分:3)

好吧,好像我终于找到了解决方案。我在指示中添加了一些评论,说明我是如何工作的。

 1. checkstyle's jar file somewhere
 2. a checkstyle XML check file somewhere
 3. To configure git:
   * git config --add checkstyle.jar <location of jar>
   * git config --add checkstyle.checkfile <location of checkfile>
   * git config --add java.command <path to java executale> [optional
    defaults to assuming it's in your path]

我检查了我的配置(可以在git reposirtory的.git目录中找到),它看起来像这样:

 ...    
 [checkstyle]   
 checkfile = C:\\Users\\schuster\\Desktop\\checkstyle
 jar = C:\\Users\\schuster\\Desktop\\checkstyle    
  ...   

因此,我在Windows上工作时将其更改为:

...
[checkstyle]
    checkfile = C:/Users/schuster/Desktop/checkstyle/google_checks.xml
    jar = C:/Users/schuster/Desktop/checkstyle/checkstyle.jar
...

 4. Put this in your .git/hooks directory as pre-commit

'这是'我在说明问题时链接的文件。所以这个文件需要在/ hooks目录中。但它必须重新命名为已存在的现有样本之一。由于我的钩子是预提交钩子,我采用了“预提交”文件名。接下来,此文件必须成为可执行文件。要在git存储库的/ hooks目录中的chmod +x pre-commit中输入。如果您使用Windows,请使用Git Bash。

编辑:

如果有人想要使用这个脚本,并想知道为什么即使检查失败也不会中止 - 这是如何修复它。 在第58行          if (&run_and_log_system ($command))
          必须高呼到          if (!&run_and_log_system ($command))

答案 1 :(得分:1)

配置checkstyle.jar和checkstyle.checkfile之后。如果它不会因检查失败而中止,则可以解决此问题。

在第58行

$command .= " | grep WARN "; if (!&run_and_log_system ($command))

替换为下方

documentClient