将Checkstyle添加为Git预提交钩子

16

我正在尝试将此https://gist.github.com/davetron5000/37350 checkstyle代码格式检查添加为pre-commit git钩子。

我按照以下步骤进行了尝试,但它没有起作用:

  1. 在某个位置放置Checkstyle的jar文件
  2. 在某个位置放置Checkstyle XML检查文件
  3. 要配置git:
    • git config --add checkstyle.jar <jar的位置>
    • git config --add checkstyle.checkfile <checkfile的位置>
    • git config --add java.command <java可执行文件的路径> [可选项,默认为假定其在您的路径中]
  4. 将此文件作为pre-commit放入.git/hooks目录中

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

ps:操作系统为Windows


我以前从未使用过这个或预提交钩子,但我认为“Java可执行文件路径”意味着您的java.exe文件的路径。它是可选的,因为通常它在类路径上。这个perl程序应该已经是一个可执行文件了。我不确定git实用程序是否知道如何在Windows上执行它,或者您是否需要另一个知道如何执行它的实用程序。 - rveach
我也这么认为。我已经添加了java.exe的路径,但它仍然无法工作。是啊,因为它显然是一个脚本,所以我认为它也是可执行文件。但是它不起作用,所以我想知道它是否不是可执行文件。 - L.Rex
3个回答

12

好的,我最终找到了一个解决方案。我在说明中添加了一些注释,说明如何让它正常工作。

 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 存储库的 .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

'This'是我在陈述问题时链接的文件。所以这个文件需要放在/hooks目录中。但它必须重命名为其中一个已经存在的示例名称。由于我的hook是pre-commit hook,因此我使用了“pre-commit”文件名。接下来,该文件必须变成可执行文件。要做到这一点,请在您的git存储库的/hooks目录中键入chmod +x pre-commit。如果您使用Windows,请使用Git Bash。

编辑:

如果有人想使用此脚本并想知道为什么即使检查失败它也不会中止-解决方法如下。 第58行
if (&run_and_log_system ($command))
必须更改为
if (!&run_and_log_system ($command))


谢谢你的修复,但是对于我来说,使用这个修复方法每次都失败了,即使没有任何检查失败。 - Noah Martin

2

在配置了checkstyle.jar和checkstyle.checkfile之后,如果它没有在检查失败时中止,则可以使用以下方法进行修复。

在第58行

if (&run_and_log_system ($command))

替换为以下内容:

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

0

我已经开源并发布了Commit Controls,这是一个ZIP包,旨在原生地使连接Javaland项目中的Checkstyle变得更加容易。

项目主页和文档。希望这个项目能够简化大多数使用情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接