我使用groovy脚本编写了git pre-commit hook。我使用的是Windows 7.因为文件位于
.git/hooks/pre-commit
不受版本控制,我已将这些预提交挂钩移动到项目子存储库。
${PROJECT_REPO}/git-hooks
目录。
这是文件@ .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测试我的预提交钩子
文件@ .git/hooks/pre-commit
正确执行,可以正确找到${GROOVY_HOME}
和${JAVA_HOME}
路径。但是在执行以下行
def process = "cmd /c groovy ../../git-hooks/pre-commit".execute();
失败并出现以下错误。
错误:JAVA_HOME设置为无效目录: C:\ Program Files(x86)\ Java \ Jdk1.8.0_51 请在您的环境中设置JAVA_HOME变量以匹配其位置 你的Java安装。
有人可以帮我解决这个错误吗?
我正在寻找一个groovy脚本解决方案而不是bash脚本。
答案 0 :(得分:0)
我最终使用了Windows符号链接。
cmd /c mklink /H ${link_file_full_path} ${Target_file_full_path}
从位于$WORK_TREE
的另一个groovy脚本调用一个groovy脚本(位于$GIT_DIR
})不起作用。
我认为必须与环境变量有关。 Smartgit将所有环境变量传递给第一个脚本,并在调用另一个脚本时丢失该信息。