Git 执行另一个脚本时预提交挂钩错误

Git pre-commit hook errors while executing another script

我已经使用 groovy 脚本编写了 git 预提交挂钩。我正在使用 Windows 7. 由于文件位于

.git/hooks/pre-commit

不受版本控制,我已将这些预提交挂钩移至项目子存储库。

${PROJECT_REPO}/git-hooks directory.

这是文件@中的脚本.git/hooks/pre-commit

#!/usr/bin/env groovy
public class PreCommitHooks
{
    public static boolean CheckBannedFilesToCommit() 
    {
        def process = "cmd /c groovy ../../git-hooks/pre-commit".execute();
        process.waitFor();
        if (process.exitValue())
        { 
            return false;
        }
        return true;
    }
}

// Create an instance of PreCommitHooks() class and execute list of hooks.
preCommitHook = new PreCommitHooks();
if (!preCommitHook.CheckBannedFilesToCommit())
{
    System.exit(1);
}
else
{
    System.exit(0);
}

文件@中的脚本git-hooks/pre-commit

#!/usr/bin/env groovy

This is pseudo code only 
process all the hook info.
.... 
if (!bSuccess)
    system.exit(1);
else
    system.exit(0);

我已经正确安装了所有 ${GROOVY_HOME}${JAVA_HOME} 路径,使用 windows 命令行验证。当使用 Windows 命令行调用时,我的脚本 运行 完美无缺。

${PROJECT_REPO}/.git/hooks>groovy pre-commit

由于所有脚本都在工作,我继续使用 smart-git

测试我的预提交挂钩

File @ .git/hooks/pre-commit 正确执行,它能够正确找到 ${GROOVY_HOME}${JAVA_HOME} 路径。但是当执行以下行时

def process = "cmd /c groovy ../../git-hooks/pre-commit".execute();

失败并出现以下错误。

Error: JAVA_HOME is set to invalid directory: C:\Program Files (x86)\Java\Jdk1.8.0_51 Please set the JAVA_HOME variable in your environment to match the location of your Java installation.

谁能帮我解决这个错误?

我正在寻找 groovy 脚本解决方案而不是 bash 脚本。

我最终使用了 windows 符号链接。

cmd /c mklink /H ${link_file_full_path} ${Target_file_full_path}

从位于 $GIT_DIR 的另一个 groovy 脚本调用 groovy 脚本(位于 $WORK_TREE} 无效。

我想一定是环境变量的问题。 Smartgit 将所有环境变量传递给第一个脚本,当调用另一个脚本时该信息将丢失。