0

设置:

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

问题:

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

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

4

1 回答 1

0

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

当有人推送 SMB 时,更新 repo的是他的git 进程。该进程正在他的机器上运行,果然它无法执行该二进制文件。

无论如何,超越 SMB 并不是一个非常棒的主意。我想在您的情况下最好的解决方案是让 Windows 开发人员通过 SSH 推送。这对他们来说应该不是问题。

于 2013-06-13T15:58:02.670 回答