Не удается отправить Git в удаленный репозиторий с помощью http / https
У меня есть репозиторий https://over.wiki/git/" class="blnk">Git в каталоге, обслуживаемом apache на сервере. Я настроил WebDAV и, похоже, работает правильно. Лакмусовая бумажка возвращает 100% успеха.
Я могу клонировать свой репозиторий с удаленного хоста, но при попытке протолкнуть http или https я получаю следующую ошибку:
ошибка: не удается получить доступ к URL https://git.example.com/repo/, код возврата 22 фатальный: git-http-push failed
есть идеи?
8 ответов
настоятельно рекомендуется не использовать WebDAV, если это возможно. Если вы должны использовать HTTP / HTTPS, то использование git-http-backend сценарий CGI рекомендуется через WebDAV.
изменить следующий раздел .файл git/config строку:
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = http://git.repository.url/repo.git
to
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = http://username:password@git.repository.url/repo.git
попробуйте git push origin master
.
измените данные аутентификации в файлах конфигурации для других URL-адресов репозитория по мере необходимости и нажмите на нужную ветку.
в этой комментарий, а что /Web/git/Logs/ErrorLog
говорит об этой ошибке?
посмотрев в
/Web/git/Logs/ErrorLog
, я узнал, что есть проблема с разрешением на файл блокировки. В моемhttpd-dav.conf
, у меня есть линия...
DavLockDB “/usr/var/DavLock”
затем я проверил ’ отсутствует.
$ mkdir var
$ cd var
$ chown www .
$ chgrp www .
и затем повторение процесса кажется, что теперь я могу нажать!! =)
как упоминалось Эдди в комментариях и Arrowmaster в его (голосуют) ответ, the умный протокол http теперь является частью недавнего распространения Git.
The git-http-backend
скрипт CGI может позаботиться о любых командах git через http.
более умные протоколы (git и ssh) вместо этого будут иметь разговор с Git upload-pack процесс на сервере, который определит точный набор объектов, необходимых клиенту, и построит пользовательский packfile только с этими объектами и передаст его.
Git 2.17 (Q2 2018) добавит помощь по отладке.
посмотреть совершить a2b9820 (24 янв 2018) by Судья Обари (dreamer
).
(слитый Junio C Hamano -- gitster
-- на совершить 39a1dd8, 13 февраля 2018)
http-push
: улучшение журнала ошибок, когда
git push
сбой из - за ошибки WebDAV на стороне сервера, это нелегко указывают на главного виновника.
Дополнительная информация о точномcURL
ошибка и ответ HTTP-сервера полезны для целей отладки.
возможно, Вам потребуется добавить пользователя в качестве члена репозитория и, возможно, обновить разрешения.
мы должны были сделать это с каждым членом, который будет вносить свой вклад в репозиторий GitHub наших организаций.
У меня такая же проблема, и я нашел решения, возможно, это будет полезно для кого-то.
здесь - Это мое решение с конфигурацией git-http-backend и аутентификацией ldap.
У меня была аналогичная проблема, в которой я смог клонировать и вытаскивать из репозитория с помощью протокола HTTP, но я не смог нажать. Я решил это, сделав следующее.
Я изменил url-адрес для пульта дистанционного управления в проекте .файл git / config соответствует url-адресу GitHub SSH. Затем я последовал всем инструкциям в"https://help.github.com/articles/generating-ssh-keys#platform-linux " и устранение неполадок с "https://help.github.com/articles/error-permission-denied-publickey". Лучше всего то, что я не имел дело с Apache или изменить какие-либо настройки HTTP на удаленном сервере.
У меня была такая же проблема в Windows, где мои учетные данные хранятся в диспетчере учетных данных windows. Я не хотел, чтобы каждый пользователь редактировал файл конфигурации, поэтому я изменил url-адрес сhttp://example.com to http://git@example.com и он работает, даже если мой id не git. Я не думаю, что пользователь" git " определен где-либо и предполагает, что любое имя будет работать. (Если вы не находитесь в частной сети, убедитесь, что вы используете https).
En пример записи authentified git dav virtualhost с gitweb enable, который может решить вашу проблему:
<VirtualHost *:443>
ServerAdmin admin@example.com
ServerName git.example.com
DocumentRoot /var/git
# SSL configuration
SSLEngine on
# Fix dav header
#RequestHeader edit Destination ^https: http: early
<Directory /var/git>
DAV on
Options ExecCgi FollowSymLinks
# Gitweb config
AddHandler cgi-script .cgi
DirectoryIndex .gitweb.cgi
SetEnv GITWEB_CONFIG /var/git/.gitweb.conf
# Basic auth config
AuthType Basic
# Auth title
AuthName "Git repositories"
# Use file and external providers
AuthBasicProvider file
# File location
AuthUserFile /var/git/.htpasswd
Require method GET OPTIONS PROPFIND
<LimitExcept GET OPTIONS PROPFIND>
Require valid-user
</LimitExcept>
</Directory>
</VirtualHost>
затем просто клонируйте свой репозиторий с вашим пользователем:
git clone https://user@git.example.com/repository
и когда вы попытаетесь нажать, он спросит ваш пароль и предоставит его.
размещение пароля в url-адресе клона является плохой практикой безопасности, поскольку любой может прочитать его в вашем .git / config.