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 将所有环境变量传递给第一个脚本,当调用另一个脚本时该信息将丢失。
我已经使用 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 将所有环境变量传递给第一个脚本,当调用另一个脚本时该信息将丢失。