今天如往常一样做事,期间发现一个问题,于是就打算将文件与 svn 上的文件进行对比,可谁成想 Eclipse 突然弹框报错,然后我到SVN资源库中直接刷新打开 svn 的地址,又弹框报错:文件夹不存在,第一反应是服务器的 svn 服务应该挂了,于是上线看了看,发现果然 svn 的服务挂了,于是重新启动,结果发现还是没有,觉得郁闷之余,也开始将近 2 个小时的百度之旅——
由于报错的其中一句「 SVN Unable to connect to a repository at URL 」在网上找到最多的解决方案大概就是下面这个了吧: 1、右键点击本地,TortoiseSVN → Settings → Saved Data 2、在完成上面步骤后出现的界面上,点击各个「 Clear 」按钮,把本地缓存清楚了,然后「 确定 」 3、最后就可以进行SVN的检出、更新、提交等一系列的操作了。 ( 这个方法是认为自己电脑上的问题,而且装好了 SVN 客户端的比较方便操作,其实无非就是清缓存。 )
是的,现在这个方法对于我遇到的这个是没有用的,于是我用我自己服务器上的 svn 进行了实验,发现并不是自己电脑的问题,而且报错的代码里面还有这么一句话「 No repository found in 」这让我想到,或许真的是服务器上的问题,于是我便根据这句话去进行查找,发现有这么一个回答「 svn 服务未启动;如果启动了的话,可能是在启动的时候没有指定 svn 仓库路径 」于是,我尝试了一下命令:
svnserve -d -r svn的仓库路径
如:
svnserve -d -r /usr/svn/svnData
结果出现了一个错误提示:
svnserve: Can't bind server socket: Address already in use
然后先执行了这个命令:
killall svnserve
这个命令是将 svn 相关的服务进程全部杀掉,也就是停止 SVN 服务,然后再执行之前的那个命令就可以了。 果然,这么做了之后,问题的确解决了。
PS( 以下都是 PS ): 最后的最后提一嘴,如果有多个 SVN 的仓库路径怎么办呢?
svnserve -d -r /mnt/svn/svnData2 --listen-port 3691
这个命令和之前的命令相似,就是多出来一个「 --listen-port 3691 」,为什么要这么做呢?为什么不能直接用那个命令呢?
原因很简单: 由于 svn 的端口默认是 3690 ,而且之前如果执行了一次启动命令的话,再执行又会出现那个错误提示,但是之前的 svn 要用的,没法 kill 掉,所以只有将现在这个要启动仓库的端口改一改,不让它与第一个仓库起冲突,所以多出来一个「 --listen-port 3691 」
最后总结一下: 这次的这个问题其实并不难,只是有时可能就是找了比较久,暂时还没有找到,就有点受打击了,有的问题可以冷静下来慢慢思考,不用一味地盯着百度上的答案,应该想想,排除一些不必要的问题,换一个方向去找问题,这样的话,也许会发现问题原来这么简单。哈哈^-^ 果然,解决问题之后的感觉挺好的~