Git后更新钩不能拉

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

有问题的服务器正在运行Windows Server 2008 R2,使用copSSH和msysGit。

它的主要特点是一对git仓库:一个裸仓库被推到,然后另一个非裸仓库包含一个实时应用程序。

推回到包含更新后的挂钩,如下所示的回购:

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是非裸回购,正如其名字所暗示的那样,活着。 Live.git是包含上面的钩子并被推送到的裸回购。 我无法cd到没有/ cygdrive /的回购,这是通过在诊断推送中回显$ 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作为/c/Repositories/Live.git和/cygdrive/c/Repositories/Live.git通过本地git shell定义为远程存储库。

我已经用直接文件夹path取代了“hub”,甚至尝试了诸如“../Live.git”之类的东西。我尝试过的所有东西都在git更新失败中结束。 在update命令中,Live.git的所有尝试path都是通过git bash尝试的,工作目录设置为Live repo并工作。

感谢您的任何线索或帮助!


更新:我的模式要求我从中心存储库中取出,这将需要不必要的空间来解释原因,但情况就是如此。

我做了更多的testing,发现了更多关于我的问题:当我通过SSH推送到我的存储库时,主集线器成功挂载并执行pull命令。 当上述的pull命令尝试parsing集线器库时,它会失败(正如我上面详细介绍的那样),但是事实certificate,钩子中有一系列的ls命令,没有文件夹可见。 我甚至在/ cygdrive / c /上运行了ls,只能看到名为usr的文件夹。 我已确保copSSH用户在整个文件系统上具有完全的pipe理权限(仅用于testing和debugging目的)。

我不知道为什么我的path必须使用/ cygdrive /path,除了在copSSH中打包的cygwin,我没有安装cygwin。 这是指示我的configuration中的问题? 或者这是正常的copSSH + msysGit设置? 即使ls不会列出存储库文件夹,我怎么可能从挂接挂载主存储库?

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

你不应该试图从repo钩子运行git pull 。 虽然有些人会说它运作良好,但不会因为各种因素而导致行为不可预测。

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

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