我正在设置一个git架构,如here所述。
有问题的服务器使用copSSH和msysGit运行Windows Server 2008 R2。
它的主旨是一对git repos:一个被推送的裸仓库,然后是另一个包含实时应用程序的非裸仓库。
推送到的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是非裸露的回购,顾名思义,就是生活。 Live.git是包含上述钩子并被推送到的裸仓库。我无法在没有/ cygdrive /的情况下使用CD,这是通过在诊断推送中回显$ pwd而发现的。
在Live repo中成功调用了Pull,问题在于在该更新中找到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.git和/cygdrive/c/Repositories/Live.git。
我用直接文件夹路径替换了“hub”,甚至尝试了“../Live.git”之类的东西 我尝试的所有内容都以git更新失败告终。更新命令中Live.git的所有尝试路径都是通过git bash尝试的,工作目录设置为Live repo并且工作正常。
感谢您的任何线索或帮助!
更新: 我的架构要求我从集线器存储库中取出,需要花费不必要的空间来解释原因,但情况就是这样。
我做了更多测试,发现了更多关于我的问题: 当我通过SSH推送到我的存储库时,主要集线器已成功安装并执行pull命令。当所述pull命令尝试解析集线器存储库时,它失败了(如上所述),但事实证明,钩子中有一系列ls命令,没有可以看到文件夹。我甚至在/ cygdrive / c /上运行了一个ls,只能看到一个名为usr的文件夹。我确保copSSH用户对整个文件系统具有完全管理权限(仅用于测试和调试)。
我不知道为什么我的路径必须使用/ cygdrive / path,除了copSSH中打包的cygwin之外我没有安装cygwin。这是否表明我的配置存在问题?或者这对于copSSH + msysGit设置是否正常?我怎么可能从钩子挂载主存储库,即使ls不会列出存储库文件夹?
答案 0 :(得分:1)
你在msysgit的路径中不需要/cygdrive
,除非你也安装了cygwin(在这种情况下,msysgit mingw和cygwin的组合可能是你问题的根源)
答案 1 :(得分:1)
您不应该尝试从repo hook运行git pull
。虽然有些人会说它运作正常,但却没有,并且由于各种因素,行为可能无法预测。
相反,你应该使用像这样的方法。 http://toroid.org/ams/git-website-howto
该方法在裸仓库中使用post-receive hook,调用git checkout
来更新目录。