Git的post-update钩子不能拉



我目前正在设置一个git模式,如下所述。

问题服务器运行Windows server 2008 R2,使用copSSH和msysGit。

它的jist是一对git repo:一个裸的repo被推送,然后另一个非裸的repo包含一个活动的应用程序。

被推送到的repo包含一个更新后钩子,如下所示:

echo
echo "**** Pushing data to Live Server."
echo
cd /cygdrive/c/Repositories/Live || exit
unset GIT_DIR
git pull hub master
exec git-update-server-info

注意:Live是非裸的repo,顾名思义就是Live。生活。Git是包含上述钩子并被推送到的裸repo。我无法在没有/cygdrive/的情况下cd到repo,这是通过在诊断推送中返回$pwd发现的。

Pull在Live repo中被成功调用,问题在于Live的定位。该更新中的Git repo。我得到"奇怪的"错误,读起来像:

remote: Pushing data to Live Server.ommand not foundnd not foundle or directory
remote: : not foundpdate-server-infoand not foundand not founddommand not found

hub通过本地git shell定义为远程存储库,位于/c/Repositories/Live。/cygdrive/c/Repositories/Live.git.

我已经用直接文件夹路径替换了"hub",甚至尝试了像"./Live.git"这样的东西。我所尝试的一切都以git更新失败告终。Live的所有尝试路径。在update命令中使用git bash尝试将工作目录设置为Live repo,并且成功了。

谢谢你的任何线索或帮助!


更新:我的模式要求我从集线器存储库中提取,这将占用不必要的空间来解释为什么,但情况就是这样。

我做了更多的测试,发现了更多关于我的问题:当我通过SSH向存储库推送时,主hub被成功挂载,并执行了pull命令。当上述pull命令试图解析集线器存储库时,它失败了(如上所述),但结果是,在钩子中使用一系列ls命令无法看到任何文件夹。我甚至在/cygdrive/c/上运行了一个ls,只能看到一个名为usr的文件夹。我已经确保copSSH用户对整个文件系统具有完全的管理权限(仅用于测试和调试目的)。

我不知道为什么我的路径必须使用/cygdrive/路径,除了封装在copSSH中的cygwin,我没有安装cygwin。这是否表明我的配置有问题?或者这对于copSSH + msysGit设置是正常的吗?即使ls不列出存储库文件夹,我怎么可能从钩子挂载主存储库呢?

您不应该在msysgit的路径中需要/cygdrive,除非您还安装了cygwin(在这种情况下,msysgit mingw和cygwin的组合可能是您的问题的根源)

您不应该尝试从回购钩子运行git pull。虽然有些人会说这很好,但事实并非如此,而且由于各种因素,行为可能是不可预测的。

相反,您应该使用这样的方法。http://toroid.org/ams/git-website-howto

该方法在裸repo中使用post-receive钩子,调用git checkout来更新目录。

最新更新