不知道从什么时候开始,我把解决svn代码冲突的问题加到初、中级面试者的题目中,主要考察编写代码量的多少、协作编写代码、SVN使用的规范等问题。只要你写的代码够多,经常与别人协作完成功能,碰到代码冲突在所难免。
很多人担心代码会冲突,担心代码会丢失,这些都是版本管理工具没有使用好的外在表现。
先不要往下看解决方案,如果当事人是你,你怎么解决这个问题处理呢?
方案一
- 把自己的代码复制出来
- 将多余的几个不规范(.mine,.r7434,*.r7436诸如此类)的文件删除
- 把当前文档还原到最新版本
- (使用Beyond Compare比较一下)将自己的代码添加进来后保存,commit
- 完成。
缺点:
代码语言:javascript复制1,完全没有使用svn/git工具的特性来解决冲突
2,单文件代码量大、改动处较多时,操作不方便
3,项目代码量大、冲突多时,操作不方便
4,容易丢失代码
方案二
- 直接打开冲突文件,找到其中形如....mine,=====>等类似的标记;或使用工具的与资源库同步功能,双向对比代码。
- 需要干系人参与的,找到干系人,确保功能的唯一性;不需要干系人参与的,直接将冲突代码清除保留一份,或者删除冲突的标记,直接将代码合并。
- 确保文件中没有冲突的标记后,保存文件,此时还不能直接commit文件,在svn看来此文件依旧处于冲突状态(多出的三个文件还存在)
- 打开svn相应菜单或命令,标记该文件冲突解决,标记后你发现多出的三个文件(.mine,.r7434,*.r7436诸如此类)自动消失,文件处于被修改状态
- commit,完成。
你是采用方案一?还是方案二?
顺带提一句,大家很有必要掌握下版本库下不同状态的外在表现形式