3

我正在调用一个 git 钩子来预先提交。这会触发对 groovy 脚本的调用,并以允许远程调试挂钩执行的方式执行此操作。像这样:

#!/usr/bin/env groovy
groovy -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=8085,suspend=y "C:\Users\.......hooks\PreCommit.groovy"

当我使用 GIT BASH 触发钩子时,我看到以下错误:

/c/Program Files (x86)/Groovy/Groovy-2.1.0/bin/startGroovy: line 96: [: too many arguments org.codehaus......: startup failed: .... expected EOF, found ':' @ line 3 column 35]

当我快速查看 startGroovy 文件时,我看到以下不清楚的代码 - 其中第 96 行是 GROOVY 主页的 if 条件:

# For Cygwin, ensure paths are in UNIX format before anything is touched.
if $cygwin ; then
  [ -n "$GROOVY_HOME" ] && GROOVY_HOME=`cygpath --unix "$GROOVY_HOME"`
  [ -n "$JAVACMD" ] && JAVACMD=`cygpath --unix "$JAVACMD"`
  [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
  [ -n "$CP" ] && CP=`cygpath --path --unix "$CP"`
else
  if [ -n "$GROOVY_HOME" -a `expr "$GROOVY_HOME":'\/$'` ] ; then
      GROOVY_HOME=`echo $GROOVY_HOME | sed -e 's/\/$//'`
  fi
fi

这是 groovy 引导程序中的错误吗?我的 Windows 7 让环境变量 GROOVY_HOME 正确指向:C:\program file (x86)\Groovy\Groovy-2.1.0

4

2 回答 2

4

问题出在 Groovy 的脚本中。该脚本没有在所有正确的地方正确引用环境变量 GROOVY_HOME。GROOVY_HOME 表示的路径中的空格,在我的情况下,“程序文件 (x86)”有 2 个空格,被解释为分隔符,并导致路径被解析为超过 1 个参数。要修复它,请将 Windows 环境变量 GROOVY_HOME 的定义更改为使用波浪号版本的路径。编辑您的环境变量 GROOVY_HOME(在 Vista 上,开始/右键单击计算机/属性/高级系统设置/环境变量/用户或系统,我的是系统)并设置为 c:/Progra~2/Groovy/Groovy-2.1。 3. 当您启动 Git、MinGW 或 CygWin shell 时,您不会有空格,也不会出现任何错误。

于 2013-04-17T02:46:48.267 回答
1

Git Bash 中缺少 cygpath 命令,它只实现了 cgywin 的精简版本。一种解决方案是为 git 使用完整的 cygwin 安装,但它可能类似于使用 unix 样式的目录名称创建自己的 .bashrc:

# Check to see what the DOS directories are
echo GROOVY_HOME=$GROOVY_HOME
echo JAVACMD=$JAVACMD
echo JAVA_HOME=$JAVA_HOME
echo CP=$CP

# Add the directories you found to .bashrc in a unix style
cat - >>~.bashrc
export GROOVY_HOME='/c/program file (x86)/Groovy/Groovy-2.1.0'
export JAVACMD="..."
export JAVA_HOME="/c/Program files/Java/jre7/bin/java"
export CP= "..."

请根据需要更改路径。您可以使用 notepad++ 或其他编辑器而不是 cat 来编辑 .bashrc。请记住 cat - 命令在 Bash 中使用 Control-D 终止,而 DOS 复制 con file.txt 使用 Control-Z。通过将这些变量放在 .bashrc 中,它们不会干扰您的 DOS 环境变量。

于 2013-02-19T22:08:29.190 回答