我想在我的开发箱上提交后自动更新远程登台服务器。 我正在尝试在Win 7 64上设置TortoiseSVN post-commit hook。 我在系统中安装了TortoiseGit,其中包含许多有用的命令,如'ssh'
我创建了 test.bat 脚本,其中包含:
ssh -l {username} -i "C:\Users\{path-to-ssh-key.pem}" {server_address} ./svnup
此脚本在远程登台服务器上运行'svn up'。这个 test.bat 文件在手动启动时工作正常。但它不适用于提交后配置。出现空白控制台屏幕,而TortoiseSVN显示错误:
Error: The hook script returned an error:
Error: 0 [main] ssh 2040 fhandler_base::dup: dup(some disk file) failed, handle 0, Win32 error 6
Error: dup() in/out/err failed
你可以建议吗?
UPD:我将批处理脚本升级为使用完整路径。
"C:\Program Files (x86)\Git\bin\ssh.exe" -l {username} -i "C:\Users\{path-to-ssh-key.pem}" {server_address} ./svnup
但错误仍然存在。现在它有一些新的数字
Error: The hook script returned an error:
Error: 0 [main] ssh.exe" 6976 fhandler_base::dup: dup(some disk file) failed, handle 0, Win32 error 6
Error: dup() in/out/err failed
答案 0 :(得分:2)
你的钩子可能找不到ssh。
使用完整路径名可以提供帮助。
如果这无助于将工作目录更改为ssh的位置可以提供帮助。
在最糟糕的情况下,您可以在批处理文件中将ssh的位置添加到路径中。这只会影响执行期间的路径。我相信每次调用龟都会创建一个新的shell。
答案 1 :(得分:2)
如svn book中所述:
出于安全原因,Subversion存储库执行具有空环境的钩子程序 - 即根本没有设置环境变量,甚至不是$ PATH(或Windows下的%PATH%)。因此,许多管理员在他们的钩子程序手动运行时感到困惑,但在Subversion运行时不起作用。请务必在钩子程序中明确设置任何必要的环境变量和/或使用程序的绝对路径。
这意味着你的钩子脚本不知道在哪里找到ssh以及当前目录是什么(所以使用相对路径很可能也不会工作)。
答案 2 :(得分:1)
解决方法是使用plink.exe代替TortoiseGit ssh.exe。 这将有效:
c:\plink.exe -ssh -batch -l {username} -i "C:\Users\{path-to-ssh-key.pem}" {server_address} ./svnup