git-svn克隆:无法连接到仓库

6

环境信息

~$ git --version
git version 2.11.0
~$ git svn --version
git-svn version 2.11.0 (svn 1.9.5)
~$ svn --version
svn, version 1.9.5 (r1770682)

我试图克隆一个内部托管的SVN仓库,但是遇到了以下错误:

~$ git svn clone http://[server]/svn/dev1
Initialized empty Git repository in [~]/test/[root]/.git/
Can't create session: Unable to connect to a repository at URL \
  'http://[server]/svn/[root]' at /usr/share/perl5/Git/SVN.pm line 148.

SVN checkout正常工作。我尝试使用svn://协议,但是它不认识[server]作为已知的主机名。
如果我将clone分成init和fetch,则失败的是fetch步骤。
我应该补充说明,像SmartGit这样的解决方案对我来说不是一个选择;我在一家拥有1000多名开发人员的公司工作,支持一个开发人员的成本将是天文数字。
SVN.pm:148读取my $ra = Git::SVN::Ra->new($url);——从我的其他研究中(我找不到帖子了),我相信这是一个围绕SVN函数的包装器。这是Ra->new的定义:
sub new {
        my ($class, $url) = @_;
        $url = canonicalize_url($url);
        return $RA if ($RA && $RA->url eq $url);

        ::_req_svn();

        $RA = undef;
        my ($config, $baton, $callbacks) = prepare_config_once();
        my $self = SVN::Ra->new(url => $url, auth => $baton,
                              config => $config,
                              pool => SVN::Pool->new,
                              auth_provider_callbacks => $callbacks);
        $RA = bless $self, $class;

        # Make sure its canonicalized
        $self->url($url);
        $self->{svn_path} = $url;
        $self->{repos_root} = $self->get_repos_root;
        $self->{svn_path} =~ s#^\Q$self->{repos_root}\E(/|$)##;
        $self->{cache} = { check_path => { r => 0, data => {} },
                           get_dir => { r => 0, data => {} } };

        return $RA;
}

我不懂Perl,所以这是我能做到的最好程度 - 我找不到所提到的SVN::Ra->new


你尝试过几种不同的URL吗?也许它不需要/dev1这一部分。 - Adam
1
@Adam 谢谢你的建议!我尝试了几种不同的 URL 变化,但对我来说解决方法更傻瓜 :-) 请查看答案。 - Sean Allred
3个回答

2

事实证明,这个“机器”(WSL下的Debian)根本无法访问[server](即使Windows可以)。 给出的错误消息可能不是很具体,但仍然准确:git-svn无法在给定的URL上访问存储库,因为它根本无法访问该URL!

对我来说,将其完全限定为[server].[company].com起作用了。 而不是

Translated content:

原始回答发现,这个“机器”(WSL下的Debian)无法访问[server](尽管Windows可以)。 错误信息可能不太详细,但仍然准确:git-svn无法访问给定URL处的存储库,因为根本无法访问该URL!

对我来说,将其完全限定为[server].[company].com解决了问题。

git svn clone http://[server]/svn/dev1

I used

git svn clone http://[server].[company].com/svn/dev1

当调用git svn rebase时,可能会出现与克隆之前(例如,因为使用了旧版本的git-svn)相同的问题,但错误消息略有不同:Can't create session: Unable to connect to a repository at URL 'https://<url>': Error running context: An error occurred during SSL communication at /usr/share/perl5/Git/SVN.pm line 717。在Debian Buster的git-svn中似乎存在一个错误,而在Stretch中则没有:/ - stefanct
2
这不是一个错误,而是一个特性:出于明显的原因,Debian Buster不再支持TLS <= 1.1。当服务器不支持至少TLS 1.2时,您将遇到与上述相同的问题(无论您是使用git-svn还是svn直接)。一个可能的解决方法是在/etc/ssl/openssl.cnf中降低要求(MinProtocol = TLSv1.0),但正确的修复方法当然是更新服务器。 - stefanct

0

将http前缀更改为svn并使用IP地址是我的解决方案。而不是:

git svn clone http://[server]/svn/dev1

我使用了:

git svn clone svn://[ip adress]/svn/dev1

0
当涉及到https://your.svn.server/repo和错误指示类似于 SSL communication at /usr/share/perl5/Git/SVN.pm line #number#时,您应该按照以下方式配置/etc/ssl/openssl.cnf
在文件的开头,不在任何块之内: openssl_conf = default_conf 在文件的末尾或任何位置:
    [default_conf] 
ssl_conf = ssl_sect
    [ssl_sect] 
system_default = system_default_sect
    [system_default_sect]
    #MinProtocol = TLSv1.2 
CipherString = DEFAULT@SECLEVEL=1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接