SVN的目录结构
trunk 主干
branches 分支
tags 标记
默认情况下都是小写
SVN的工作机制在某种程度上就像一颗正在生长的树:
一颗有树干(trunk)和许多分支(branches)的树
分支从树干生长出来,并且细的分支从相对较粗的树干中长出
一棵树可以只有树干没有分支(但是这种情况不会持续很久,随着树的成长,肯定会有分支啦,^^)
一颗没有树干但是有很多分支的树看起来更像是地板上的一捆树枝
如果树干患病了,最终分支也会受到影响,然后整棵树就会死亡
如果分支患病了,你可以剪掉它,然后其他分支还会生长出来的哦!
如果分支生长太快了,对于树干它可能会非常沉重,最后整棵树会垮塌掉
当你感觉你的树、树干或者是分支看起来很漂亮的时候,你可以给它照张相(tags),这样就就可以记得它在那时是多么的赞。
三个目录的两种使用方法
一、主干开发
主干代码主要用于开发,主干代码始终是最新的开发版本,有可能是不稳定的,分支代码主要存储某个阶段性的稳定的代码分支,会在分支上做少量的开发维护工作,tags只在特定版本上做上一个标记不做开发
二、分支开发
主干代码不做开发,所有的开发任务在branches分支上开,开发完成后合并到主干代码上
两种目录结构在实际的开发工作中可能会交叉使用
使用场景
初期开发中使用主干开发
后其集中升级开发的情况下使用branches进行开发,最终合并到主干上去
具体使用情况根据实际需求来使用不同的开发方式
当前目录Import 导入代码到版本库中通常用于版本库初使化
冲突处理
当两个人同时update后对同一个文件进行操作,操作完后A成功提交,B再去提交时B会产生冲突
看到上边的提示后首先在本地update一下看效果图
分别有冲突文件、自己修改的文件、自己修改前的版本、服务器上别人修改的最新版本
从上边的图可以看到SVN客户端自带了一个比较编辑工具,但是对中文的支持不好
大家可以用自己的编辑器来进行比较编辑,其实一般冲突比较少的时候可以直接打开冲突文件来进行编辑,有个开始和结束标志,把一样的东西保持不一样的东西修改好顺序,一般默认上边的内容还放在上边
修改后再进行 resolved操作,这操作的作用就是删除本地生成冲突文件,这步操作是必须的,然再进行commit操作就可以了
SVN客户端使用技巧
添加快捷菜单
在上边解决冲突的时侯可以看到经常需要选择二级菜单,许多常用的功能也得选择二级菜单非常的不方便 ,怎么解决呢
勾选上常用的操作,如
查看log 添加文件 编辑
冲突文件,解决冲突,
删除等,这些内容虽然设
置了一级显示,但是系统
会根据实际情况来显示的
第三比较冲突编辑工具,前边可以看到编辑冲突文件时自带的编辑器不是太好用,下边我们来集成一下第三方的工具
Beyond Compare ,主要有两个地方,一个是比较另一个是合并,合并也可以用于冲突编辑 主要参数
"D:\Program Files\Beyond Compare\BCompare.exe" %base %mine /title1=%bname /title2=%yname /leftreadonly
"D:\Program Files\Beyond Compare\BCompare.exe" %mine %theirs %base %merged /title1=%yname /title2=%tname /title3=%bname /title4=%mname
Logs相关操作-添加
在进行提交操作时一般都需要写上message信息,这些信息对提交进行一些说明,对多多人开发来说非常重要
添加message信息,在commit操作的时候
使用SVN show log 命令可以查看历史的logs记录
在日志上点右键可以修改日志的内容和作者
Logs相关操作-关联trac 任务单
在trac中新建的任务单,SVN可提交相关性,比如任务单 #1
完成后再commit的时候把 message的末尾加上 #1,这样对应的trac就会有相关信息的链接
目录或者文件的忽略
在SVN管理的代码中很多临时性的文件是不需要归到版本库的管理,但这些生成后会提示添加或者修改的图标,所以有些缓存目录或者临时性的文件怎么来设置为忽略,而不让SVN客户端提示
哪些类型的文件需要忽略
在window下自动生成的Thumbs.db文件
一些程序编译时生成的.obj等文件
程序生成的编译目录下的临时文件或者缓存文件
特定的目录
目录或者文件的忽略
整个目录的忽略
文件的忽略
分支的操作-新建分支
Branches 和 tags 目录下其实都分支,只是branches的分支有时候也用于开发,tags只是一个快照归档,在导入初使版本的代码的时候一般都放在trunk目录里边
新建分支 branch/tag,建立后到branches目录update
分支的操作-合并分支
在分支开发完成后把分支合并到主干执行merge命令,下图是把分支合并到主干上
可以先测试一下合并或者直接merge
当主干代码和分支代码有冲突的时候SVN客户端会提示冲突解决是现在解决还是稍后解决
上边操作使用的稍后解决,因为冲突的文件可能会比较多
通过下图可以看到冲突的文件不多一个新加一个冲突,对于数目较多的要注意修改所有冲突的文件
下图是合并后本地的代码,和普通的代码冲突是一样的,那么下边的处理方法就按代码冲突来进行处理,处理完成后 执行 SVN resolved,然后再执行commit操作,这样分支合并到主干的操作就完成了
分支的合并主要有分支-主干 分支-分支这样的操作,其实原理都是一样,都是以一个为基础,把另一个合并到当前的基础上,在基础代码上去除冲突 这样新的版本就形成了,然后再把当前基础代码进行提交,这样合并操作就完成了