SVN下载、安装、配置及使用方法

2023-10-29

SVN是什么

  • SVN 是 Subversion 的简称,是一个开源的版本控制系统,CVS的接班人,目前绝大多数公司都是用 SVN 作为版本控制软件

相关概念

  • SCM: 全称是 Software Configuration Management,即软件配置管理,意思就是对软件的源代码进行控制与管理

为什么需要SVN

  • SVN 可以用于协作开发、远程开发和版本回退

SVN的特点

  • 操作简单,入门容易,支持跨平台(Windows、Linux、MacOS)

  • 支持版本回退功能(时间机器)

  • 属于 C/S 结构的软件,因此使用 SVN 需要分别安装客户端和服务端

TortoiseSVN VisualSVN Subversion 以及 VisualSVN Server的区别

  • 客户端软件: TortoiseSVN 和 VisualSVN

  • 服务端软件: Subversion 和 VisualSVN Server

  • 从根本上说,TortoiseSVN(内核使用的是 Subversion) 和 VisualSVN 都是 Subversion 的衍生物,是
    为 Subversion 服务的。

  • TortoiseSVN 可以很方便地向服务器提交代码、从服务器下载代码以及查看自己以前提交的代码

  • VisualSVN 是 SVN 的客户端,和 Visual Studio 集成在一起,VisualSVN 是收费的

  • Subversion 是 SVN 的源码库,是一个集成了客户端和服务端的“内核”,相关配置需要手动进行

  • VisualSVN Server 的内核使用的也是 Subversion,它包括 apache、Subversion 和 WMI(用于实现操作界面等),而且其中的很多配置都已经配置好了,比较容易上手,VisualSVN Server 标准版是免费的,企业版是收费的,在安装时可自行选择

为什么不直接使用Subversion

  • 因为 Subversion 比较偏向于底层,我们需要用到的很多东西都没有集成,对于新手来说,使用难度很大

SVN下载

  • 客户端软件下载请点击这里

  • 服务端软件下载请点击这里

SVN服务端安装

说明: 由于软件版本的不一致,安装界面上可能会有些许区别,这里使用的是 VisualSVN-Server-3.8.1-x64

  1. 双击安装文件,点击 Next

    SVN服务端安装步骤01

  2. 勾选协议,点击 Next

    SVN服务端安装步骤02

  3. 使用默认选项,点击 Next

    SVN服务端安装步骤03

  4. 单击 Standard Edition

    SVN服务端安装步骤04

  5. 选择软件安装位置、仓库位置、端口号以及备份文件位置

    SVN服务端安装步骤05

  6. 单击 Install

    SVN服务端安装步骤06

  7. 安装完成,点击 Finish

    如果电脑安装了360或者类似的安全软件,那么在软件安装过程中可能会拦截一些东西,这时只要都选择允许即可

    SVN服务端安装步骤07

SVN服务端配置

  1. 创建一个项目(以 Shop 为例
  • 首先在 SVN 服务器端的安装根目录下创建一个公有目录 WebApp 作为项目目录

  • 在 WebApp 目录下创建 Shop 文件夹,作为 Shop 的版本仓库

    注意:

    1. 在 SVN 中没有项目的概念,所有的文件夹都称之为版本仓库,一个项目就是一个仓库

    2. 现在的 Shop 文件夹还仅仅只能称之为一个普通文件夹,还不能称之为版本仓库,因为它还没有和 SVN 服务器产生任何联系,下面要做的就是将这个普通的文件夹转换为版本仓库

  • 创建版本仓库,基本语法如下:

    1. 打开 cmd,输入如下命令(这里的路径名和最后的项目名应和自己电脑上的一致,下同)

      svnadmin create D:\VisualSVN-Server-3.8.1-x64\WebApp\Shop
      
    2. 回车,如果 Shop 文件夹下出现了如下目录,则说明创建版本仓库成功,如果报错,则可以尝试重启电脑,以使指令生效
      在这里插入图片描述

  1. 启动服务端监管
  • 什么是服务端监管
  1. 对于Apache来说,我们通过在浏览器中输入 http://localhost(或ip地址) 来访问相关的文件,这个过程就叫做服务端监管

  2. 对于 SVN 来说,我们通过在浏览器中输入 svn://localhost(或ip地址) 来访问相关的数据仓库(如Shop仓库),这个过程就叫做服务端监管

  • 如何启动服务端监管

    1. 打开 cmd,输入如下命令:

      svnserve -d -r D:\VisualSVN-Server-3.8.1-x64\WebApp\Shop
      

      说明:

      • -d 表示后台运行
      • -r 表示监管目录
    2. 回车,可以看到光标一直在闪烁,说明指令执行成功

      特别注意:不要关闭当前的 cmd 窗口,如果关闭了,那么监管指令就强行终止了,也就没办法进行数据的连接了

      通过以上指令,我们的 svn://localhost(或ip地址) 就可以直接指向 Shop 版本仓库,也就是说,当我们在浏览器中输入 svn://localhost(或ip地址) 的时候,就可以访问到 Shop 仓库下的相关数据,也即实现了监管

  1. 权限控制:

    • 默认情况下,SVN服务器是不允许匿名用户上传文件到服务端的,所以必须更改项目的相关配置文件

    • 如何更改相关权限

      1. 打开 Shop 文件夹中的 conf 文件夹,可以看到如下文件

        conf文件夹

      2. 用记事本打开 svnserve.conf 文件,找到 # anon-access = read ,将其更改为 anon-access = write ,然后保存,即将用户的权限由只可读改为可读可写

SVN客户端安装

说明: 由于软件版本的不一致,安装界面上可能会有些许区别,这里使用的是 TortoiseSVN-1.9.7.27907-x64-svn-1.9.7

  1. 双击安装文件,点击 Next

    SVN客户端安装步骤01

  2. 点击 Next

    SVN客户端安装步骤02

  3. 选择软件安装位置,然后点击 Next

    SVN客户端安装步骤03

  4. 点击 Install,直至软件安装完成,最后点击 Finish

如何验证SVN客户端是否安装成功

  • 在桌面点击鼠标右键,如果结果如下图所示,则表示安装成功
    在这里插入图片描述

SVN客户端汉化包的下载、安装

  1. 下载
  • 点击这里

  • 在打开的页面中往下拉,找到下图所在位置,并下载对应的汉化包(速度可能会比较慢,耐心等待一会)
    在这里插入图片描述

  1. 安装

    • 双击运行汉化包,点击 Next,等待安装完成,最后点击 Finish即可

    • 安装完成后,在桌面点击鼠标右键,选择 TortoiseSVN --> Settings --> General,然后在右边的 Language 一栏选择简体中文,最后点击确定,再次打开设置界面时,就会发现是中文的了

    • 如果想切换回英文,只需在上一步中将 Language 改为 English 即可

使用SVN客户端连接SVN服务器

  1. 相关说明

    • 首先,我们设想这样一个使用场景:公司在开发项目时,需要把项目部署在 SVN 服务器上,假设这台 SVN 服务器的 IP 地址为 192.168.1.1

    • 以之前的 Shop 为例,当要开发这个项目时,项目经理会把项目相关的配置和初始化工作做好

    • 项目相关的配置也即上面所提到的 SVN 服务端的配置这部分工作

    • 项目的初始化涉及到的有:编写核心框架、编写核心函数库等,项目经理在自己的电脑上完成这些文件的编写后,就会使用 commit 指令将这些文件上传到 SVN 服务器的 Shop 项目中(在使用 commit 命令之前,需要先使用 checkout 指令与服务器建立连接,下面会详细说明)

  2. 项目经理的 checkout(检出)过程

    • 重要说明:

      1. 当项目经理在 SVN 服务器上完成了项目的配置之后,接下来要做的就是在自己的电脑上通过 SVN 客户端与 SVN 服务器建立连接

      2. 无论是项目经理还是程序员,如果想建立与 SVN 服务器的连接并更新数据到本地,第一次的操作都是 checkout

      3. 当项目经理使用 checkout 指令与服务器建立连接后,会从服务器下载一个名为 .svn 的隐藏文件夹到本地,这个文件夹是否出现也是检出成功与否的标志

      4. 在第一次之后,如果还需要下载服务器端的数据到本地,则使用的是 update 指令,而不再是 checkout 指令

      5. 我们把第一次与 SVN 服务器进行连接操作并更新 Shop 项目中的相关数据到本地的过程称之为检出

  • 项目经理 checkout 的步骤:

    1. 首先要启动服务端监管,方法在上面已经介绍过

    2. 假设自己现在是项目经理,在自己电脑中选择一个位置新建一个文件夹,在这里我选择的是 E:\Shop ,然后在 Shop 文件夹下新建一个名为 jingli 的文件夹

    3. 进入 jingli 这个文件夹,在空白处点击鼠标右键,选择 TortoiseSVN --> 版本库浏览器(汉化之后的名称,下同)
      在这里插入图片描述

    4. 在弹出的窗口中输入如下图所示 URL,这里因为是在本机测试,所以写的是 localhost,如果不是在本机,就写 SVN 服务器的 IP 地址,比如上面提到的 192.168.1.1
      在这里插入图片描述

    5. 点击确定之后,会弹出如下界面,选中左边栏的条目,用鼠标右键单击,然后在弹出的菜单中单击检出
      在这里插入图片描述

    6. 在接着弹出的如下两个窗口中都点击确定即可,这时在 jingli 这个文件夹下就会生成一个名为 .svn 的隐藏文件夹,将其显示出来即可看到,这也是我们与 SVN 服务器成功建立连接的标志。至此,项目经理的 checkout 的过程已全部完成
      在这里插入图片描述
      在这里插入图片描述

SVN三大指令

  1. 检出(checkout)

    • 前提:必须先启动服务端监管

    • 作用:链接到 SVN 服务器、更新服务端数据到本地

    • 注意:checkout 只在第一次链接时使用一次,以后如果进行更新操作请使用 update 指令,这点在前面已经提到过,这里再强调一次

  2. 提交(commit)

    • 前提:必须先启动服务端监管

    • 作用:提交本地数据到服务器

    • 如何使用 commit 指令

      1. 以项目经理为例,假设项目经理在自己的电脑上(也就是在上面提到的 jingli 这个文件夹下)编写好了项目的需求文档等文件,现在需要把这些文件上传到 SVN 服务器,那么只需在进入 jingli 这个文件夹后,在空白位置单击鼠标右键,然后单击 SVN提交 即可,如下图所示:

        这里写图片描述

      2. 点击 SVN提交 之后,会出现如下窗口,勾选需要上传的文件和目录/文件夹,然后点击确定,若出现下图2所示界面,则代表提交成功

        特别注意:备注信息必须填写

        这里写图片描述
        在这里插入图片描述

  3. 更新(update)

    • 前提:必须先启动服务端监管

    • 作用:将服务器上的数据下载到本地

    • 使用方法:进入项目文件所在文件夹,在空白处点击鼠标右键,然后点击 SVN更新 ,如果出现如下窗口,则表明更新成功

      这里写图片描述

SVN常用图标解释

  • 如何查看所有图标

    在任一空白处点击鼠标右键 ——> TortoiseSVN ——> 设置 ——> 图标覆盖 ——> 图标集,即可查看所有图标

  • 图标含义解释

    1. 常规图标

      这里写图片描述 含义:当客户端文件与服务端文件完全同步时,系统显示这个图标

    2. 冲突图标

      这里写图片描述 含义:当客户端提交的文件与服务端已存在的文件有冲突时,系统显示这个图标

    3. 删除图标

      这里写图片描述 含义:当服务端数据已删除,那么在客户端的该文件就会显示这个图标

    4. 增加图标

      这里写图片描述 含义:当我们编写的文件已添加到提交队列,但还没有提交成功时,系统就会显示这个图标

    5. 无版本控制图标

      这里写图片描述 含义:当我们编写的文件没有添加到上传队列时,系统就会显示这个图标

    6. 修改图标

      这里写图片描述 含义:当客户端文件有修改但还未提交时,系统就会显示这个图标

    7. 只读图标

      这里写图片描述 含义:当客户端文件以只读形式存在时,系统就会显示这个图标

    8. 锁定图标

      这里写图片描述 含义:当服务端数据已锁定,那么客户端文件就会显示这个图标

    9. 忽略图标

      这里写图片描述 含义:当客户端文件已忽略,不需要进行提交时,就会显示这个图标

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SVN下载、安装、配置及使用方法 的相关文章

  • IntelliJ Subversion 需要身份验证对话框

    我正在尝试从颠覆存储库中签出一个项目 我已输入我的信息 例如网址 用户名和密码 我可以看到我的存储库中的文件夹列表 我选择我的项目并选择要签出到的目录 一切似乎都很顺利 我在 结帐选项 中单击 确定 进行结帐 选择 1 7 格式 这就是我正
  • SVN:您可以仅从本地签出(而不是从存储库)中删除目录吗?

    假设您有一个受 subversion 控制的目录 其中包含一些文件和大量子目录 如下所示 file1 txt file2 txt file3 txt dir1 dir2 dir3 dir4 dirXX 现在您需要文件和一些目录 但不是全部
  • Subversion 中的版本和项目的良好存储库布局是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们有标准的 Subversion 主干 分支 标签布局 我们有几个针对中长期项目的分支 但到目前为止还没有一个发布版本 这正在快速逼近 我们应
  • 对于独立开发人员来说,通过 file:// 访问 Subversion 存储库有什么缺点吗?

    如果您的开发计算机上安装了 Subversion 并且您不在团队中工作 那么您是否有任何理由应该使用 Subversionsvn协议而不是file 如果您自己在一台机器上工作 那么根据我的经验 使用 file 协议效果很好 即使我的团队在远
  • Tortoise 无法连接到 subversion 服务器

    我正在尝试在我的家庭服务器上设置 Subversion 存储库 经过一些更改后 我在 Windows Server 2003 服务器上卸载并重新安装了 VisualSVN Server 并且存储库的地址 即 URL 是https serve
  • OSX 通过 macports 安装 subversion 时出错

    我正在尝试安装 subversion 1 7 2 从默认的 Lion 版本 1 6 升级 跑步sudo port install subversion安装成功完成 但是在运行 svn version 时收到此错误 svn version d
  • 使用 reposurgeon 将 svn repo 转换为 git

    我正在尝试使用 svn repo 转换为 git再生外科医生 http www catb org esr reposurgeon 这是我所做的 有一个具有 svn 名称 gt git 名称映射的 repo map 文件 svnadmin d
  • SVN + 项目管理 + WIKI + 待办事项列表 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 假设我在 Linux 上有一个网络托管帐户 我希望在该帐户上托管一个带有 wiki 项目管理待办事项列
  • SVN 不会缓存凭据

    我正在使用命令行 svn 客户端 版本 1 6 12 来自 Ubuntu 存储库 但我似乎无法让它缓存我的用户凭据 我正在尝试访问 https svn 存储库 类似于https subversion FAKE com PROJECT htt
  • 是什么让 DVCS 中的合并变得如此简单?

    我读于乔尔谈软件 http www joelonsoftware com items 2010 03 17 html 通过分布式版本控制 分布式部分实际上不是 最有趣的部分 有趣的是 这些 系统根据变化来思考 而不是 就版本而言 and a
  • 如何修复损坏的本地 Subversion 工作副本?

    我通常使用 git 对 Subversion 的基础知识知之甚少 所以请保持温柔 我在 Windows 7 上使用 TortoiseSVN SVN 客户端最近宣布需要升级 所以我就这么做了 所有文件都丢失了源代码管理图标 并且资源管理器中出
  • 使用 teamcity 在 svn 中自动分支

    我想知道是否可以使用 Teamcity 进行自动分支 目前 我使用 web 部署自动发布 Web 应用程序 唯一剩下的就是分支 因为我们通常在 svn 中创建一个分支 然后发布下一个版本 任何人都可以建议是否可能以及如何做 打开您的发布版本
  • 尽管有 svn 复制,如何 git svn 克隆完整历史记录

    在我的公司 我们即将从 svn 切换到 git 我们使用的 SVN 非常大 没有 svn 布局 并且在每个版本拆分上我们都制作了一个 svn 副本 SVN存储库结构 svnserver company de product xy 主要版本号
  • 将 svn 存储库添加到现有的 git 存储库中?

    我知道你可以使用 git svn init 来跟踪 svn 存储库 但这是为了你想创建一个全新的存储库 我的情况是 我目前已经有一个现有的 git 存储库 并且希望通过将 svn 存储库设为我当前 git 存储库中的远程分支来跟踪 svn
  • Eclipse 与外部 src 和 Web 内容文件夹链接或映射

    首先这不是问题但是我遇到的问题的解决方案浪费了4 5个小时来找到解决方案 请让我知道是否有更好的替代方法来使用 eclipse 项目管理外部 src 文件夹 我正在使用版本控制系统 GIT 来管理我的项目 还使用外部 Git 客户端 Sou
  • svn propget svn:忽略。什么也没返回,但 svn 显然忽略了我的文件

    我正在尝试将现有的 iPhone 项目添加到 unfuddle com 上的 subversion 帐户 除了一些被忽略的 a 文件之外 一切看起来都很顺利 我知道它们被忽略 因为除非我使用 no ignore 标志 否则我看不到它们处于
  • Maven - 从 SVN 提取代码

    我正在将 J2ee 项目从 Ant 迁移到 Maven ant 任务之一是从 SVN 存储库中提取现有源代码编译它 并将其 jar 添加到我当前的构建中作为 Jar 是否可以获取源代码并在 Maven 中编译它 谢谢你
  • 为什么 git-svn 应该积极搜索旧历史?

    当我运行 git svn clone s 时发生了一些奇怪的事情 尽管以下信息告诉我们不要惊慌 但我想知道为什么会出现这种 svn 错误 为什么这个路径不存在 是被别人删除了吗 如果是 为什么 git svn 应该积极搜索旧历史记录 Ini
  • 为什么 Jenkins SVN 插件在连接到我的 VisualSVN 服务器时会出现错误 E170001?

    我对 VisualSVN 服务器的了解 它支持 Windows Active Directory 身份验证和使用我的 Windows 用户名和密码的 基本 身份验证 我可以成功使用 TortoiseSVN CollabNet 和 Mac O
  • Lotus Notes/Domino 开发版本控制的最佳实践

    请分享您如何对 Lotus Notes Domino 开发进行版本控制 我想将所有脚本 视图 自定义表单 脚本库等放入我们的 SVN 存储库中 半自动方法也被接受 即 如果我找到一种方法来获取一个文件中表单的所有事件脚本 并能够将其作为整个

随机推荐

  • 解决本地浏览器运行项目时的跨域问题Access to XMLHttpRequest at ‘file:///C:/Users/Len/Desktop/%E5%8F%AF%E4%BF%AE%E6%94%

    解决本地浏览器运行项目时的跨域问题 Access to XMLHttpRequest at file C Users Len Desktop E5 8F AF E4 BF AE E6 94 B9 E9 85 8D E7 BD AE dist
  • leetcode 路径总和 -- 递归

    0 题目描述 leetcode原题链接 112 路径总和 1 递归解法 假定从根节点到当前节点的值之和为 val 我们可以将这个大问题转化为一个小问题 是否存在从当前节点的子节点到叶子的路径 满足其路径和为 sum val 不难发现这满足递
  • 【OpenCV】噪声的添加和过滤

    1 简介 下面简单介绍两种图像噪声 即椒盐噪声和高斯噪声 1 椒盐噪声 椒盐噪声也称脉冲噪声 它是一种随机出现的白点或者黑点 可能是亮的区域有黑色像素或是在暗的区域有白色像素 或是两者皆有 图像模拟添加椒盐噪声是通过 随机获取像素点 并设置
  • Android 12上全新的应用启动API,适配一下?

    今日科技快讯 近日 谷歌宣布 将在欧洲市场上销售的Android手机中免费添加更多移动搜索应用 欧洲Android用户可以通过全新的 搜索引擎选项 来选择并设置自己设备上的默认搜索引擎 作者简介 本篇文章来自TechMerger同学的投稿
  • mysql动态ip域名连接_用本地动态IP连接本地mysql

    一个问题已经困扰了我很久的问题今天终于解决了 在用C 连接mysql时 用本地的动态IP加端口号连接本地的数据库mysql real connect conn 192 168 223 128 root mysql Project 3306
  • PCA的数学原理(非常值得阅读)!!!!

    PCA Principal Component Analysis 是一种常用的数据分析方法 PCA通过线性变换将原始数据变换为一组各维度线性无关的表示 可用于提取数据的主要特征分量 常用于高维数据的降维 网上关于PCA的文章有很多 但是大多
  • 统计字符串内某个字符出现的次数

    假如有一个字符串 cabcdasgcjaieyakxhanzgajgaa 我们要统计这个字符串里字符 a 出现的位置以及出现的次数 大致思路 先利用 indexOf 判断出该字符第一次出现的位置 只要其返回结果不等于 1 就继续往后查找 但
  • Linux基础(较全)

    Linux 0 目录 文章目录 Linux 0 目录 1 Linux简介 1 1 Linux是什么 1 2 Linux发行版 1 3 LInux应用领域 1 4 Linux vs Windows 2 Linux 虚拟机 安装 2 1 系统分
  • 数据库表结构设计方法及原则(li)

    数据库设计的三大范式 为了建立冗余较小 结构合理的数据库 设计数据库时必须遵循一定的规则 在关系型数据库中这种规则就称为范式 范式是符合某一种设计要求的总结 要想设计一个结构合理的关系型数据库 必须满足一定的范式 在实际开发中最为常见的设计
  • Java入门

    Java入门 Java 入门 主要内容 Java的地位 Java诞生 Java的特点 安装JDK 简单的Java应用程序 重点与难点 重点 Java平台无关性 Java程序的结构 难点 Java程序的开发过程 Java之父与Java的诞生
  • 探索性数据分析-如何描述业务量数据

    探索性数据分析 如何描述业务量数据 描述业务量的特征 均值 标准差 相关系数 均值代表的是集中趋势 整体的趋势 整体发展方向 整体水平 标准差代表的是离中趋势 描述事物的波动程度 在一定程度上也代表着风险 相关系数代表的是相关分析 代表的是
  • 刷脸支付有深度整合垂直领域的商业价值

    移动支付和银行卡支付没有办法确定使用者到底是谁 因为可以和家人等共同使用 刷脸支付可以确定消费实体是谁 定位到具体人确定数据标签 新零售从业者认为 刷脸支付除了提供更便捷的支付服务外 还可以提供更多的商业数据用于精细化经营 从垂直领域来看
  • 从Qt5的改变看最佳头文件包含风格?QT5找不到#include头文件在哪里

    老版本 C C code 1 2 include
  • Polkit权限提升漏洞(CVE-2021-4034)利用及修复

    Polkit本地权限提升漏洞 CVE 2021 4034 利用及修复 文章目录 Polkit本地权限提升漏洞 CVE 2021 4034 利用及修复 漏洞说明 危害等级 影响版本 修复版本 漏洞利用 漏洞修复 升级polkit版本 临时修复
  • WebSocket协议状态码1005: 理解、应用与解决方案

    WebSocket协议状态码1005 理解 应用与解决方案 引言 WebSocket协议是一种在Web应用程序中实现双向通信的协议 与传统的HTTP协议不同 WebSocket协议允许服务器主动向客户端推送数据 而不需要客户端发送请求 在W
  • TypeScript 元组类型

    TypeScript 语言中 数组中的元素一般只能是由相同数据类型组成 any 除外 如果我们想要存储不同类型的元素 则可以使用元组 TypeScript 中的元组 Tuple 从外形上来看和数组相差不多 但是元组中允许存储不同类型的元素
  • AD18画元器件封装

    AD18画元器件封装 1 在创建好的工程旁边右键给工程添加新的PCB libriary 2 在PCB libriary界面点击工具 gt 元器件向导 然后点击Next 3 可以看到不同类型元器件 可以根据自己需求选择 我选择第二个电容 单位
  • rt-thread系列文章目录

    rt thread系列文章目录 本文是rt thread系列文章目录 后续关于rt thread的更新都会添加到此文内 实战篇 rt thread 生成工程模板 rt thread fal移植 内核篇 rt thread 内存管理 内存堆
  • STM32 USB虚拟串口通信

    目录 一 使用STM32 HAL库配置 选择USB从机模式 添加USB库并选择虚拟串口模式 二 HAL库USB驱动函数介绍 三 驱动函数编写 一 使用STM32 HAL库配置 选择USB从机模式 添加USB库并选择虚拟串口模式 二 HAL库
  • SVN下载、安装、配置及使用方法

    文章目录 SVN是什么 相关概念 为什么需要SVN SVN的特点 TortoiseSVN VisualSVN Subversion 以及 VisualSVN Server的区别 为什么不直接使用Subversion SVN下载 SVN服务端