Не удается отправить 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.

smart 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.