我在 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,请按照以下步骤操作。我使用了初始帖子中的路径。
- 使用 git clone http(s)://username:password#myserver/Bonobo.Git.Server/.git 创建本地仓库
您需要包含用户名和密码,以便将其存储在本地。这对于挂钩操作是必需的。这有点安全问题,但我认为该服务器不会定期被管理员以外的人访问。
将 IIS_IUSRS 帐户添加到新创建的 git 存储库。右键单击目录并添加用户帐户。授予其写入权限。我实际上授予了完全控制权。
在存储库的 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
最初会出现一些警告,但是一旦您将文件推送到远程服务器,钩子脚本就会相应地更新它们。