【SVN】提交文件时提示文件冲突怎么办?
1. 如果执行svn commit命令时遇到了"xxx is out of date"提示,如下图所示:
那么一般是因为您修改了本地某文件或目录结构,而别人也修改了同一个的文件或目录并且先于您提交到了SVN库。
2. 解决的办法是先使用svn update命令获取SVN库上最新修改的文件,这个命令并不会直接覆盖掉您本地所做的修改,SVN客户端会先尝试将SVN库上该文件的修改合并到你的本地文件中。
如果SVN客户端成功的进行了合并,您可以再次执行SVNcommit命令进行本地文件的提交即可。
3. 如果SVN客户端无法进行自动合并(可能因为文件是一些二进制文件,或者两人修改的地方是同一个,或者修改的地方太多等原因),则svn客户端会提示“one or more files are in confict state”,即告诉您有文件发生了冲突,如下图所示:
4. 如果是文本文件冲突,则在文件夹下会多出几个冲突文件,如下图所示:
其中:
-f2是尝试合并的文件,里面有svn客户端加入的一些标记;
-f2.r69是您本地修改文件的基础版本,69是版本号;
-f2.mine是您本地修改后的文件,即f2.mine是在f2.r69文件基础上更改的;
-f2.r70是服务器上最新版本的文件,即别人修改后提交的文件。
此时的解决方法有多种:
(1)比较f2.r70和f2.mine,将您自己做的修改和别人做的修改手工合并,然后把合并后的内容覆盖到f2中。
最后右键点击f2,然后选择Resovled,之后f2.mine,f2.r69,f2.r70文件都会自动被删除。然后您再次执行svn commit就可以了。如下图所示:
(2)如果要保留别人的修改而放弃自己的修改,则可以删掉f2,f2.mine, f2.r69,f2.r70几个文件,再执行以下update,这样会重新从服务器上把最新文件下载到本地。
(3)如果是保留自己的修改而放弃别人的修改,则可以删掉f2,f2.r69,f2.r70,然后把f2.mine改名为f2,然后再次执行svn commit,就可以把自己的修改上传到svn服务器。
5. 如果发生冲突的是二进制文件,此时SVN客户端是无法执行自动合并的,这样目录下只会多出以.rXX结尾的两个文件,而不会出现.mine结尾的文件,此时的处理方法可以参考上面的(2)(3)。