解决svn: Cannot negotiate authentication mechanism错误问题
前言:
在企业项目开发中,svn是很常用的代码版本管理工具,我习惯了使用Xcode配合命令行进行svn管理。最近换了公司,郁闷的是新公司只能使用第三方svn管理工具,比如cornerstone来管理svn。
问题描述:
在Xcode上配置svn响应源的时候直接报错:Host is unreachable;
通过命令行访问svn的时候,比如执行svn update命令时,报错:svn: Cannot negotiate authentication mechanism(无法协商认证机制)。
原因定位:
针对上述问题,开始想解决办法。
1、由于公司的svn使用的是VPN网络,首先怀疑是VPN捣的鬼,因此开始着手配置VPN网络,倒腾了半天,问题未解决,此路不通。
2、求助李鹏同学,他在一个论坛里找到了问题原因:是由于svn服务器开启了sasl加密,本地的Xcode和命令行中的svn不支持sasl加密导致无法协商认证机制问题。至此开始朝为电脑安装sasl的方向努力。很兴奋的到网上下了一个sasl安装包,安装以后并未起作用,很是纳闷。后来偶尔在一篇博客中看到,较高版本的svn已经支持sasl加解密了,于是开始着手升级svn版本。目前我用的MAC OS10.8系统支持的svn最新版本是:1.7.11,而10.8系统和我的Xcode4.5.2自带的的svn版本是1.6.18,开始寻找升级方案。
问题解决:
从网上找了svn安装包的下载地址:http://www.wandisco.com/subversion/download#osx
找到了自己系统支持的版本,由于是dmg文件,安装很方便,程序会安装到/opt/subversion目录下面。接下来还需要做些配置设置:
1、替换系统原来的svn
系统的svn安装目录是:
/usr/bin/svn
可以通过以下方式查看:
$ ls /usr/bin/svn* /usr/bin/svn /usr/bin/svndumpfilter /usr/bin/svnrdump /usr/bin/svnsync /usr/bin/svnadmin /usr/bin/svnlook /usr/bin/svnserve /usr/bin/svnversion
①先把这些文件删除,不放心的话可以先备份一下,执行以下删除命令:
sudo rm -rf /usr/bin/svn*
②建立svn安装目录到系统安装目录的链接,执行以下命令:
sudo ln -s /opt/subversion/bin/svn* /usr/bin/
③验证是否升级成功
执行命令:
svn --version
验证是否安装了新的svn版本。
2、替换Xcode中的svn
由于系统和Xcode中使用的是两个不同的svn,要想在Xcode中使用svn还要单独配置。
不同版本的Xcode的svn目录可能稍有不同,我的4.5.2版本svn路径是:
/Applications/Xcode.app/Contents/Developer/usr/bin/
进到该目录后,执行以下命令,查看跟svn想管的文件:
$ ls svn* svn svnadmin svndumpfilter svnlook svnrdump svnserve svnsync svnversion
①删除原来的svn文件,执行下面的命令:
sudo rm -rf svn*
②创建文件连接:
sudo ln -s /opt/subversion/bin/svn* .
3、升级旧版本svn更新下来的代码
如果你使用1.6版本的SVN客户端检出了代码,使用1.7版本的客户端的时候,可能会出一些版本不兼容的问题,解决办法是切入到代码工程所在根目录,执行以下命令进行转换
$ svn upgrade
至此,问题解决!