【问题标题】:TortoiseSVN post-commit hook fails on Win 7TortoiseSVN 提交后挂钩在 Win 7 上失败
【发布时间】:2014-03-07 12:26:03
【问题描述】:

我想在我的开发盒上提交后自动更新远程登台服务器。 我正在尝试在 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  

【问题讨论】:

  • 1.将标准输出重定向到日志文件 2. 尝试使用原生 Plink 而不是 ssh

标签: windows svn batch-file ssh tortoisesvn


【解决方案1】:

你的钩子可能找不到 ssh。

使用完整路径名会有所帮助。

如果这没有帮助,将工作目录更改为 ssh 的位置会有所帮助。

在最坏的情况下,您可以从批处理文件中将 ssh 的位置添加到路径中。这只会在执行期间影响路径。我相信每次调用乌龟都会创建一个新的外壳。

【讨论】:

    【解决方案2】:

    svn book中提到的:

    出于安全原因,Subversion 存储库在空环境下执行挂钩程序——也就是说,根本没有设置任何环境变量,甚至没有设置 $PATH(或 Windows 下的 %PATH%)。正因为如此,当他们的钩子程序手动运行良好时,许多管理员感到困惑,但在 Subversion 运行时却无法运行。请务必在您的钩子程序中明确设置任何必要的环境变量和/或使用程序的绝对路径。

    这意味着您的钩子脚本不知道在哪里可以找到 ssh 以及当前目录是什么(因此使用相对路径很可能也不起作用)。

    【讨论】:

    • 谢谢,但这无济于事。错误仍然存​​在,我升级了问题。
    • 这是客户端钩子,而不是存储库端
    【解决方案3】:

    解决方案是使用plink.exe 代替 TortoiseGit ssh.exe。 这将起作用:

    c:\plink.exe -ssh -batch -l {username} -i "C:\Users\{path-to-ssh-key.pem}" {server_address} ./svnup
    

    【讨论】:

      猜你喜欢
      • 2013-08-26
      • 2013-03-17
      • 2014-12-31
      • 2019-06-02
      • 2013-02-07
      • 2015-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多