У меня проблемы с отправкой моего кода в удаленный репозиторий git с моего локального хоста. Эта проблема возникает только для репозиториев, которые изначально были созданы с удаленными URL-адресами, которые являются системными каталогами (например, / var / www / lib), а затем доступны через удаленные URL-адреса, которые являются URL-адресами http (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://www-data@website.com/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, не имеют проблем с push и pull. Только старые репозитории, которые были созданы с помощью / var / lib / git, имеют проблемы при переходе на http-версию.
Кто-нибудь знает, как это исправить?
Я понимаю из вашего вопроса, что webdav для того же пользователя работает так же, как и для других репозиториев, поэтому webdav настроен правильно.
Где же http://www-data@website.com/newproject.git
указать на? Указывает ли это на репо в /var/lib/git/newproject.git
или чтобы /var/www
?
Я вижу две потенциальные проблемы:
Есть ли у веб-сервера доступ на запись ко всем частям репозитория? Когда вы нажимали локально, вы могли создать файлы с учетной записью пользователя (или root), которую веб-сервер сейчас не может записать. Очевидно, то же самое применяется, когда веб-сервер пытается получить доступ к репо в /var/www
.
Лучшим вариантом будет chown -R
все файлы пользователю httpd.
Является ли целевое репо голым репо?
Технически не обязательно, чтобы репо было пустым, но есть проблемы, которые могут возникнуть, когда у вас есть извлеченная рабочая копия ветки, на которую вы нажимаете. Ваша проблема может быть одной из этих проблем.
Смотрите также как-преобразовать-а-git-репозиторий из нормального в голый и все о "голых" репозиториях.
Вы должны проверить git status
, git branch
и аналогичное в каталоге назначения для проблем.
Если у вас по-прежнему возникают проблемы, другой очевидный вариант - клонировать обслуживаемое репо, переместить обслуживаемое репо в другое место, git init --bare
(исправьте разрешения или сделайте это как пользователь httpd) и снова нажмите.
проблема-с-git-remote-refs-head-master-is-not-an-ancestor-of-local-refs-h - это вопрос по Stackoverflow о том же сообщении об ошибке при аналогичной настройке.