サーバー上のApacheが提供するディレクトリにGitリポジトリがあります。 WebDAVを設定しましたが、正しく実行されているようです。 Litmusは100%の成功を返します。
リモートホストからリポジトリを複製できますが、httpまたはhttpsを介してプッシュしようとすると、次のエラーが表示されます。
エラー:URLにアクセスできません https://git.example.com/repo/ 、リターンコード22致命的:git-http-Pushが失敗しました
何か案が?
可能であれば、WebDAVを使用しないことを強くお勧めします。 HTTP/HTTPSを使用する必要がある場合は、WebDAVよりも git-http-backend CGIスクリプトを使用することをお勧めします。
.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の構成ファイルで認証の詳細を編集し、必要なブランチにプッシュします。
このように コメント投稿 、あなたの/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コマンドを処理できます。
よりスマートなプロトコル(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サーバー応答に関する追加情報は、デバッグの目的に役立ちます。
私は同じ問題を抱えており、解決策を見つけました。おそらく誰かに役立つでしょう。
ここ は、git-http-backend構成とldap認証を使用した私のソリューションです。
ユーザーをリポジトリのメンバーとして追加し、必要に応じて権限を更新する必要がある場合があります。
組織のgithubリポジトリに貢献する各メンバーでこれを行う必要がありました。
資格情報がWindows資格情報マネージャーに保存されるWindowsでも同じ問題が発生しました。すべてのユーザーが構成ファイルを編集する必要がないように、URLを http://example.com から http://[email protected] に変更しましたそして、私のIDがgitでなくても機能します。ユーザー「git」はどこでも定義されているとは思わず、任意の名前が機能すると想定しています。 (プライベートネットワークに接続していない場合は、httpsを使用してください)。
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設定を変更したりしなかったことです。
あなたの問題を解決できる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で読み取ることができるため、セキュリティの悪い習慣です。