通过代理服务器通过HTTPS使用git-svn时出现未知协议错误



我在尝试使用git-svn通过HTTPS访问Subversion存储库时遇到了一些问题。

当我键入git svn init --username=<my username> --trunk=https://<host>/<project>/trunk时,我得到以下错误消息:

RA layer request failed: PROPFIND request failed on '/<project>/trunk':
PROPFIND of '/<project>/trunk': SSL negotiation failed: SSL error: unknown
protocol (https://<host>) at C:Program Files (x86)Git/libexec/git-coregit-svn
line 2299

还有几点需要注意:

  1. 我在Windows 7 x64上使用msysgit 1.7.9.0。我还安装了Subversion 1.7.1命令行客户端和TortoiseSVN 1.7.1
  2. 我通过代理服务器进行连接,该代理服务器是我通过HTTP_proxy环境变量和git config http.proxy指定的
  3. 我能够在同一台机器上通过HTTPS克隆Github存储库,而不会出现问题
  4. 普通的Subversion客户端可以毫无问题地签出同一个项目。我也能够用Mercurial和hgsubversion成功地克隆它,尽管它确实无法识别服务器的SSL证书,所以我不得不在Mercurial.ini文件中明确指定它。因此,我使用git config http.sslVerify=false。然而,这并没有什么区别
  5. 使用svnsync(如本文所建议的)等单向解决方案不是一种选择

还有什么我没试过的吗?

为了对其他两个答案进行一点扩展(并解释为什么你看到了你所看到的),git svn(作为msysgit的一部分)是针对svn 1.4.6:构建的

C:> git svn --version
git-svn version 1.7.7.1.msysgit.0 (svn 1.4.6)

注意1.4.6是…嗯。。。老的(自2009年1.6发布以来,它甚至没有得到支持。)

msysgit的git-svn而不是使用您的subversion安装-因此(不幸的是)能够使用您安装的svn进行签出并不表示存在问题。

有一些关于msysgit升级到更新的subversion的错误报告,但这些报告似乎尚未实现。

你试过cygwin的git-svn吗?

您得到的消息(SSL23_GET_SERVER_HELLO:未知协议)很容易在谷歌上搜索。例如,这里或这里看起来你的https或dns服务器配置错误,与git无关。

提供了一个稍微不那么简洁的答案,kan是正确的。您看到这种情况的原因是您的上游存储库没有正确配置为SVN+HTTPS。这可能是由于服务器端的错误配置,也可能是由于所提供的SVN协议与客户端期望的协议不同。

勘误表为这个问题提供了正确的调试方案。如果您可以控制有问题的SVN存储库,请确保其HTTPS配置正常工作,以便将其用作上游存储库。如果您希望更改用于进一步排除连接故障的协议或URL(例如,尝试通过HTTP或SSH),以下是您需要的指南。

我终于发现了如何让它发挥作用。答案来自这条线索。

当您通过代理连接到Subversion服务器时,git svn不使用.gitconfig中的代理设置,也不使用您在TortoiseSVN中配置的设置。相反,它在%USERPROFILE%.subversionservers[global]部分中查找。

将我们的代理服务器设置添加到此文件允许我连接到外部Subversion服务器。

最新更新