从服务执行 git-bash.exe

Posted

技术标签:

【中文标题】从服务执行 git-bash.exe【英文标题】:Execute git-bash.exe from a service 【发布时间】:2021-08-07 06:13:33 【问题描述】:

我正在研究如何在 Powershell 环境中自动部署代码。

我可以在真实会话中轻松执行以下命令来更新存储库的代码:

C:\path\to\PortableGit\git-bash.exe -c 'git -C  /c/path/to/repository.git pull' 

但是我们不想登录会话来更新代码。

我们创建了一个服务来负责更新存储库。问题是该命令在真实会话中有效,但在服务中无效 - 它只是挂断。

我相信是因为 git-bash.exe 需要在命令实际执行时用 bash 打开一个新窗口一小段时间。

如何从 Service 执行此命令?还有其他合理的选择吗?

【问题讨论】:

【参考方案1】:

尝试将路径用引号括起来,并在开头添加调用运算符 &

& "C:\path\to\PortableGit\git-bash.exe" -c 'git -C  /c/path/to/repository.git pull'

【讨论】:

这是个好主意。不幸的是,我已经尝试过了,命令仍然挂断。我已经在 powershell 中尝试了一个真正的会话,并且这个窗口仍在打开。【参考方案2】:

嗯,最后我看到除了使用 git.exe 而不是 bash-git 之外别无他法。

因此,将命令转换为 Windows 本机就可以了。如果你设置了私钥认证,你只需要设置 HOMEPATH 变量。

$env:HOMEPATH="\Users\Administrator";C:\path\to\PortableGit\bin\git.exe -C C:\path\to\repository.git pull'

【讨论】:

以上是关于从服务执行 git-bash.exe的主要内容,如果未能解决你的问题,请参考以下文章

从 Internet 信息服务执行期间出现异常

从 PHP 服务器执行 hadoop jar 失败。没有权限

无法从客户端执行服务器命令

javascript 从服务器脚本执行存储过程

有没有办法从服务中运行可执行文件?

从 Spark 服务器执行 SFTP 时,大型机服务器上的记录级别数据截断