Назад | Перейти на главную страницу

Не могу нажать на удаленные репозитории git

У меня проблемы с отправкой моего кода в удаленный репозиторий 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?

Я вижу две потенциальные проблемы:

  1. Пользователю httpd необходимо доступ для записи ко всем файлам репо
  2. Репозиторий должен быть голый

Доступ для записи для пользователя httpd

Есть ли у веб-сервера доступ на запись ко всем частям репозитория? Когда вы нажимали локально, вы могли создать файлы с учетной записью пользователя (или 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 о том же сообщении об ошибке при аналогичной настройке.