在企业项目开发中,svn是很常用的代码版本管理工具,我习惯了使用Xcode配合命令行进行svn管理。最近公司SVN 认证添加 Windows AD 域认证 导致 Xcode无法连接到SVN当中
问题描述:
通过命令行访问svn的时候,比如执行svn update命令时,报错:svn: Cannot negotiate authentication mechanism(无法协商认证机制)。
原因定位:
针对上述问题,开始想解决办法。
是由于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://mirror.esocc.com/apache/subversion/subversion-1.8.9.tar.gz
找到了自己系统支持的版本,由于是dmg文件,安装很方便,程序会安装到/opt/subversion目录下面。接下来还需要做些配置设置:
1、替换系统原来的svn
- wget http://mirror.esocc.com/apache/subversion/subversion-1.8.9.tar.gz
- tar zxvf subversion-1.8.9.tar.gz
- cd subversion-1.8.9
- ./configure
- make
- make install
默认安装到 /usr/local/bin/ 下
2、替换系统原来的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 cp -rfp /usr/local/bin/svn* /usr/bin/
2、替换Xcode中的svn
于系统和Xcode中使用的是两个不同的svn,要想在Xcode中使用svn还要单独配置。
不同版本的Xcode的svn目录可能稍有不同,我的4.5.2版本svn路径是:
- cd /Applications/Xcode.app/Contents/Developer/usr/bin/
进到该目录后,执行以下命令,查看跟svn想管的文件:
- $ ls svn*
- svn svnadmin svndumpfilter svnlook svnrdump svnserve svnsync svnversion
①删除原来的svn文件,执行下面的命令:
- sudo rm -rf /Applications/Xcode.app/Contents/Developer/usr/bin/svn*
②复制文件:
- sudo cp -rfp /usr/local/bin/svn* /Applications/Xcode.app/Contents/Developer/usr/bin/
3、升级旧版本svn更新下来的代码
如果你使用1.6版本的SVN客户端检出了代码,使用1.7版本的客户端的时候,可能会出一些版本不兼容的问题,解决办法是切入到代码工程所在根目录,执行以下命令进行转换
- $ svn upgrade
转载请注明:爱开源 » 解决svn: Cannot negotiate authentication mechanism错误问题