svn中update冲突和commit冲突区别,求详细解释下吧,顺便带小列子吧!!谢谢了!
一、我给你说一下原理吧:
假如DBAccessUtilsjava你在修改test方法,而你同事也在修改test方法,但是他先commit了,而你想commit的时候,commit不了,然后你不假思索就update下来了,然后就会出现4个文件分别为:
DBAccessUtilsjava、
DBAccessUtilsjavamine、
DBAccessUtilsjavar2129、
DBAccessUtilsjavar2130。
mine是你的修改的版本,里面是保存的你修改的内容
r2129是你做更新操作以前的版本,你是在这个版本的基础上做的修改
r2130是版本库中的最新版本,这里有别人的修改,而就是这个修改和你的修改冲突了
DBAccessUtilsjava就是融合了你修改的内容和服务器最新的修改内容
二、说了那么多,现在说说怎么解决冲突吧:
我们打开DBAccessUtilsjava,你会看到由小于号、等于号和大于号串组成的三个部分,其中小于号和等号之间的内容是你的修改,而等号和大于号之间的修改是其他人的修改,在明确了冲突的原因之后,我们已经知道怎么修改了,两个人的修改都是需要保留的。
OK,那就保留所有的修改,删除掉<、=和>,最后就把冲突解决了。
注意:小于号、等于号和大于号串是冲突标记,并不是冲突的数据,你一定要确定这些内容在下次提交之前得到删除。
三、如何降低冲突解决的复杂度:
1、当文档编辑完成后,尽快提交,频繁的提交/更新可以降低在冲突发生的概率,以及发生时解决冲突的复杂度。
2、在提交时,写上明确的message,方便以后查找用户更新的原因,毕竟随着时间的推移,对当初更新的原因有可能会遗忘
3、养成良好的使用习惯,使用SVN时每次都是先资源同步,看看有没有冲突,再做相应的提交或更新。
4、每天早上打开后,首先要从版本库获取最新版本。每天下班前必须将已经编辑过的文档都提交到版本库。
这个提交失败显然是pre-commit这个钩子阻止了你的这次提交操作,和svn cleanup完全无关,楼上的回答肯定是从别的地方粘贴过来的
从报错信息来看,应该是SVN管理员设定了pre-commit这个钩子,通过钩子禁止用户自行“add/del workspace”,具体这个add/del workspace 是什么意思,只有问你们的管理员了,估计是禁止你们自己新增或删除文件或文件夹吧。
顺便解释一下,pre-commit这个钩子是SVN服务器每次在开始执行commit前自动调用的,通过编辑这个钩子可以实现在commit前先做些检查,从而禁止客户端的某些commit操作
从报错信息里可能,是SVN服务器端的pre-commit这个钩子阻止了这次commit,你需要到服务器上检查一下这个钩子里面的指令内容了。
这个钩子存放在服务器端该版本库对应文件夹的hooks文件夹内,是在每次commit操作时服务器自动调用执行的,执行OK才能成功commit,否则就阻止commit。
如果您从服务器下拉(pull)提示您ahead多少次commit的话,代表你本地有几个commit并没有推送到服务器上面,所以您现在应该执行git push的操作,将您最新的提交推送到服务器上,那样子就可以解决了 : )
0条评论