1 SVN两种工作模式
1.1 锁定-修改-锁定模型:
一个时间段里版本库的一个文件只允许被一个用户修改。
适用于二进制格式文件,内部结构复杂,不容易理解更改处的上下文,采用该方案较好。
- Get lock/ Release lock:锁定/解锁文件
通过Get lock进行文件加锁,锁定后在浏览界面可以查看文件锁定状态。
修改完成后commit时自动解锁文件。也可通过Release lock手动解锁。
1.2 拷贝-修改-合并模型:
每个用户建立一个工作拷贝,用户并行工作,修改各自的工作拷贝,最终,将各个私有拷贝合并在一起,成为最终版本。
通过上下文进行合并,适用于文本文件。
2 冲突及解决
2.1 什么是冲突
冲突是随着拷贝-修改-合并方案产生的问题。
冲突是指团队协同工作时,当多位团队成员同时修改同一个文件,造成本地文件与SVN系统中的文件版本不一致,而导致文件无法提交的情况
2.2 冲突产生的原因
当团队协同工作的时候,多位团队成员同时操作一个文件。团队成员A操作完成后,将该文件提交到SVN上。此时,其他团队成员的本地文件与SVN上的文件版本不一致。当团队成员B操作完成并对文件进行提交操作时,就会产生冲突。
2.3 冲突的解决方法
冲突产生后图标会发生变化,并产生三个文件。
- filename.mine:本地修改文件。
- filename.roldrev:做修改之前的检出文件。
- filename.rnewrev:从服务器端获取到的版本库中的最新版本。
面对文件冲突,我们可以选择以下三种方法解决冲突
- 方法一:使用revert还原,放弃所做的修改
- 方法二:复制某一工作文件,可用最新版或者本地修改前文件copy更新
- 方法三:使用工具解决冲突( Edit onflicts &TortoiseMerge窗口& Resolved & commit )
3 TortoiseMerge介绍
TortoiseMerge使用三窗口方式显示差异。这个视图也用来解决冲突文件:
- 左窗口显示他人的文件与基础文件的差异
- 右窗口显示我的文件与基础文件的差异
- 底部窗口显示基础文件,我的文件,与 他人的文件 的合并结果,以及可能的冲突。
合并一般分为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”
TortoiseMerge图标介绍
避免冲突的建议
- 合理规划系统架构和人员分工,尽量减少两个人修改同一个文件的情况。
- 研发人员要养成及时Update的习惯,要使自己的开发工作环境,要与配置库保持同步一致。
- 研发人员要养成良好的工作习惯,修改了配置库里的文件后,应及时地提交。相互协作穿插研发的代码、数据文件,要及时提交到配置库,还要及时告知相关干系人。
- 必要时使用SVN的锁定功能。
- 要养成写log Message信息的好习惯,为了方便以后查找历史记录方便,也为了他人查看方便。
4 树冲突
树冲突产生原因
当一名开发人员移动、重命名、删除一个文件或文件夹,而另一名开发人员也对它们进行了移动、重命名、删除或者仅仅是修改时就会发生树冲突。
有一些其它情况被标记为树冲突,因为冲突中卷入了文件夹而不是文件。例如你在主干和分支中添加了同名的文件夹然后在合并时就会发生树冲突。
树冲突解决方法
需要发现冲突的一方,查看log日志获知自己的冲突文件被谁做过什么样的操作,然后与之沟通进行解决,解决后将冲突标记为已解决。