• 1. SVN版本管理初级培训
  • 2. 目录SVN的基本概念 在TortoiseSVN中使用的SVN 在Eclipse中使用SVN 分支和标签
  • 3. 为什么要进行版本控制是否发生过这样的情况: 当你在修改一个文件时,其他人也在修改这个文件?而你是否因此丢失过自己所作的修改呢? 是否曾经保存完一个修改,然后又想把个文件恢复到修改以前的状态?是否曾经希望能够看到一个文件以前某个时间点的状态? 是否曾经在项目中发现了一个 BUG,然后想调查它是什么时候产生的? 你是否在一个团队中工作?如果这些问题中的任何一个回答“是”的话 那么你肯定需要考虑版本控制 请集中精力继续后续的培训。
  • 4. Subversion相关软件基于Subversion和TortoiseSVN的版本控制系统 Subversion:是一个开源的版本控制系统,拥有CVS的大部分特征,并在CVS的基础上有更强的扩展,用来代替 CVS 系统。 TortoiseSVN:SVN的客户端工具,和资源管理器完美集成,基于TortoiseCVS的代码开发,使用上和TortoiseCVS极为相似; Web浏览器 目前公司的版本库基于Apache服务器运行,可在浏览器中查看授权过的版本库的信息。
  • 5. 使用SVN之前需要了解的第一个概念版本库( Repository ) SVN的核心是版本库,储存所有的数据,版本库按照文件树形式储存数据-包括文件和目录,任意数量的客户端可以连接到版本库,读写这些文件。通过写数据,别人可以看到这些信息;通过读数据,可以看到别人的修改。 最特别的是 Subversion 会记录版本库中的每一次更改,不仅针对文件也包括目录本身,包括增加、删除和重新组织文件和目录。
  • 6. 使用SVN之前需要了解第二个概念版本模型 锁定-修改-解锁 方案 复制-修改-合并 方案:在这种模型里,每一个客户读取项目版本库建立一个私有工作副本—版本库中文件和目录的本地映射。用户并行工作,修改各自的工作副本,最终,各个私有的复制合并在一起,成为最终的版本,这种系统通常可以辅助合并操作,但是最终要靠人工去确定正误。 Subversion 怎么做? Subversion 缺省使用复制-修改-合并模型,大多数情况下可以满足你的需求。然而,Subversion 1.2 后还是支持锁定,如果你有不可合并的文件,或者你只是想实行强制管理策略,Subversion 仍然会提供你需要的特性。
  • 7. SVN的部署、安装和配置公司的版本库情况介绍 基于Apache运行 各部门建立各自的版本管理服务器 质量管理部统一进行公司层面、部门层面和项目层面的版本管理 服务端的安装配置:略 TortoiseSVN的安装 如何获取安装文件: 从http://tortoisesvn.tigris.net下载 从公司版本库中获取: 默认安装 安装后与windows资源管理器完美集成
  • 8. 在服务器端创建版本库操作执行人员:配置管理员 操作步骤: 在要创建文件仓库的位置(配置管理服务器中)创建目录; 在目录中创建版本库: 命令行方式:svnadmin create D:\SVNStore 使用TortoiseSVN:资源管理器的右键菜单→TortoiseSVN→在此创建版本库
  • 9. 版本库结构操作执行人员:配置管理员 Subversion的版本库 在你的硬盘上创建一个空的文件夹 在那个文件夹下创建你想要的顶级目录--千万不要放任何文件进去!(暂时不明白为什么) 通过在那个文件夹右键,选择TortoiseSVN → 导入... 将这个结构导入到版本库中。这将导入临时文件夹到版本库的根目录形成一个基本的版本库布局。 Subversion的版本库布局中,推荐建立:trunk,tags,branches三个目录,他们不是必须的,但其设置贴合SVN功能,在使用中你将会发现这样设置的好处。 Trunk:最新的代码,相当于CVS中的Head版本; Tags:Subversion使用过程中创建的标签; Branches:保存Subversion的工作分支。
  • 10. TortoiseSVN使用-访问版本库访问方法:Subversion 可以通过多种方式访问-本地磁盘访问,或各种各样不同的网络协议,但一个版本库地址永远都是一个 URL,URL 方案反映了访问方法。 方案 访问方法 file://直接版本库访问(本地磁盘或者网络磁盘)。http://通过 WebDAV 协议访问支持 Subversion 的 Apache 服务器。https://与 http:// 相似,但是用 SSL 加密。svn://通过未认证的 TCP/IP 自定义协议访问 svnserve 服务器。svn+ssh://通过认证并加密的 TCP/IP 自定义协议访问 svnserve 服务器。
  • 11. TortoiseSVN使用-checkout“工作副本”的概念 一个 Subversion 工作副本是你本地机器一个普通的目录,保存着一些文件,你可以任意的编辑文件,而且如果是源代码文件,你可以像平常一样编译,你的工作副本是你的私有工作区,在你明确的做了特定操作之前,Subversion 不会把你的修改与其他人的合并,也不会把你的修改展示给别人。 工作副本的结构 普通的文件目录 .svn文件夹:管理目录,这个目录里的文件能够帮助 Subversion 识别哪一个文件做过修改,哪一个文件相对于别人的工作已经过期了。
  • 12. TortoiseSVN使用-识别重载图标 一个新检出的工作副本使用绿色的对勾做重载。表示 Subversion 状态正常. 在你开始编辑一个文件后,状态就变成了已修改,而图标重载变成了红色感叹号。通过这种方式,你可以很容易地看出哪些文件从你上次更新工作副本后被修改过,需要被提交。 如果在更新的过程中出现了冲突,图标会变成黄色感叹号。 如果你给一个文件设置了svn:needs-lock属性,Subversion 会让此文件只读,直到你获得文件锁。具有这个重载图标的文件来表示你必须在编辑之前先得到锁。 如果你拥有了一个文件的锁,并且 Subversion 状态是正常,这个重载图标就提醒你如果不使用该文件的话应该释放锁,允许别人提交对该文件的修改。 这个图标表示当前文件夹下的某些文件或文件夹已经被调度从版本控制中删除,或是该文件夹下某个受版本控制的文件丢失了。 加号告诉你有一个文件或目录已经被调度加入版本控制。
  • 13. TortoiseSVN-add功能:将客户端新建的文件添加到文件库中,使其接受SVN的控制。 操作: 在资源管理器中打开取出到本地的工作复本,选中要添加的文件,点击鼠标右键,在弹出菜单中选择“SVN 添加”; 在弹出窗口中选择要添加的文件; 点击OK,完成添加操作。
  • 14. TortoiseSVN-commit 将你对工作副本的修改发送给版本库,称为提交修改。 提交之前要确保你的工作副本是最新的。 可以直接使用TortoiseSVN → 更新,或者你可以先使用TortoiseSVN → 检查修改,看看哪些文件在本地或是服务器上已经有了改动。 提交文件与提交文件夹的区别 当你提交文件时,提交对话框只显示你选择提交的文件。 当你提交文件夹,提交对话框将自动选择该文件夹中有改动的所有文件。如果你忘记你建立了一个新文件,提交文件夹将使你可以找到它。
  • 15. TortoiseSVN-deleteDelete-〉commit 找回已删除的文件或目录 删除了文件或目录并已经提交该删除操作到版本库,那么一个常规的TortoiseSVN → Revert已不能再将其找回。 使用日志对话框来查找出来删除的版本和文件,打开数据仓库的浏览器,并选择该版本。 选择删除的文件或目录,右键并选择Context Menu → Copy to working copy ... ,然后选择你的工作副本的路径。 重载加号标志表明这个项目不仅仅是增加,而且还包含了历史,Subversion记住了它是从哪个拷贝过来的。对这个文件运行svn log会看到这个文件之前的历史,换句话说,该文件不是新的,而是原先删除的那一个文件的后代。
  • 16. TortoiseSVN-update获取其他用户对文件进行的修改,与自己对文件进行的修改进行合并,保证本地的文件总是最新的。 说明: 在团队开发时,更新保持团队成员之间的工作内容一致,是一件很重要的工作。要注意经常更新自己的工作复本,以保证自己能够获得最新的修改内容。
  • 17. TortoiseSVN-rename对文件/目录进行Subversion控制下的改名操作,用此功能对文件/目录进行改名后文件仍处于SVN的控制下并保持连续的变更信息。 注意:必须使用TortoiseSVN的重命名功能,直接在资源管理器中进行重命名SVN无法监控。
  • 18. TortoiseSVN-Revert 撤销本地所有未提交的修改。
  • 19. TortoiseSVN-出现冲突commit时出现“You have to update your work copy first.”红色警告,说明版本库中的此文件已经被其他人修改了。 点“ok”按钮退出。 执行update 然后commit 如果修改与update得到的代码不冲突,则自动合并。
  • 20. TortoiseSVN-出现冲突如果update出现”One or more files are in a conflicted state.“红色警告,说明出现冲突,SVN自动产生几个文件记录冲突。 filename.mine:你更新前的文件,没有冲突标志,只是你最新更改的内容。(如果这个文件不可以合并,.mine文件不会创建,因为它和工作文件相同。) filename.rOLDREV:这个是你做更新操作以前的BASE版本,就是你在上次更新之后未作更改的版本。 filename.rNEWREV:这是Subversion从服务器刚刚收到的版本。这个版本就是版本库的HEAD版本。
  • 21. TortoiseSVN-出现冲突手工解决冲突 选择冲突文件-〉”Edit conficts” 出现merge界面,分为”Theirs”、”Mine”和”Merged”3部分,表示”别人修改的内容”、 ”我修改的内容”和”合并后的结果”3部分。目标是将”别人修改的内容”和”我修改的内容”有取舍地合并起来,形成”合并后的结果”。 合并一般分为4种情况: 保留”我的修改”,舍弃”别人的修改”。鼠标右键点击Mine框的相应行,点击”Use this text block”。 舍弃”我的修改”,保留”别人的修改”。鼠标右键点击Theirs框的相应行,点击”Use this text block”。 同时保留”我的修改”和”别人的修改”,并将”我的修改” 放在前面。鼠标右键点击Mine框的相应行,点击”Use text block from mine before theirs”。 同时保留”我的修改”和”别人的修改”,并将”别人的修改”放在前面。鼠标右键点击Mine框的相应行,点击”Use text block from theirs before mine”。 合并完成,Ctrl+S存盘,退出。 选择冲突文件-〉”Resolved”,标记冲突已解决,系统自动删除因冲突而新建的文件。继续进行commit操作。
  • 22. VS版本控制插件 AnkhSvnVS2010效果
  • 23. 谢谢!