/Git/sh 复制代码

/Git/sh 复制代码

我在 Windows Server 2016 上安装了 Bonobo git 服务器。它部署在 IIS 中,可通过 URL myserver/git 访问。接下来,我想启用自动部署。在 Git Server 裸存储库文件夹中,我找到 hooks 文件夹并添加一个 post-receive 脚本:

#!/bin/sh
cd E:/public/root/myFirstRepo
git pull

当我以个人用户身份运行它时,它工作正常。但是,当提交后由 IIS 使用它时,它给出:

git:“pull”不是 git 命令。请参阅“git --help”。

我使用的 git 正确吗?

#!/bin/sh
git --exec-path

个人用户:C:\Program Files\Git\mingw64/libexec/git-core

IIS 用户:/libexec/git-core

因此让我们将脚本改为使用绝对 git 路径:

#!/bin/sh
cd E:/public/root/myFirstRepo
"C:/Program Files/Git/mingw64/libexec/git-core/git" pull

致命:不是 git 存储库:“。”

这可能是因为我已经在 git repo 中,即裸服务器 repo,这可能会混淆 git?所以让我们尝试忽略任何现有环境。

#!/bin/sh
cd E:/public/root/myFirstRepo
env -i "C:/Program Files/Git/mingw64/libexec/git-core/git" pull

然而这似乎破坏了 Windows 版 git bash:

错误:无法生成 sh:没有此文件或目录

好的,让我们尝试使用 git -C 标志:明确说明要操作哪个文件夹。

#!/bin/sh
"C:/Program Files/Git/mingw64/libexec/git-core/git" -C "E:/public/root/myFirstRepo" pull

仍然:

致命:不是 git 存储库:“。”

此时我已经没有主意了。我的问题基本上是:如何在 Windows 环境中正确设置 git 服务器后接收脚本?

答案1

我尝试在 Windows 2012 实例上执行相同的操作。经过一段时间的努力,我能够使用 post-receive 钩子来更新本地存储库。假设您已安装 Bonobo Git 服务器和 Git,请按照以下步骤操作。我使用了初始帖子中的路径。

  1. 使用 git clone http(s)://username:password#myserver/Bonobo.Git.Server/.git 创建本地仓库

您需要包含用户名和密码,以便将其存储在本地。这对于挂钩操作是必需的。这有点安全问题,但我认为该服务器不会定期被管理员以外的人访问。

  1. 将 IIS_IUSRS 帐户添加到新创建的 git 存储库。右键单击目录并添加用户帐户。授予其写入权限。我实际上授予了完全控制权。

  2. 在存储库的 hooks 目录中创建 post-receive 文件(无扩展名)。使用正确的 Git 可执行文件路径,而不是 Bonobo Git。

/Git/sh 复制代码

cd E:\public\root\myFirstRepo\

“c:\Program Files/Git/mingw64/libexec/git-core/git” --git-dir=E:\public\root\myFirstRepo\.git 存储

“c:\Program Files/Git/mingw64/libexec/git-core/git” --git-dir=E:\public\root\myFirstRepo\.git pull

最初会出现一些警告,但是一旦您将文件推送到远程服务器,钩子脚本就会相应地更新它们。

相关内容