SVN 是一种常用的版本控制工具,一种典型的项目代码实践方式是:
存在一个代码基线(Base Line)或称主干,不同的模块使用各自的分支进行功能开发,在
开发完毕后合并回主干,准备交付。
基本概念:
变化集合(ChangeSets)
SVN 使用变化集来描述和管理托管对象的版本变更,这里变更可以是文件文本内容的变化,
目录树的改变或者元数据(metadata,附加信息,包含权限或自定义属性等)的修改等。
整个代码仓库(Repository)使用全局的数字来标识版本(revision)。它既是代码库提交
次数的统计,也是某个变化集的隐式标识。
可以通过诸如
svn log -r 9238
来获取该版本的变化信息
或者
svn diff -c 9238
来查看详细的变化记录(patch)
SVN 的合并操作也是使用这些变化的信息来完成修改的合并
最佳实践:(建议使用 1.6 系列的最新客户端)
分支定期同步主干修改
分支定期从主干同步修改有助于提早发现冲突,同时降低分支合并回主干时的风险(与其
他业务功能的冲突)
使用如下命令实现
cd my-working-branch
svn merge http://my-repo/trunk
该命令负责把从创建该 branch 后,trunk 上所有的修改复制一份,然后应用到本 branch 上,
因此重复进行 merge 会导致冲突
执行 merge 命令后,通过 svn st 可以查看文件变化状态,例如
% M % %%.
M % % %source.c
注意到当前工作目录"."也发生了变化,并且 M 标记在第二列,表明该目录的元数据发生了
变化。这里是 merge 命令修改或创建了目录的 svn:mergeinfo 属性(可通过 svn diff 查看),
用来记录已经合并过的代码线和版本(务必不要擅自修改该属性),以便后面再进行
merge 时,选定起始版本。(备注:svn:mergeinfo 是 SVN 1.5 版本引入的特性,需要确
定客户端和服务器版本支持该特性)
确定合并无误后,使用 svn ci -m “merge trunk changes to branch”来提交修改
或者 svn revert . -R 来回滚所有的改变