无线业务系统
SyncroSVN 使用手册
v1.0
SyncroSVN 是 Mac OS X 环境下功能完整而且风格最接近 TortoiseSVN 风格的 GUI 客户端,使用操作与 TortoiseSVN 类似,常用操作基本都在右键的上下文菜单可以找到,以下相关内容在 SyncroSVN 7.0 和 Mac OS X 10.6.5 验证通过。
2 SyncroSVN 安装
2.1 SyncroSVN 安装
安装介质可从 获取,下载解压后,把快捷方式 SyncroSVNClient 拖到桌面下方的 dock 工具栏即可使用。 SyncroSVN 安装后如果不能启动,需要检查操作系统是否已经安装 Monaco 或 Helvetica 字体,对于版本低于10.6.3 的操作系统,须安装 JRE5.0 或更新版本。
安装后首次启动会有注册提示,通过 SyncroSVN 界面上方主菜单 Help->Register 注册,License 文件信息可找 huanling 或 yunshandi 索取。
2.2 DiffMerge 安装
虽然 SyncroSVN 提供了自带的合并工具 FileMerge ,当以行为单位解决冲突时,缺少右键上下文菜单的功能, DiffMerge 的引入,可以很好的解决该问题,当使用 DiffMerge 解决冲突时,使用方式几乎和 windows 的 TortoiseMerge 一样,可以彻底解决切换到 windows 机器合并代码、解决冲突的困扰。
DiffMerge 也可从以上地址下载,下载后使用默认的磁盘工具打开该 dmg 文件,打开后把里面所有文件拷贝到某个目录 ( 如提前在桌面新建好的 diffmerge 目录 ) ,拷贝完后还需要做两步设置:
1) 注册 DiffMerge :
把刚从 dmg 文件解压出来的 app 文件 ( 如 /User/huanling/Destop/diffmerge/DiffMerge.app) 复制到应用程序 (/Applications) 中;
2) SyncroSVN Diff 设置:
SyncroSVN 主界面上方菜单栏 ->SyncroSVNClient-> 偏好设置 ->Diff ,如下图:
注意 : 首先 ,这里选择的是 sh 文件 ( 不是 app 文件 ) ,本例中路径是/User/huanling/Destop/diffmerge/CommandLine/diffmerge.sh , 其次 ,默认的三个参数顺序是 ${firstFile} ${secondFile} ${ancestorFile} ,需要调整为 ${secondFile} ${firstFile} ${ancestorFile} ,这样解决冲突时更加方便;
其中 firstfile 是本地工作拷贝的版本, secondfile 是从服务器更新带来的版本,而ancestorfile 是前两者的共同祖先版本。
2.3 SyncroSVN 其他设置
SyncroSVN 的大部分默认设置无需改动即可满足日常需要,安装完毕后可把编码设置优化一下,如下图:
另外syncroSVN默认是不启用软链接支持的,如果不启用,syncroSVN将在mac下无法识别软链接,通过Syncro SVN Client->偏好设置->SVN,如下图:
启用后重启下syncroSVN即生效,对于已经checkout的带软链接的工作拷贝,建议使用原地址重新checkout一个工作拷贝来修复不可识别的软链接。
3 SyncroSVN 使用
3.1 界面介绍
SyncroSVN 提供了功能强大的 GUI 操作,包括右键上下文菜单操作、版本过滤、客户端界面切换等,如下图:
3.2 建立工作拷贝
签出代码与 Tortoise 类似,如下图,签出完后即可在上图中的 Working copy 的 tab 页进行日常的开发活动:
3.3 基线和分支创建
基线或分支的创建,可从 Repositories 面板 ( 类似 TortoiseSVN 的 Repo-brwser) 上进行,在创建之前,可能不存在对应的版本库标签,可从点击下图的增加版本库标签按钮创建,创建完毕即可浏览版本库的内容:
创建基线或分支,选中主线目录,如 trunk ,然后点击主菜单的 Tools->Branch/Tag ,弹出以下窗口,用 Browse 选择目标目录后,还得手工补充基线或分支的名字,输入完点击下方OK 按钮完成创建。
3.4 分支合并
分支合并首先选择把分支间差异应用到哪个工作拷贝,先切换到 Working copy 面板,选中工作区,如 wc3 的根目录如下图:
然后点击主菜单 Tools->Merge ,接下来的操作选择合并种类,与 TortoiseSVN 类似:
三种合并的区别详见 << 基于SVN 的 并 行 开发技术>> ,这里选择第一种,如下图所示,把分支 1.0bugFix 与主干 /trunk/src 之前的差异应用到 wc3 工作区中:
备注:下方 Target 中的参数是工具自动获取的,不需要手工设置,只需要设置“ From URL”和“ Revision range to merge ”两处,这与 TortoiseSVN 是一样的。
下图的合并参数与 windows 环境合并类似:
然后点击 Finish 即可开始合并,执行合并并把冲突解决完毕后,需要把 wc3 工作区上的改动提交才算真正的合并完成。
3.5 冲突解决
冲突产生从来源上看可以分为两种:一种是在非最新版本下修改的情况下更新遇到的冲突,另一种分支间的合并产生的冲突。从类型上看,分为文本行冲突和树冲突。文本行冲突是指 2 个版本之间同一行内容有差异 ( 都不是空行 ) , SVN 无法做到自动合并 ; 树冲突一般是指两个版本在文件或目录之间的差异,当删除、修改、重命名交叉发生在两个版本之间时,更新或合并时树冲突就产生了。
关于冲突产生的原因,请参考《 基于SVN 的 并行 开发技术 – 冲突产生的原因 》
3.5.1 树冲突解决
当合并或更新后出现以下符号时,就是树冲突了:冲突解决可以右键菜单 ->Edit confict 解决,
右键选择编辑冲突后打开以下的对话框,这里只能二选一,要么保留工作拷贝本地的修改,要么接受来自服务器的更新:
点击 OK 按钮后提交,完成树冲突的解决。
3.5.2 文本行冲突解决
当合并或更新后出现以下符号时,就是文本行冲突了:
如上图所示,当文本行冲突发生时,会产生三个临时文件, mine 结尾的是本地的工作拷贝版本,剩下 2 个其中版本号小的是合并双方的共有祖先版本,最后一个是来自服务器更新进来的版本, 冲突解决可以右键菜单 ->Edit confict 解决,接下来会打开 2.2 章节配置的 diffmerge界面,如下图:
如上图所示,合并的结果会在中间一栏的本地工作拷贝版本体现,右键冲突行的上下文菜单功能分别如下:
Replace with Left : 取左栏的行作为合并结果 ;
Prepend from Left :把左栏的行内容追加到本行内容前面 ;
Append from Left :把左栏的行内容拷贝到本行的下一行 ;
Replace with Right :取右栏的行作为合并结果 ;
Prepend from Right :把右栏的行内容追加到本行内容前面 ;
Append from Right :把右栏的行内容拷贝到本行的下一行 ;
若冲突可以选择中间三栏中任何一栏的全部内容可以解决,则可以使用 Select ALL 搭配Copy( 点击 Select ALL 后会出现菜单 ) 、 Paste 。所有冲突行处理完后点击上图中的保存按钮然后退出即可,再右键发生冲突的文件,如上图的 line_conflict.txt ,选择 Mark Resolved ,至此,行冲突解决完毕。
3.6 属性设置
SVN 的大部分属性都需要在签出的工作拷贝中设置,而在 Mac 下的 SyncroSVN ,所有属性设置必须通过签出的工作拷贝中进行。切换到 Working copy 面板,右键点击需要设置属性的目录或文件 ->Show SVN Properties ,如下图:
属性的增加、编辑和删除,都需要设置完提交对应的目录或文件才能生效。
比较工具的配置
difffork工具配置Version Control System integration
Starting from version 1.1.6, the DiffFork command-line utility supports OPTION "-w --wait", which can be used to help work with Git, Mercurial, Subversion, etc.
Note: DiffFork can compare 2 folders/files. 3-way diff/merge is not supported.
To install the command-line utility, choose "Install Command-Line Utility..." from the Help menu.
USAGE
difffork file1 file2 [OPTION]
DESCRIPTION
-w --wait
Wait for the diff window to be closed.
diffmerge的配置
/Applications/DiffMerge.sh ${secondFile} ${firstFile} ${ancestorFile}