web-dev-qa-db-ja.com

http / httpsを使用してGitをリモートリポジトリにプッシュできない

サーバー上のApacheが提供するディレクトリにGitリポジトリがあります。 WebDAVを設定しましたが、正しく実行されているようです。 Litmusは100%の成功を返します。

リモートホストからリポジトリを複製できますが、httpまたはhttpsを介してプッシュしようとすると、次のエラーが表示されます。

エラー:URLにアクセスできません https://git.example.com/repo/ 、リターンコード22致命的:git-http-Pushが失敗しました

何か案が?

21
Clément

可能であれば、WebDAVを使用しないことを強くお勧めします。 HTTP/HTTPSを使用する必要がある場合は、WebDAVよりも git-http-backend CGIスクリプトを使用することをお勧めします。

11
Arrowmaster

.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:[email protected]/repo.git

その後、git Push Origin master

必要に応じて、他のリポジトリURLの構成ファイルで認証の詳細を編集し、必要なブランチにプッシュします。

35
Deepak

このように コメント投稿 、あなたの/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 .

そして、プロセスを繰り返すことで、プッシュできるようになりました!! =)


Eddieのコメントと Arrowmaster の(upvoted) answer で述べたように、 smart http protocol は最近のGitディストリビューションの一部になりました。
git-http-backend CGIスクリプトは、httpを介してgitコマンドを処理できます。

smart http

よりスマートなプロトコル(gitおよびssh)は、代わりにサーバー上のgit upload-packプロセスと対話し、クライアントが必要とするオブジェクトの正確なセットを決定し、それらのオブジェクトだけでカスタムパックファイルを構築し、それをストリーミングします。


Git 2.17(2018年第2四半期)にはデバッグ支援機能が追加されます。

commit a2b982 (2018年1月24日)by Patryk Obara(dreamer を参照してください。
浜野潤二-gitster- in commit 39a1dd8 、2018年2月13日)

http-Push:エラーログを改善

いつ git Pushは、サーバー側のWebDAVエラーが原因で失敗します。主犯人を指すのは簡単ではありません。
正確なcURLエラーおよびHTTPサーバー応答に関する追加情報は、デバッグの目的に役立ちます。

3
VonC

私は同じ問題を抱えており、解決策を見つけました。おそらく誰かに役立つでしょう。
ここ は、git-http-backend構成とldap認証を使用した私のソリューションです。

2
gaspar

ユーザーをリポジトリのメンバーとして追加し、必要に応じて権限を更新する必要がある場合があります。

組織のgithubリポジトリに貢献する各メンバーでこれを行う必要がありました。

2
JrBriones

資格情報がWindows資格情報マネージャーに保存されるWindowsでも同じ問題が発生しました。すべてのユーザーが構成ファイルを編集する必要がないように、URLを http://example.com から http://[email protected] に変更しましたそして、私のIDがgitでなくても機能します。ユーザー「git」はどこでも定義されているとは思わず、任意の名前が機能すると想定しています。 (プライベートネットワークに接続していない場合は、httpsを使用してください)。

1
Robert Murphy

HTTPプロトコルを使用してリポジトリからクローンを作成してプルすることができたが、プッシュすることができなかった同様の問題がありました。これを次のようにして解決しました。

プロジェクトの.git/configファイルのリモートのURLをGitHub SSHのURLに一致するように変更しました。次に、「 https://help.github.com/articles/generated-ssh-keys#platform-linux 」のすべての指示に従い、「 https:// help.github.com/articles/error-permission-denied-publickey "。最良の部分は、Apacheに対処したり、リモートサーバーのHTTP設定を変更したりしなかったことです。

1
FearlessFuture

あなたの問題を解決できるgitweb enableで認証されたgit dav virtualhostを書く例:

<VirtualHost *:443>
        ServerAdmin [email protected]
        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://[email protected]/repository

そして、プッシュしようとすると、パスワードが要求され、入力されます。

クローンURLにパスワードを配置することは、誰でも.git/configで読み取ることができるため、セキュリティの悪い習慣です。

0
Raphaël Gertz