我无法将代码从本地主机推送到 git 远程存储库。 此问题仅出现在最初使用系统目录(例如 /var/www/lib)作为远程 URL 创建,之后通过 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
以下是创建问题的步骤。最初,我从远程服务器本身填充了远程裸存储库,如下所示:
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,以便可以从本地主机推送和拉取。我很确定我正确安装和配置了 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 版本创建的新存储库在推送和拉取时都没有问题。只有最初使用 /var/lib/git 创建的旧存储库在切换到 http 版本时才会出现问题。
有谁知道如何解决这一问题?
答案1
从您的问题中我得知,同一用户的 webdav 可以按照其他存储库的预期方式运行,因此 webdav 配置正确。
指向哪里?它指向的是 repo还是?http://[email protected]/newproject.git
/var/lib/git/newproject.git
/var/www
我发现两个潜在的问题:
- httpd 用户需要写访问到所有 repo 文件
- 存储库应该是裸
为 httpd 用户提供写权限
Web 服务器是否对存储库的所有部分都具有写权限?当您在本地推送时,您可能使用 Web 服务器现在无法写入的用户帐户(或 root)创建了文件。显然,当 Web 服务器尝试访问 上的存储库时,情况也是如此/var/www
。
最好的选择是将chown -R
所有文件交给 httpd 用户。
裸仓库
目标仓库是裸仓库吗?
从技术上来说,仓库不必是裸的,但当您签出要推送到的分支的工作副本时,可能会出现问题。您的问题可能是这些问题之一。
也可以看看如何将 git 存储库从普通存储库转换为裸存储库 和关于“裸”仓库。
您应该检查目标目录中的 和类似内容是否存在问题git status
。git branch
如果您仍然遇到问题,另一个显而易见的选择是克隆提供的 repo,将提供的 repo 移动到其他地方git init --bare
(修复权限或以 httpd 用户身份执行)并再次推送。
git 远程引用头 master 的问题不是本地引用 h 的祖先是 Stackoverflow 上关于类似设置中相同错误消息的一个问题。