Невозможно отправить Git в удаленный репозиторий с http / https - PullRequest
21 голосов
/ 10 марта 2011

У меня есть Git-репозиторий в каталоге, обслуживаемом apache на сервере. Я настроил WebDAV, и он, кажется, работает правильно. Лакмус возвращает 100% успеха.

Я могу клонировать свой репозиторий с удаленного хоста, но при попытке протолкнуть http или https я получаю следующую ошибку:

ошибка: невозможно получить доступ к URL https://git.example.com/repo/, код возврата 22 неустраним: ошибка git-http-push

Есть идеи?

Ответы [ 8 ]

35 голосов
/ 12 марта 2013

Отредактируйте следующий раздел вашего файла .git / config:

[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = http://git.repository.url/repo.git

до

[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = http://username:password@git.repository.url/repo.git

Затем попробуйте git push origin master.

Отредактируйте данные аутентификациив конфигурационных файлах для других URL-адресов хранилища по мере необходимости и нажмите на нужную ветку.

11 голосов
/ 10 марта 2011

Настоятельно рекомендуется НЕ использовать WebDAV, если это возможно.Если вы должны использовать HTTP / HTTPS, то рекомендуется использовать сценарий git-http-backend CGI поверх WebDAV.

3 голосов
/ 10 марта 2011

Как и в этом пост-комментарии , что ваш /Web/git/Logs/ErrorLog говорит об этой ошибке?

После просмотра /Web/git/Logs/ErrorLog я обнаружил, что существует проблема с правами нафайл блокировки.В моем httpd-dav.conf у меня есть строка ...

DavLockDB “/usr/var/DavLock”

Затем я проверил каталог /usr/, каталог 'var' отсутствовал.

$ mkdir var
$ cd var
$ chown www .
$ chgrp www .

А потом повторение процесса кажется, что теперь я могу нажать !!=)


Как упомянуто Эдди в комментариях и Arrowmaster в его (с голосованием) ответ , умный протокол HTTP теперь является частью недавнего дистрибутива Git.
CGI-скрипт git-http-backend может позаботиться о любых командах git через http.

smart http

Более умные протоколы (git и ssh) вместо этого будут взаимодействовать с процессом git upload-pack на сервере, который определит точный набор объектов, которые нужны клиенту, и создаст пользовательский пакетный файл только с этими объектами и выполнит его потоковую передачу.over.


Git 2.17 (Q2 2018) добавит помощь в отладке.

См. commit a2b9820 (24 января 2018) по Патрик Обара (dreamer) .
(Объединено с Junio ​​C Hamano - gitster - в коммит 39a1dd8 , 13 февраля 2018 г.)

http-push: улучшить журнал ошибок

Когда git push не удается из-за ошибки WebDAV на стороне сервера, указывать нелегкоt к основному виновнику.
Дополнительная информация о точной ошибке cURL и ответе HTTP-сервера полезна для целей отладки.

2 голосов
/ 12 декабря 2014

У меня та же проблема, и я нашел решения, может быть, это кому-нибудь пригодится.
Здесь - мое решение с конфигурацией git-http-backend и аутентификацией ldap.

2 голосов
/ 27 ноября 2013

вам может понадобиться добавить пользователя в качестве члена для хранилища и, возможно, обновить разрешения.

мы должны были сделать это с каждым участником, который будет вносить свой вклад в репозиторий github наших организаций.

1 голос
/ 13 июня 2018

У меня была такая же проблема в Windows, где мои учетные данные хранятся в диспетчере учетных данных Windows. Я не хотел, чтобы каждый пользователь редактировал файл конфигурации, поэтому я изменил URL с http://example.com на http://git@example.com, и он работает, даже если мой идентификатор не git. Я не думаю, что пользователь "git" определен где-либо и предполагаю, что любое имя будет работать. (Если вы не в частной сети, убедитесь, что вы используете https).

1 голос
/ 17 июля 2013

У меня была похожая проблема, в которой я был в состоянии клонировать и извлечь из хранилища, используя протокол 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 на удаленном сервере.

0 голосов
/ 24 сентября 2018

В примере записи аутентифицированного виртуального хоста git dav с включенным gitweb, который может решить вашу проблему:

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

...