将 checkstyle 添加为预提交 git 钩子

2022-09-03 15:11:52

我试图添加这个:https://gist.github.com/davetron5000/37350 checkstyle代码格式检查作为预提交git钩子。

我按照以下说明操作,但它不起作用。

我尝试过的步骤:

  1. Checkstyle 的 jar 文件位于某处
  2. 检查样式 XML 检查文件某处
  3. 配置 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]
  4. 将其作为预提交放在您的 .git/hooks 目录中

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

ps: OS is Windows


答案 1

好吧,似乎我终于找到了解决方案。我在说明中添加了一些注释,说明我如何使其工作。

 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    
  ...   

因此,由于im在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 预提交。如果你使用Windows,请使用Git Bash来做到这一点。

编辑:

如果有人想使用此脚本,并且想知道为什么即使检查失败也不会中止 - 这是如何解决它。在第58

行必须吟唱if (&run_and_log_system ($command))
if (!&run_and_log_system ($command))


答案 2

配置 checkstyle 后.jar和 checkstyle.checkfile。如果它没有在检查失败时中止,这里是修复程序。

在第 58 行

if (&run_and_log_system ($command))

替换为以下内容

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

推荐