idea使用svn提交代码失败,但是代码明明是我刚刚下载下来的

IDEA踩坑记一

问题描述

使用SVN提交代码失败,报错E230001: Server SSL certificate verification failed: certificate issued。但这项目明明是我刚刚checkout下来的啊?都下载成功了,提交却失败?

前言

我用了四年多eclipse,虽然eclipse一大堆BUG,但它早已不能影响我的开发工作了,而且因为大量用户及多年时间沉淀,早已有大量机智的程序员发现了BUG并解决。换成IDEA之后,各种不适,各种坑。事实证明,程序员的世界不可能没有坑的。都说IDEA多厉害多厉害的,一个小小SVN问题,网上回答竟然惊人的一致,是这个问题太简单了?
咱们看看网上的回答:
idea使用svn提交代码失败,但是代码明明是我刚刚下载下来的
我…这什么鬼!这个 ls 不是查看目录内容的命令吗?我执行之后也是展示项目内所有目录文件啊?有个卵用!
连问题原因都没说个所以然来,
还一堆回答者复制粘贴转发,既然网上的答案都是样的,还不能用,只能自己想办法了。

正确解答

咱们先把这句报错翻译一下:
idea使用svn提交代码失败,但是代码明明是我刚刚下载下来的
翻译意思:证书验证失败,但是这个证书是已经存在的。

而且事实也是这样的:
1.证书肯定是存在的,因为项目都是我刚刚checkout下来的,如果没有证书,我怎么能checkout成功; 2.证书验证失败,我都无法提交了,既然证书已经存在,只能是验证失败了才导致的提交失败。
那么问题来了,证书已经存在却验证失败,为啥?

因为安全问题
就好比你手上拿着你家大门的钥匙,你刚出门,结果想起钱包没带,回头开门,发现门打不开,你刚刚才拿着钥匙从里面出来,现在钥匙还在手上却进不去,这是为啥?只有一个可能,你老婆在里面给你打上小锁了。-.- 别问我为什么打这样的比方。
回到正题,SVN有个网络配置,默认配置的HTTPS,如下图示
idea使用svn提交代码失败,但是代码明明是我刚刚下载下来的
这里默认是勾上的,意思是开启了https.
所以一般我们用eclipse下载代码时都是https://192.168.8.1:443/sdoa这样的。
去掉勾选后就是http://192.168.8.1:443/sdoa这样的。

https和http有什么不同?
你可以简单的把他当成两种网络协议,http是旧版的,https是后来在http基础之上增加的。他们的作用你也可以简单的理解为https是安全的,http是不那么安全的。
所以解决原理就是:
你把SVN连接设置成http协议之后,项目在SVN上的地址就变成了http开头的了,避免掉了所谓的安全。证书就可用了。

解决步骤
知道了原因和原理,解决起来就很简单了。只需要两步就解决了
1.在SVN服务器上,打开SVN管理器,在network设置【网络设置的意思】中去掉https勾选后。
2.然后把你现在的项目代码包删了,重启IDEA,重新checkout,填上新的SVN项目地址(这个地址是http开头的),会提示你输入SVN账号密码,下面有个勾选框记得勾选,这是保留凭证,以后不用再填账号密码。如下图所示:
idea使用svn提交代码失败,但是代码明明是我刚刚下载下来的
接下来随便修改个文件,commit测试下,提示成功,完美解决.
idea使用svn提交代码失败,但是代码明明是我刚刚下载下来的
遗留问题
改成http之后会不会不安全,因为他不是安全连接?
1.所谓的安全不安全不过是相对而论,https只是相对来说比http安全一点而已,谁又能保证真正的安全。
2.而且既然都用SVN了,那正常来讲你代码应该都是放在内网服务器了,网络连接安全与你何干。如果你是放在外网的项目,为何不托管到git呢?
3.话说回来了,你又不是淘宝或者银行项目,安全不安全跟你有何关系?

问题总结
事出反常必有妖,当所有人都说对的时候,也不要轻易怀疑自己,实践才是证明真理的唯一标准。自己试过不对的东西,即使全世界的人说他对,他也是个错。