1、配置管理系统TortoiseSVN,摘要,为什么我们需要配置管理?什么是svn和TortoiseSVN? 软件安装 名词解释 图标重载 SVN的工作模式 TortoiseSVN的功能演示 项目目录设置 人员分配与组织结构,为什么我们需要配置管理?,代码回归 多人协作开发 版本发布 发布新版本时,不中止开发进程 有特殊版本时, 可以创建分支 不同版本具有相同的bug 时,进行修复 追踪变化(trac) 自动构建(cruisecontrol),什么是svn 和 TortoiseSVN?,svn(Subversion)是个自由、开源的版本控制系统 svn的版本库可以通过网络访问 TortoiseSV
2、N是Subversion在Windows操作系统上的图形客户端程序,开源、免费,软件安装,需要有管理员权限 安装完毕后,在“资源管理器”里点击右键,会有如下菜单出现。,名词解释,版本库(Repository)的概念 版本库是svn文件共享的核心,它储存所有的数据。按照文件树形式存储数据包括文件和目录。 工作副本(Working copies)的概念 检出工作副本的概念你的版本库就像是一台时间机器,它记录了所有提交的修改,允许你检查文件或目录以及相 关元数据的历史。 提交修改的概念可以理解为 上 传 修 改 文 件 的 记 录 ,就 是 把 工 作 副 本 里 面 修 改 过 的 文 件 的 记
3、 录 上传到版 本库 里面。,图标重载,SVN的工作模式,协同工作的两种模式 “copy-edit-merge” (Subversion默认的模式) 适用于纯文本文件的协同工作,TortoiseSVN自动合并不同成员对同一文件的修改,如果修改有冲突,需要人工取舍。 此模式适合软件开发这种工作。 “Lock-Modify-Unlock” (锁模式)我们采用这种模式 适用于纯文本文件及二进制文件的协同工作。比如dwg,mcd,doc,ppt,xls等文件格式。 这种模式适合工程设计人员的合作。,锁模式,某文件已经被同学甲锁定,此时同学乙也在自己的计算机上试图锁定该文件,会发生什么情况?(会有提示:
4、该文件已被同学甲锁定) 某试衣间已经被同学甲锁定,此时同学乙也试图进入此试衣间,会发生什么情况?(试衣间内有人,请稍候),TortoiseSVN会检测版本库中的该文件的版本是不是比Working Copy的新,如果比Working copy新,那么只有用户更新了Working copy才能对其成功实施锁定。这就保证了任何一个成员对文件修改时,总是在最新版本基础上进行修改。,当某成员试图锁定某文件时,提交的艺术,采用“Lock-Modify-Unlock”这种模式进行协同工作,需要多进行的两个步骤: Get Lock(锁定文件) Commit(提交,提交成功后程序自动把锁释放掉) 合理选择提交频
5、度和时机 两次提交之间尽量进行同一类操作,比如,统改图层后提交一次,统改标注线型后再提交一次。目的:一旦业主要求有反复,我们也很容易把以前工作成果从库中提出来,减少返工。 建议一小时左右提交一次。 养成按时提交的习惯,试衣间是公共财产,文件也是。,有人总在试衣间咋办,如果有人在试衣间内土遁了或者晕倒了,我们该怎么办?当然是救人要紧。砸锁(Steal the locks),TortoiseSVN的功能演示,Checkout 检出工 作 副 本 Commit 修改文件后提交 Update 从服务器端更新本地文件的版本 Get Lock/Release Lock 对文件的加锁解锁操作 Add/Del
6、ete/Rename 增加/删除/重名文件或文件夹 Update to revision 更新至版本 Show log 显示日志 Revision Graph 版本示意图 Revert 取消上一次的操作(只针对客户端,服务端不做改动) Branch/Tag 分支和标记 其它功能,1. Checkout 检出工 作 副 本,初次检出到本地文件夹时,在本地新建一个空文件夹, 作为checkout项目的目录,这相当于拷贝,此文件夹目录相当于你本地机器一个普通的目录,为了得到工作拷贝, 具体操作如下图:,check out 和export的区别,check out 方式获得文件后,文件仍处于SVN版本
7、控制中 export 导出当前版本的数据,文件脱离SVN版本控制,2. Commit 修改文件后提交,(修改文件夹中的内容后文件夹会自动变成带有红色标记) 大家可以发现,文件/文件夹已经发生了变化,由之前绿色的勾变成了红色的感叹号,这表明该文件已经发生了更改,变的与服务器的文件不一样了,log message 信息填写规则,好的log message和糟糕的log message log message主要记录的是每次的修改内容。建议把一些重要数据、关键操作写到log message中,比如“根据管道工程师山姆同志在2007年7月4日的邮件内容修改结构布置”,可以顺便把山姆同志的邮件内容拷贝到
8、log message中。 注:修改人和提交时间由软件自动记录,无需人工写入log message,3. Update 从服务器端更新本地文件的版本,如果服务器上的版本库已经是第7版本,自己本机的版本还是第1版本。 这时你可以更新自己本地的版本为第7版本。,4. Get Lock/Release Lock 对文件的加锁解锁操作,当我们同时修改一个项目下的文件时,需要锁定文件(可以是一个文件夹或者具体的一个页面)这样可以避免冲突。 加锁:,解锁 :,5. Add/Delete/Rename 增加/删除/重名文件或文件夹,6. Update to revision 更新至版本,7. Show lo
9、g 显示日志,显示文件库中此目录和目录下文件的日志信息,包括各种操作,我们可以看到文件版本的一些信息,还有文件做了什么操作。 若想知道前后2个版本有什么差别,更改了哪些东西,选中文件, 如上图。 右键,选择Compare with working copy,8. Revision Graph 版本示意图,9. Revert 取消上一次的操作,注意:只针对客户端,服务端不做改动,10. Branch/Tag 分支和标记,注:在想要分支的目录下或对单个文件做如下操作:,11. 其它功能,Import 导入 Repo-browser 版本库浏览器 Relocate 重定位 Merge 合并-解决冲突
10、 Blame 追溯 Diff 差异,Merge 合并,第一步:将工作副本切换到主干上:这一步很重要,当前的工作副本的是要合并的目的地第二步:在主干根目录文件夹上右键,如下图,选择最后一项,这是最重要的一步,需要注意的地方有: 1.起始URL:选择主干目录的URL(应当和当前工作副本的URL一致,看起来不合理,其实细想却是合理的,这个是所谓的合并点,也就是分歧开始的地方) 2.结束URL:选择要合并的分支的URL,也就是所有的分歧所在。 3.起始和结束的版本:起始版本应当找到最后一次同步时的版本,如果从没有同步过(第一次合并),则选择创建分支时的版本,结束版本一般是最新版本,如果你不想将某些内容
11、合并进主干的话,也可以选择一个合并点。 到这里,下面就顺理成章了,如果有冲突的话,手工解决冲突,提交就可以了。,我的理解:将分支合并到主干上,首先需要在主干的工作副本下进行,合并的范围是从主干的上次合并的版本开始(FROM)到分支上最新的版本结束(TO),如果是第一次合并,则从主干创建分支的版本开始,所以每次合并好做好说明,否则忘记了,下次再合并就有点麻烦,其实,应当尽量避免一个分支合并多次,分支的作用一般为了解决bug等,一旦bug对应结束了,分支的使命就结束了,以后再出现其他的问题,应当重新建立分支,这样就不会出现多次合并的问题了。 合并的工作是把主干或者分支上合并范围内的所有改动列出,并对比当前工作副本的内容,由合并者手工修改冲突,然后提交到服务器的相应目录里。如果当前工作副本是主干,则合并的范围是分支上的改动,如果工作副本是分支的,则合并范围是主干上的改动,并且一定要注意,合并的起始位置URL一定和当前的工作副本的URL是相同的。,项目目录设置,Documents Program Trunk Branch Release Tools,人员分配与组织结构,The end! Thank you!,