如何在通过file:// protocol指定的遥控器上正确设置挂钩?

eck*_*kes 3 windows git hook git-post-receive

假设我有一个origin添加的上游repo()

git remote add origin file:////upstream.host/repo.git
Run Code Online (Sandbox Code Playgroud)

repo.git是一个Windows共享文件夹,我和我的开发人员分配了r/w访问权限.

现在,我想设置一个post-receive钩子upstream.host,通知Trac关于自动票证更新的新推送修订.基本上,这是通过调用一个可执行文件来完成的,upstream.host那里有一些工作在那里的数据库.

但是,由于某种原因,我通知钩子不起作用.所以我设置了钩子来打印她正在做的所有事情D:/temp/post-receive.log并发出一个git push以触​​发钩子.

当我查看D:/tempupstream.host,没有创建日志文件.然后,我想到了另一个问题:https://superuser.com/questions/974337/when-i-run-a-git-hook-in-a-repo-on-a-network-share-which-二进制文件被使用.实际上我的机器的二进制文件用于执行挂钩时,也可能使用我的机器的路径.我调查了D:/temp一下,在这里,我们有了post-receive.log.

我跟踪pwd到日志文件,它不是D:/repos/repo.git(我的预期),但实际上是//upstream.host/repo.git.显然,整个钩子是在推进器机器的上下文中执行的,而不是在repo机器(upstream.host)的上下文中执行的.

这对来说没有问题,因为我有远程机器的管理员权限,并且可以使用管理共享来获取我的钩子(即\\upstream.host\D$\repos\repo.git等).但这对我的同事来说一个问题,因为他们是普通的用户,没有根源.

如何post-receive正确设置我的钩子以使其按预期工作?

如何在不使用机器上的任何东西的情况下强制我的钩子完全在远程机器上运行?

我真的必须实现托管我的仓库的真实服务器吗?还是有其他方法不需要服务器?

uml*_*ute 5

一个post-receive钩承载信息库中的机器上接收到数据之后运行.

现在,"托管存储库"的机器不是存储实际packed-refs和其他git数据库文件的文件服务器.(此文件服务器可以是从基于冗余云的存储设备到任何旧的启用NAS的"网络磁盘").

相反,它是运行"git frontend"的机器(即实际与数据库交互的git命令).

现在您正在使用"网络共享"来托管您的(远程)git存储库.对于您的计算机(客户端),这只是另一个磁盘设备(如软盘),客户端上的git 会很乐意在那里存储数据库文件,并运行任何挂钩.但这是你的计算机,因为它被告知在本地运行远程 - 只是因为file://协议确实意味着"本地".

顺便说一句,您的遥控器被命名的事实upstream.host是没有意义的:这个名称仅供跟踪多个遥控器,但可以调用它thursday.next .

因此,无法在文件服务器上运行任何恰好存储某些文件名pack-refs和类似名称的脚本.

如果你想让git服务器为你运行钩子,你必须先拥有一个git服务器.更糟糕的是:如果你想让machineX上的git服务器在machineX上运行脚本,你必须首先在machineX上安装一个git服务器.

好消息:没有必要"实现真正的服务器".只需安装一个预先存在的.你可以在Git Book中找到关于它的文档,但对于初学者来说,它基本上已经足够了git(用于与数据库交互)和sshd(通过网络进行安全通信;以及git在适当时调用).

最后:我真的很高兴您需要在远程端运行软件(例如服务器)来执行代码.想象一下,如果将一些html文件复制到你的USB磁盘会突然产生一个Web服务器,这意味着什么.不要想在我的linux NAS上快乐地繁殖w32病毒......

  • 似乎*创造性的方式*被从原始问题中删除.相反,我读到"我真的必须实现托管我的仓库的真实服务器吗?" 我试图回答. (2认同)