ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

TortoiseSVN客户端安装及使用教程

TortoiseSVN客户端安装及使用教程 各版本控制软件对比对比项SVNGitMercurialPerforce版本控制类型集中式依赖中央服务器分布式本地完整版本库分布式集中式企业级服务端Apache SubversionGitea、Gogs、GitLab、GitHubRhodeCode、Mercurial ServerHelix Core客户端TortoiseSVNGit Bash、TortoiseGit、SourceTreehg、TortoiseHgP4VEclipse 插件Subclipse、SubversiveEGitMercurialEclipsePerforce PluginIDEA 插件SubversionGitMercurialPerforce核心特点集中管理目录级权限控制简单直接适合文档、非代码类版本管理本地有完整仓库分支灵活高效适合多人协作、开源与现代软件开发分布式命令简洁跨平台学习曲线比 Git 平缓生态较小企业级集中式大文件、二进制支持强权限精细多用于游戏、大型工业项目个人部署服务端推荐VisualSVN ServerGitea一般复杂不推荐个人部署部署特点VisualSVN Server轻量服务端配置简单但是只有WIndows端svnserve跨平台命令行Gitea个人部署天花板推荐Gogs比 GiteaGitLab相对更重量麻烦些服务端部署简单但生态和工具链不如 Git 丰富服务端重、配置复杂运维成本高个人/小团队不适用一、SVN简介版本控制[Revision control]最初来源于工程设计领域是维护工程蓝图的标准做法能追踪工程蓝图从诞生一直到定案的过程。是一种记录若干文件内容变化 以便将来查阅特定版本修订情况的系统。Subversion 就是一款实现版本控制的工具软件通常也称为版本控制器简称 SVN。Subversion 是 Apache 软件基金会组织下的一个项目。Subversion 的优良特性①目录版本控制CVS 只能追踪单个文件的历史但是 Subversion 实现了一个“虚拟”文件系统可以追踪整个目录树的修改文件和目录都是版本控制的结果就是可以在客户端对文件和目录执行移动和复制命令。②原子提交提交要么完全进入版本库要么一点都没有这允许开发者以一个逻辑块提交修改。③版本控制的元数据每个文件和目录都有一组附加的“属性”你可以发明和保存任意的键/值对 属性也会像文件内容一样被纳入版本控制。④可选的网络层Subversion 在版本库访问方面有一个抽象概念利于人们去实现新的网络机制Subversion 的“高级”服务器是 Apache 网络服务器的一个模块使用 HTTP 的变种协议 WebDAV/DeltaV 通讯这给了 Subversion 在稳定性和交互性方面很大的好处可以直接使用服务器的特性例如认证、授权、传输压缩和版本库浏览等等。也有一个轻型的单独运行的 Subversion 服务器这个服务器使用自己的协议可以轻松的用 SSH 封装。⑤一致的数据处理Subversion 使用二进制文件差异算法展现文件的区别对于文本(人类可读) 和二进制(人类不可读)文件具备一致的操作方式两种类型的文件都压缩存放在版本库中差异在网络上双向传递。⑥高效的分支和标签分支与标签的代价不与工程的大小成比例Subversion 建立分支与标签时只是复制项目使用了一种类似于硬链接的机制因而这类操作通常只会花费很少并且相对固定的时间以及很小的版本库空间。SVN 的工作原理采取客户端/服务器模式——在服务器的版本库中保存项目文件的各个版本所有参与协同开发的程序员在自己本地电脑上保存一个工作副本。SVN 支持程序员将本地副本更新到服务器端的最新版本也支持将本地副本的最新改变更新到服务器端而且后面的更新不会覆盖前面的更新而是作为一个新 的版本被保存下来——SVN 甚至支持将本地工作副本恢复为服务器端保存的某一个历史版本。SVN 基本操作①检出checkout将一个服务器端创建好的项目整个下载到本地这是到项目组后参与开发的第一步只需执行一次。②更新update将本地文件更新为服务器端的最新版本通常为每天上班时或修改公共文件之前执行一次。③提交commit将本地修改提交到服务器端。通常每天下班前或每实现一个功能、完成一个模块时执行一次。二、TortoiseSVN客户端官方网站https://tortoisesvn.net/官方下载页面添加链接描述SourceForge 托管页面包含所有历史版本及语言包主要用这个下载https://sourceforge.net/projects/tortoisesvn/files/注意别弄混TortoiseSVN 仅能和SVN 服务端VisualSVN Server/Apache SVN 等交互无法识别 Git 仓库 / 服务端TortoiseGit 仅能和Git 服务端GitLab/Gitea/Gitee 等交互无法识别 SVN 仓库 / 服务端。1、下载进入SourceForge选择对应的版本客户端需与汉化包版本相同下载TortoiseSVN-1.14.9.29743-x64-svn-1.14.5.msi切换到Home / 1.14.9 / Language Packs下载LanguagePack_1.14.9.29743-win32-zh_CN.msi下载完是这样的这里我下载的版本是1.14.5.294652、安装先安装TortoiseSVN-1.14.5.29465-x64-svn-1.14.2.msi点击两次下一步之后到选择安装目录的步骤。之后就是直接安装了。提示需要重启系统时保存好自己的东西点击OK新建个文件夹右键有SVN就是安装成功了。这时候还是英文安装汉化包LanguagePack_1.14.5.29465-x64-zh_CN.msi安装完成之后勾选应用语言会直接变成中文3、检出新项目创建一个目录用来存放检出得到的文件例如 MyCRM进入目录 MyCRM点右键注意需要分配SVN的用户会直接检出该目录下的所有文件如果卡着不动可以先取消再继续更新不要重新检出在已经检出的目录下右键选择SVN——右键clean up清理勾选第二个选项点击确定后继续updata(更新)即可可以看到检出得到的文件此时文件图标上没有任何标识。可能你会想到通过重启电脑的方式解决这一问题——其实不用这么麻烦。文件图标是受外壳程序控制的我们只需要重启外壳程序——explorer.exe 就可以了。打开任务管理器选中 explorer.exe 进程结束进程然后新建进程 explorer.exe 就可以了。如果一切顺利的话你会看到文件图标变成了这样4、TortoiseSVN 图标含义5、纳入版本控制①新建文件 abc.txt②在文件上点右键③添加后文件图标发生变化6、提交1.使用 TortoiseSVN 可以提交具体某一个文件或某一个目录下的所有改变。方法就是在想要提交的项目下点右键然后 SVN Commit…就可以看到如下界面2.日志内容如果不填TortoiseSVN 会提交一个空字符串作为日志信息。3.提交后显示信息如下4.没有纳入版本控制的文件默认是不在提交范围内的直接在新创建的文件上点右键只能看到 add 操作的选项如前所述。但在新创建的文件所在目录点右键选择 SVN commit…可以看到如下界面将文件 newFile.txt 选中同样可以提交文件TortoiseSVN 会帮我们自动将 newFile.txt 纳入版本控制7、更新在要更新的文件或目录上点右键→SVN Update8、恢复历史版本①查看历史版本内容[1]首先需要把对应版本库的匿名访问权限设置为 noneanon-access none[2]在要查看历史版本的文件上点右键→TortoiseSVN→Show log[3]在感兴趣的历史版本上点右键可以与当前工作副本进行比较或直接打开。②在要回复历史版本的文件上点右键→Update to revision填上想要回到的版本即可9、解决冲突1.文件发生冲突时的状态和在 Eclipse 中一样这里就不赘述了。2.在冲突的文件上点右键→Edit ConflictsTheirs远程文件Mine本地文件Merged已合并文件3.有“叹号”的行是发生冲突的行4.在冲突行点右键可以选择四种操作[1]使用他们的from ‘theirs’[2]使用我的from ‘mine’[3]把我的放在他们的前面from ‘mine’ before ‘theirs’[4]把他们的放在我的前面from ‘theirs’ before ‘theirs’5.在冲突解决后直接保存——这时 TortoiseSVN 自动弹出如下确认界面冲突解决保留冲突6.文件变为红色叹号标志自动生成的三个文件被删除。提交修改即可。三、整合Eclipse1、插件安装1.Eclipse 插件应用市场在 Eclipse 中访问 Eclipse Marketplace Client 可以搜索 Subversion下载插件按提示安装即可。2.使用压缩包如果不能联网可以使用下载好的插件压缩包 eclipse_svn_site-1.10.5.zip这个压缩包是从 http://subclipse.tigris.org/网站subclipse 是这款 Eclipse 插件的名称上下载的。安装方法是解压 eclipse_svn_site-1.10.5.zip 中的 features 和 plugins 这两个目录将 features 和 plugins 复制到 Eclipse 安装目录/dropins/eclipse_svn_site-1.10.5 下面重启 Eclipse进入 Eclipse 依次打开 Window→Preferences→Team→SVN看到如下界面即说明 SVN 插件安装成功2、Eclipse分享和检出共享项目1.在 Eclipse 中创建的新项目想要发布到 SVN 服务器端可以通过“共享”项目实现2.在项目上点右键→Team→Share Project…→选择一种版本控制工具选择一个资源库位置切换到 Team Synchronizing 透视图选择项目中要提交的内容通常是项目中的全部内容检出检出下载文件分两种情况1.从服务器端获取到的是一些零散的文件不能作为项目检出此时会弹出一个新建项目向导之所以会这样是因为我们需要创建一个项目来保存从服务器端取回的文件2.从服务器端获取到的是一个完整的项目例如此时必须作为项目检出项目从服务器检出后会成为一个工作副本根目录下会自动创建.svn 隐藏目录3、更新提交提交新创建文件后文件图标上会以“?”标识表示该文件尚未纳入版本控制在新创建的文件上点右键→Team→添加至版本控制这样文件图标上会显示“”表示当前文件已纳入版本控制但还未提交至服务器。在要提交的文件上点右键→Team→提交…会提交文件在弹出的对话框中可以不填写日志。文件提交后图标会变为“金色的圆柱体”表示当前文件的版本和服务器端一致。文件修改后图标会变为“*”表示当前文件或目录包含未提交的修改。在文件上点右键→Team→提交进行提交更新①更新整个项目时可以在项目上点右键→Team→更新②更新某个具体的文件时可以在文件上点右键→Team→更新4、仓库分析创建资源库位置1.切换到透视图 SVN 资源库研究2.创建资源库位置此时可以查看版本库中的文件及目录结构补充如何确定版本库地址5、冲突什么情况下会发生冲突1.两个开发人员Harry 和 Sally分别从服务器端下载了文件 A。2.Harry 修改之后A 变成了 A’Sally 修改之后A 变成了 A’’。3.Harry 先一步提交使服务器端文件的版本也变成了 A’4.Sally 本地的文件 A’’已经过时了此时她已无法提交文件服务器会要求她先进行一次更新操作。5.此时 Sally 的更新操作有两种可能(1) Sally 所做的修改与 Harry 不是同一个位置更新操作尝试合并文件成功。(2) Sally 所做的修改与 Harry 恰好是同一个位置更新操作尝试合并文件失败 发生冲突。发生冲突后本地工作副本会发生如下变化(1)文件 A 中的内容发生如下改变publicstaticvoidmain(String[]args){System.out.println(Edit By Command!);System.out.println(Edit By Command!);.mineSystem.out.println(Edit By Eclipse!);//本地文件System.out.println(Edit By Command!New Edit);//服务器文件.r14System.out.println(Edit By Command!);System.out.println(Edit By Command!);}其中从mine 到之间是发生冲突时本地副本的内容。从到r14 是发生冲突时服务器端的最新内容。注意这里 r 后面的数字是发生冲突时服务器端的版本号有可能是任何整数值r14 只是一个例子。同时文件图标变成一个“黄色的”。(2)与冲突文件同目录下新增文件扩展名为.mine其内容是发生冲突时本地副本的文件内容。(3)与冲突文件同目录下新增文件扩展名为.r 小版本号例如 MyCRM.java.r13 其内容是冲突发生之前服务器端的文件内容可以作为解决冲突的参照。(4)与冲突文件同目录下新增文件扩展名为.r 大版本号例如 MyCRM.java.r14 其内容是冲突发生时服务器端的文件内容。6、解决冲突解决冲突(1)在冲突文件上点右键→Team→编辑冲突…→出现如下界面Merged合并本地版本Theirs他们的服务器版本以对比的方式将本地内容与冲突内容显示出来其中左侧为本地内容右侧为冲突内容。其中本地内容是可以修改的。(2)根据需要和实际情况将本地内容更正——这个过程很可能需要牵涉冲突的两位开发人员进行必要的沟通——机器与程序目前还不能完全取代人工智能。更正后文件图标会变成一个“四角形”同时冲突文件内的 .mine、 以及 .r14 等标记都会被去掉。(3)在冲突文件上点右键→Team→标记为解决随便选此时.mine 文件和.r 版本号文件都会被自动删除冲突文件的图标变为“*”表示可以提交。文件本身变为解决冲突之后的状态。(4)提交文件文件图标变为“金色圆柱体”。7、恢复历史版本1.在需要回复的文件上点右键→Team→显示资源历史记录→得到如下界面2.选择某一个历史记录点右键→获取内容。文件就会恢复到指定版本的状态同时图标变为“*”。3.获取历史记录时如果出现如下错误提示可以通过将对应版本库中的 svnserve.conf 文件中的 anon-access 设置为 none 解决。
返回列表