post-receive hook调用可执行文件:无法执行二进制文件

时间:2013-06-13 15:21:37

标签: git smtpclient git-post-receive

设置:

  • 在LAN服务器(linux)上有一个远程git存储库
  • 可以通过samba和ssh访问此存储库。这两种访问方法都用于各种开发人员,以及所有使用Windows的开发人员。
  • post-receive脚本(最后)调用命令行smtp mailer,它会发送一封电子邮件(通过内部smtp服务器)
  • 我有2个命令行smpt mailers,一个用于windows(bmail.exe),另一个用于linux(smtpstoat)。两者都

问题:

  • 如果通过ssh访问远程存储库的开发人员调用linux可执行文件(smtpstoat)的后接收脚本,git push执行正确(发送电子邮件)。但是,当通过samba访问的开发人员的另一部分执行git push命令时,git会抱怨:remote: ./hooks/smtpstoat: ./hooks/smtpstoat: cannot execute binary file
  • 如果我修改后接收脚本以调用Windows可执行文件(bmail.exe),那么具有samba访问权限的开发人员对git push没有任何问题。但是ssh用户得到了:remote: hooks/post-receive: line 708: ./hooks/bmail.exe: cannot execute binary file

无论您如何访问远程存储库,如何使此电子邮件发送工作?

1 个答案:

答案 0 :(得分:0)

好吧,钩子是由写入存储库的git进程执行的。当您推送SSH时,此过程在SSH会话中运行。因此,当开发人员推动SSH时,他实际上会登录,更新仓库并执行钩子。

当有人推动SMB时,它是他的 git proccess谁更新了回购。该进程正在他的机器上运行,当然它无法执行该二进制文件。

无论如何,推动SMB并不是一个非常棒的想法。我想你的最佳解决方案是让Windows开发人员推动SSH。对他们来说应该不是问题。