• 1. Subversion培训文档
  • 2. 版本控制介绍 Subversion简介 TortoiseSVN简介和Client安装 TortoiseSVN图标介绍 TortoiseSVN Client基础操作 TortoiseSVN与开发工具的集成
  • 3. 版本控制版本控制(Revision control)是一种软件工程技巧,籍以在开发的过程中,确保由不同人所编辑的同一个档案都得到更新。
  • 4. 团队开发为什么需要版本控制在开发过程中,很可能我们同时几个人在修改一个页面或者文件的情况下,而他们相互不知情,这样后保存的人很可能覆盖掉前者所做的修改,如果之前没有备份,那结果是不可恢复的。想避免,你就要等别人改完,这样开发就不能并行操作。需要有文件修改先后顺序的控制的功能,例锁机制或者更新对照机制。 当你做了大量的修改,由于需求的变化,我们很有可能要将代码改回之前的样子,假设只有20行代码,你可以手工凭记忆改,2000行呢?我们需要过去代码或文件版本的存档功能。
  • 5. 团队开发为什么需要版本控制简单来说,版本控制就是时间机器,它可以记录你对文件的每次更改并对文档和源代码集中管理,这样,即使是当前文件被他人修改后覆盖或者需要恢复到三天前的软件版本,我们也可以在服务器中取出自己需要的版本。
  • 6. 版本控制术语基线(Baseline):基线是软件文档或源码(或其它产出物)的一个稳定版本,它是进一步开发的基础 档案库(Repository):存储档案的新版本还有历史资料的地方 工作版本(Working copy):从档案库中取出一个本地端(客户端)的复制,针对一个特定的时间或是版本。所有在档案中的档案更动,都是从一个工作版本中修改而来的。 提交(Commit):将本地端的修改送回档案库。(由版本控制软件处理跟上次更动相比哪个档案又被更动的事) 变更(Change):对一份文件作的特定更改。 取出(Check-Out):从档案库取出档案到本地端(客户端) 更新(Update):将档案库的修改送到本地端 汇入(Import):文件夹形式的整体签入 冲突(Conflict):当两方更改同一份文件会发生冲突,需要先UPDATE再写入
  • 7. 版本控制工具介绍Starteam 是一个集合了版本控制、构建管理(Buid Management)和缺陷跟踪系统为一体的软件,并且具有强大的图形界面,易学易用;但管理复杂、维护困难。2002年底被Borland公司收购。 ClearCase (cc) 是ROSE构件的一部分,目前最牛的配置管理工具,主要应用于复杂的产品发放、分布式团队合作、并行的开发和维护任务。可以控制word,excel, powerpoint,visio等文件格式,对于不认识的格式可以自己定义一种类型来标识 Visual SourceSafe (vss) 简单易用、方便高效、与windows操作系统及微软开发工具高度集成,约等于免费,但功能不够强大。 Concurrent Versions System (cvs) 是开发源码的并发版本系统,它是目前最流行的面向软件开发人员的源代码管理解决方案,它可用于各种平台,包括Linux、Unix和Windows NT/2000/XP等 Subversion (svn) 是一个自由开源的基于CVS版本之上开发的一款版本控件系统,是一个记录每一次文件和目录的修改情况的文件服务器,可以将数据回复到以前的版本,并可以查看数据的更改细节,它可用于各种平台,包括Linux、Unix和Windows NT/2000/XP等
  • 8. 为什么要使用Subversion(SVN)Subversion(SVN)支持并行开发;版本控制;方便我们进行产品管理、变更管理;进行过程控制,同时能在项目组内实现代码共享。
  • 9. 什么是Subversion(SVN)SVN 是一个跨平台的软件,支持大多数常见的操作系统。作为一个开源的版本控制系统,SVN 管理随时间改变的数据。 这些数据放置在一个中央资料档案库 (repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。这样你就可以把文件恢复到旧的版本, 或是浏览文件的变动历史。Subversion 是一个通用的系统, 可用来管理任何类型的文件, 其中包括了程序源码。
  • 10. Subversion特点简述目录版本控制 不同于CVS只关心文件的内容以及文件是否存在,所有文件、目录的操作都是被版本化的,例如文件的改名、拷贝等等。 不可分割的提交 提交操作是不可能分割的,修订版本号是基于每次提交操作而非文件, 提交日志被附加在每个修订版本中,而不是像CVS一样冗余的进行存储 分支(Branching)与标记(Tagging)操作是轻量级的 1.效率高 2.当你发布了一个正式版,可以建立一个分支,在分支上继续开发下一 个版本,而对于后来发现的Bug,可在在主分支上继续改进,如果分支上同 样存在这个Bug,可以将两者合并。
  • 11. Subversion历史2000年,CollabNet公司开始寻找CVS的替代产品 同年2月,联系了Open Source Development with CVS的作者Karl Fogel,一同开发新系统 同年3月,Subversion开始详细设计和编码 经过1.0,1.1,1.2直到现在的1.6.9版本
  • 12. Subversion架构
  • 13. Subversion架构图中的一端是保存所有版本数据的Subversion版本库,另一端是Subversion的客户程序,管理着所有版本数据的本地影射(称为“工作副本”),在这两极之间是各种各样的版本访问(RA)层,某些使用电脑网络通过网络服务器访问版本库,某些则绕过网络服务器直接访问版本库。
  • 14. Subversion(SVN)的特性版本化的目录:SVN实现的“虚拟”版本化文件系统可以跟踪目录树的变更。也就是说在SVN中,文件和目录都是版本化的。 真实的版本历史:由于实现了文件和目录的版本化,SVN可以记录如文件拷贝和改名这些常见操作带来的版本变更,即在SVN中,对文件或目录都可以进行增加、拷贝和操作,并有版本历史记录。 原子提交:一系列相关的更改,要么全部提交到版本库,要么一个也不提交,这样用户就可以将相关的更改组成一个逻辑整体,防止出现部分修改需另一部分未修改的情况提交到版本库中。 版本化的无数据:每一个文件或目录都有自己的一组属性键和它们的值,可以根据需要建立并存储任何键/值。和文件本身的内容一样,属性也在版本控制之下。 可选的网络层:SVN在版本库访问的实际上具有较高的抽象程度,利于人们实现新的网络访问机制。SVN可以作为一个扩展模块嵌入到Apache之中,这种方式在稳定性和交互性方面有很大的优势,可以直接使用服务器的成熟技术—认证、授权和传输压缩等。此外,SVN自身也实现了一个轻型的、可独立运行的服务器软件。这个服务器使用了一个特定的协议,这个协议可以轻松用SSH封装。我们目前选用的是SVN自身的服务器,即Svnserver方式。 一致的数据操作:SVN用一个二进制差算法描述文件和变化,对于文件(可读)和二进制(不可读)文件其操作方式是一致的。这两种类型的文件压缩存储在版本库中,而差异信息则在网络上双向传递。 高效的分支和标签操作:在SVN中,分支与标签操作的开销与工程的大小无关,SVN的分支和标签操作是一种类似于硬链接的机制拷贝整个工程。因而这些操作通常只会花费很且相对固定的时间。 可修改性:SVN没有历史负担,它以一系列优质的共享C程序库的方式实现,具有定义良好的API。这使得SVN非常容易维护,和其它语言的互操作性很强
  • 15. TortoiseSVN简介TortoiseSVN 是 Subversion 版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录。文件保存在中央版本库,除了能记住文件和目录的每次修改以外,版本库非常像普通的文件服务器。你可以将文件恢复到过去的版本,并且可以通过检查历史知道数据做了哪些修改,谁做的修改。这就是为什么许多人将 Subversion 和版本控制系统看作一种“时间机器”。
  • 16. TortoiseSVN Client安装执行TortoiseTSVN-1.4.8.12137-win32-TSVN-1.4.6.msi,启动安装:
  • 17. TortoiseSVN Client安装如下图按Next:
  • 18. TortoiseSVN Client安装修改相应安装路径,如下图按Next:
  • 19. TortoiseSVN Client安装如下图按Install:
  • 20. TortoiseSVN Client安装
  • 21. TortoiseSVN Client安装如下图按Finish:
  • 22. TortoiseSVN Client安装重启计算机,安装完成,如下图按Yes:
  • 23. TortoiseSVN Client安装安装成功后在右键菜单里会新增如下TortoiseSVN 的菜单 :
  • 24. TortoiseSVN图标介绍
  • 25. TortoiseSVN图标介绍 一个新检出的工作复本使用如下绿色的对勾重载。表示Subversion状态正常。 在你开始编辑一个文件后,状态就变成了已修改,而图标重载变成了红色感叹号。通过这种方式,你可以很容易地看出哪些文件从你上次更新工作复本后被修改过,需要被提交。 如果在提交的过程中出现了冲突,图标变成黄色感叹号。 如果你给一个文件设置了svn:needs-lock属性,Subversion会让此文件只读,直到你获得文件锁。只读文件具有这个重载图标来表示你必须在编辑之前先得到一个锁。
  • 26. TortoiseSVN图标介绍 如果你拥有了一个文件的锁,并且Subversion状态是正常,这个重载图标就提醒你如果不使用该文件的话应该释放锁,允许别人提交对该文件的修改。 这个图标表示当前文件夹下的某些文件或文件夹已经被计划从版本控制中删除,或是该文件夹下某个受控的文件丢失了。 加号告诉你有一个文件或是目录已经被计划加入版本控制。
  • 27. TortoiseSVN工作模式
  • 28. TortoiseSVN Client基础操作(一)SVN 检出(SVN Checkout) 增加(Add) 删除(Delete) 改名(Rename) 移动 SVN 还原 (SVN Revert) 检查更新(Check for modifications) SVN 更新(SVN Update) SVN 提交(SVN Commit)
  • 29. TortoiseSVN Client基础操作(二)显示日志(Show log) 版本库浏览(Repo-browser) 版本分支图(Revision graph) 追溯(blame) 导入(Import) 导出(Export) 获取锁定(Get lock) 解除锁定(Release lock) 分支/标记(Branch/tag) 切换(Switch) 合并(Merge)
  • 30. SVN 检出(SVN Checkout)在拷贝工作目录下单击右键选择SVN检出,如下图所示:
  • 31. SVN 检出(SVN Checkout)在弹开窗口的版本库URL框中输入版本库的目录地址(如https://218.2.129.25:3395/svn/Client/Android/2.0/taps/baseline/manager),然后点击确定。 如下图所示:
  • 32. SVN 检出(SVN Checkout)在弹出的对话框中录入用户名和密码(域用户和密码),验证成功后,项目文件开始从远程服务器下载到本地工作目录。
  • 33. SVN 检出(SVN Checkout)点击确定即获取完成。
  • 34. 注意事项: 注意:.svn这个隐藏目录记录着两项关键的信息: 工作文件的基准版本和一个本地副本最后更新的时间戳。千万不要手工修改或删除这个 .svn隐藏目录和里面的文件!!! 否则将会导致你本地的工作拷贝 (静态视图)被破坏,无法再进行操作。
  • 35. 增加(Add)在testsvn目录下新建一个项目文件testadd.cpp 提交到版本库的方法 方法一:先提交到变更列表中,再 commit到配置库。选择该新增文件,右键svn菜单执行“Add”操作提交到“变更列表”中,然后右键svn菜单执行“SVN Commit”提交到版本库 方法二:不提交到变更列表中,而是直接commit到配置库。选择该新增文件的父目录,右键svn菜单执行”SVN Commit”操作,在弹出的“变更列表中”选择新增的文件
  • 36. 删除(Delete)如果被删除的文件还未入版本库,则可以直接使用操作系统的删除操作删除该文件 如果被删除的文件已入版本库,则删除方法如下: 方法一:选择被删除文件,右键svn菜单执行“delete”操作,然后选 择被删除文件的父目录,右键svn菜单执行”SVN Commit” 方法二:使用操作系统的删除操作删除该文件,然后选择被删除文 件的父目录,右键svn菜单执行”SVN Commit”,在“变更列表”中选择 被删除的文件。 说明:实际上,从你把源代码迁入SVN服务器开始,每一个版本的数据和文件,就算是你已经删除了,也都可以随时迁出的。
  • 37. 改名(Rename)修改文件名,选中需要重命名的文件或文件夹,然后右键 TortoiseSVN->Rename,在弹出的对话框中输入新名称,点击OK按钮。并将修改文件名后的文件或文件夹通过SVN Commit提交到SVN服务器。 版本库中文件或文件夹的移动 右键点到要移动的文件或文件夹然后拖拉到你想要移动到的目录,再选择你想移动的方式。
  • 38. SVN 还原 (SVN Revert)分两种情况 一、改动没有提交,这种情况下,我们使用svn revert就能把改动给扔掉。 二、改动已经提交,这种情况下,我们需要回退到以前的版本,具体操作为:右击想要回退的文件夹或者文件,在TortoiseSVN弹出菜单中选择Update to reversion…然后回弹出一个界面,比如说我们想要回退到第10个版本只需要在Revision中填写相应的版本号,然后点击OK即可。 检查更新(Check for modifications) 此功能可以显示你所做的修改有哪些还没有提交的。此功能不光能看到对文件的修改变化,所有的变化都能看到,包括增加文件或目录、删除文件或目录、移动文件或目录等。如果你点击检查版本库,那你还可以看到版本库里的改动,即别人提交了哪些文件的改动,你还没更新到本地。
  • 39. SVN 更新(SVN Update)更新本地代码与SVN服务器上最新的版本一致,只要在需要更新的文件夹上点击右键或在文件下的空白处点击右键,选择SVN Update(获取指定版本的内容,点击右键执行SVN菜单中的Update to revision),就可以了。 注意:更新操作可能会因为版本冲突失败,这是可以使用合并(Merge)或其他方法解决,也可能是因为锁定(Get Lock)而失败,这时需要先解锁(Release Lock)。
  • 40. SVN 更新(SVN Update)对于每个冲突的文件Subversion在你的目录下放置了三个文件: filename.ext.mine 这是你的文件,在你更新你的工作复本之前存在于你的工作复本中,没有冲突标志。这个文件除了你的最新修改外没有别的东西。 filename.ext.rOLDREV 这是在你更新你的工作复本之前的基础版本(BASE revision)文件。也就是说,它是在你做最后修改之前所检出的文件。 filename.ext.rNEWREV 这个文件是当你更新你的工作复本时,你的Subversion客户端从服务器接收到的。这个文件对应与版本库中的最新版本。
  • 41. 解决代码冲突如果commit时出现“You have to update your work copy first.”红色警告,说明版本库中的此文件已经被其他人修改了。请先点“ok”按钮退出。执行update,然后再commit。 如果修改与update得到的代码不冲突,则自动合并。如果冲突(比如对同一行代码进行了修改),则出现”One or more files are in a conflicted state.“红色警告,并产生几个文件记录冲突。一般情况下,我们不要直接编辑冲突文件。而按照以下操作手工解决冲突。 在资源管理器中,选择commit时冲突的那个文件,鼠标右键菜单选择”Edit conficts”。 出现界面,分为”Theirs”、”Mine”和”Merged”3部分,表示”别人修改的内容”、 ”我修改的内容”和”合并后的结果”3部分。我们是要将”别人修改的内容”和”我修改的内容”有取舍地合并起来,形成”合并后的结果”。 合并一般分为4种情况: 1.保留”我的修改”,舍弃”别人的修改”。鼠标右键点击Mine框的相应行,点击”Use this text block”。 2.舍弃”我的修改”,保留”别人的修改”。鼠标右键点击Theirs框的相应行,点击”Use this text block”。 3.同时保留”我的修改”和”别人的修改”,并将”我的修改” 放在前面。鼠标右键点击Mine框的相应行,点击”Use text block from mine before theirs”。 4.同时保留”我的修改”和”别人的修改”,并将”别人的修改”放在前面。鼠标右键点击Mine框的相应行,点击”Use text block from theirs before mine”。 5.合并完成,Ctrl+S存盘,退出。然后,在资源管理器中,选择冲突文件,鼠标右键菜单选择”Resolved”,标记冲突已解决。系统会自动删除因冲突而新建的文件。此时,就可以继续进行commit操作了。
  • 42. 合并(Merge) 分支用来维护独立的开发支线,在一些阶段,你可能需要将分支上的修改合并到最新版本,或者将最新版本的修改合并到分支,这时候你就需要进行合并操作。 合并是首先将两个版本库树进行比较,然后将区别应用到本地拷贝. 这个命令包括三个参数: 1、初始的版本树 2、最终的版本树 3、一个接收区别的工作拷贝。
  • 43. 合并(Merge)由于有了版本控制,这样多个开发人员可以同时开发这个项目, 例如当Tom和Jim同时编辑一个文件B.java,Tom编辑完之后将修改提交,当前版本是10,他为Test方法添加了一句话: System.out.println("Tom Test!"); 没有任何问题,提交之后版本就会加1,,提交后变成11,当Jim修改完,他在B.java里添加了一句话 System.out.println("Jim Test!"); 他当前的版本是10,当他也想提交时,问题来了,出现了下面的错误(如图):
  • 44. 合并(Merge)意思就是说当前你提交的版本低于版本库中的版本,已经过时了,这说明有人在此之前提交过,这时侯Jim必须先升级他的B.java文件,升级如果与当前本地的版本有代码不一致的地方也会提示如下错误,表示SVN无法自动处理这些差异,需要人工去合并,如图:
  • 45. 合并(Merge)B.java上的图标也变成了黄色三角叹号,而且当前文件夹里会出现几个文件,文件名都是修改了的文件的文件名加上版本号,比如说当前Jim的就是B.java.r10,B.java.r11,B.java.mine等,这些文件中存放的都是各个版本的此文件的内容,.mine里的是本地修改后的文件内容,这些文件都是为了让你手工去合并而产生的,。手工去合并有一些方式,推荐使用TortoiseMerge,具体操作为更新完毕后再次Commit B.java文件,这个时候就会发现如下:
  • 46. 合并(Merge)B.java是红色的标注的,并且是conflicted(有冲突的),这个时候双击列表框中的B.java就会打开TortoiseMerge的界面。
  • 47. 合并(Merge) 在这里面可以很清楚的看到,左上角上是Theris,也就是版本库中的B.java,右上角是Mine,也就是自己的B.java,下方是Meraged,表示合并之后的B.java。而且列数里还有一些小图标:我们说说小图标的意思。 :表示这一行被添加了。 :表示这一行被删除了。 :表示这一行只包含空格一类的修改,并没有实际代码的变化,或者是几行合并 成为了一行,你不需要对代码进行修改。 :这一行是用TortoiseMerge手动修改的。 :表示这一行现在有冲突。 :表示这一行以前有冲突,但是冲突的效果被空格和回车隐藏了。 :表示这里行里修改因为恢复了原始的内容,修改都被解除了。 在这里面可以清楚的看到,两个版本中的不同之处,如果想留下Jim写的,也就是Mine中的System.out.println("Jim Test!");,那你就可以在Mine中的红色的那一行里右击选择Use this text block,意思是使用这一行,这时候你就会看到下方Merged里的那一行问号变成了刚才选择的那一句。现在说说菜单项的作用(在上面那两个窗口中): Use this text block:表示使用这一行。 Use this whole file:表示使用整个这一个文件。 Use text block from “mine” before”thires”:表示冲突的两句话都要留下,但时mine的在前面,thires的在后面。 Use text block from “thire” before”mine”: 表示冲突的两句话都要留下,但时thires的在前面,mine的在后面。
  • 48. 合并(Merge)在Merged窗口中的菜单项基本上上面的明白了,这里的也就明白了,呵呵。 我们现在想要冲突的两句全都留下,而且Tom的在前,Jim的在后,我们就可以在Merged窗口中右击冲突的一行使用Use text block from “thire” before”mine”,这样就达到了想要的效果,修改完之后,别忘了最重要的一步:就是确认已经Merge完毕点击图标工具栏上的图标即可,然后就可以关闭TortoiseMerge,这个时候就可以点击OK来提交了。 如果代码不是很多,你可以直接打开更新后的B.java可以看到里面在有冲突的地方有相应的标注,如下: <<<<<<< .mine System.out.println("Jim Test!"); ======= System.out.println("Tom Test!"); >>>>>>> .r11 这个表示本地文件在这一行是System.out.println(“Jim Test!”);,而版本库中的也就是第11个版本的B.java是System.out.println(“Tom Test!”);,现在就需要决定是留哪一句,通过与其他开发人员交流之后,知道怎么改了,就可以将那些标注和不能留下的语句去掉即可,然后将那些自动生成的B.java.r10,B.java.r11,B.java.mine等文件删除,然后再次Commit也是可以的,这个方法只适合代码较少,很容易发现不同之处的情况,不过还是使用TortoiseMerge好。
  • 49. 合并(Merge) 注意:SVN不能进行文件与文件夹的合并,反之亦然。即只能文件夹对文件夹,文件对文件进行合并。如果选择了文件,打开合并对话框,那么你必须在对话框中给出文件的路径。如果你选择了文件夹,打开合并对话框,那么你必须给出文件夹的对话框。
  • 50. SVN 提交(SVN Commit) SVN的提交是将在工作空间做的修改进行提交,包括文件内容的修改,文件或目录的添加,删除,命名,移动等操作。 显示日志(Show log) 通过此功能可以查到谁,什么时候,对哪个目录下的哪些文件进行了哪些操作,操作的时候是否关联了正确的活动号。
  • 51. 版本库浏览(Repo-browser)版本库浏览功能是用来浏览需要查看的资料库,在本地代码文件夹下点击右键,选择TortoiseSVN->Repo-browser,然后在弹出的对话框中输入资料库地址,再输入用户名和密码。就能查看到您需要查看的版本库中的内容,在这你还能看到哪些文件被谁锁定了。 在版本库浏览中可以移动版本库中的文件或文件夹到一个新的位置。只需用左键选中你想要移动的文件,然后将其拖到它要去的位置。 如果你要移动一个文件或文件夹到一个新的位置并重命名,你可以选中你想要移动的文件,然后将其拖到它要去的位置,而不用左键拖。这样,就会显示对话框来为该文件或文件夹重命名。
  • 52. 追溯(blame)有时你不仅要知道哪一行做了修改,还要精确地知道谁修改了一个文件中的哪一行。这就是TortoiseSVN → Blame...命令 。选择追溯的版本,会显示哪个版本谁什么时候改了哪些行? 版本分支图(Revision graph) 版本分支图能告诉我们从哪开始有了分支和标签,同时能够知道这条支路是单独的分支还是树型结构。
  • 53. 导入(Import) 在将您的项目导入到版本库之前,你应该:删除所有不需要的文件(如:临时文件,编译器产生的文件等)组织好目录和子目录内的文件。 然后进入资源管理器,选择你的项目的顶层目录,右键选择TortoiseSVN → Import….,在弹出框中输入您的项目导入到版本库的URL,并在导入信息里面输入的内容将作为提交日志 当你点击确认时,TortoiseSVN 会导入包含所有文件的完整目录树到版本库。你导入的文件夹名称不会在版本库中出现,只有这个文件夹的内容会在版本库中出现。 请注意:你导入的文件夹没有被版本控制!你需要检出刚才导入的版本,以便获得受版本控制的工作目录。
  • 54. 导出(Export)导出一份干净的目录,导出步骤和SVN 检出步骤类似。 导出的目录不带TSVN的绿色标记,也没有.svn目录,为干净的目录树;而SVN检出的目录带TSVN的绿色标记,每个目录下有个.svn目录。导出相当于复制了一份服务器中的资料,而检出相当于创建了一个本地的工作拷贝。
  • 55. 获取锁定(Get lock)如果你对一个文件取得锁定,那么只有你可以提交这个文件,其他用户的提交都会被拒绝,直到你释放了这个锁。 获取锁的方法是选中你要获取锁的文件点右键选择TortoiseSVN->Get lock…. 在弹出框中最好注明对文件加锁的原因,这样别人可以知道你为什么锁定这个文件,注释是可选的。在文件框内选择你需要加锁的文件。 当且仅当你需要窃取别人的锁的时候,勾选偷取此锁定复选框。
  • 56. 获取锁定(Get lock)为了确保你不会忘记释放锁,你不需要做别的事,在提交对话框中,总是会显示锁定的文件,并总是默认被选中。 如果你希望保持一个修改过的文件的锁,你需要在提交之前选中保持锁定复选框。 解除锁定(Release lock) 手动解除锁定,选中工作复本中要释放的文件,选择命令TortoiseSVN → Release lock。 你可以对一个文件夹来使用这个命令释放其中的所有锁定项。
  • 57. 分支/标记(Branch/tag)TortoiseSVN的分支/标记相当于创建一个内部的连接,指向一个具体的版本树。所以TortoiseSVN的分支和标记创建起来比较快,并且没有在版本库里占据任何额外的空间。 创建分支的最大的目的就是跟主线进行并行开发的时候不影响主线的开发。你在分支上所做的提交都只存于分支上,主线上的Update是看不到分支的修改的。 在你当前的工作拷贝中给你想要拷贝的分支或标记选择一个目录,然后选择命令TortoiseSVN → Branch/tag...。
  • 58. Web方式浏览版本库 你可以将浏览器指向版本库的URL,这样你无需安装Subversion客户端就可以浏览内容版本库中的内容。 TortoiseSVN设置 如果你需要设置TortoiseSVN中的一些属性,你可以右键选择“TortoiseSVN-设置”,在已保存数据中,你可以通过清除操作,来修改TortoiseSVN保存的很多你用过的设置。 在外部程序:差异查看器中,可以将版本比较工具设置为你本地的用来比较不同版本的查看工具。
  • 59.   Q&A
  • 60. THANKS!