我无法从我的本地主机推我的代码到git远程存储库。 这个问题只出现在最初使用系统目录(例如/ var / www / lib)的远程URL创build的仓库,后来通过http URL的远程URL( eg. http://mysite.com/repo.git ) 。 这是我得到的错误:
Fetching remote heads... refs/ refs/tags/ refs/heads/ fetch 023264fe3e5e24075307512502599d279c1a1640 for refs/heads/master error: remote 'refs/heads/master' is not an ancestor of local 'refs/heads/master'. Maybe you are not up-to-date and need to pull first? fatal: git-http-push failed
以下是创build问题的步骤。 最初,我从远程服务器本身填充远程裸仓库,如下所示:
cd /var/www/ git init git add . git commit -m 'test' git remote add newproject /var/lib/git/newproject.git ## I suspect the problem begins here git push newproject master
大约一个星期以来,我一直在努力,没有任何问题地拉,推,因为我直接从/var/www/远程服务器上工作。 然后今天,我安装了webdav,以便我可以从我的本地主机推。 我很确定我正确地安装和configuration了git和apache。 所以从我的本地主机,这是我做的:
cd /home/user/newproject/ git init git remote add newproject http://[email protected]/newproject.git # this is different from above where i used /var/lib/git/newproject git pull newproject master #worked perfectly vi test.html git add test.html git commit -m 'test' git push newproject master
然后我得到第一个提到的错误。 拉没有解决这个问题。 所有使用http版本创build的新版本库在推拉时都没有问题。 只有使用/ var / lib / git创build的旧版本库在切换到http版本时遇到问题。
有谁知道如何解决这一问题?
我从你的问题,为同一个用户的webdav工作原定的其他存储库,所以webdavconfiguration正确。
http://[email protected]/newproject.git指向哪里? 是否指向/var/lib/git/newproject.git或/var/www上的回购?
我可以看到两个潜在的问题:
Web服务器是否可以访问存储库的所有部分? 当您在本地推送时,您可能已经使用用户帐户(或根目录)创build了networking服务器现在无法写入的文件。 当Web服务器尝试访问/var/www的repo时,显然也是如此。
最好的select是把所有的文件全部复制到httpd用户。
目的地回购是一个裸回购?
在技术上没有必要回购,但有一个问题,可能会出现,当你有一个分支,你正在推出一个检出工作副本。 你的问题可能是这些问题之一。
另请参阅如何将git-repository-from-normal-to-bare转换为gab-repository,以及所有关于“裸”的repos 。
你应该检查目标目录中的git status , git branch和类似的问题。
如果问题仍然存在,另一个显而易见的select是克隆服务器的repo,将服务器的repo移动到其他地方, git init --bare (修复权限或者作为httpd用户),然后重新推送。
问题与git-remote-refs-head-master-is-an-ancestor-of-local-refs-h是关于类似的设置上的相同的错误消息的Stackoverflow的问题。