﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-天道酬勤-专注于JAVA技术-文章分类-2. 学习日志</title><link>http://www.blogjava.net/shrode/category/16842.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 16 Apr 2007 10:57:19 GMT</lastBuildDate><pubDate>Mon, 16 Apr 2007 10:57:19 GMT</pubDate><ttl>60</ttl><item><title>SVN中冲突的解决－2006-12-05</title><link>http://www.blogjava.net/shrode/articles/85598.html</link><dc:creator>Shrode Lee</dc:creator><author>Shrode Lee</author><pubDate>Tue, 05 Dec 2006 08:00:00 GMT</pubDate><guid>http://www.blogjava.net/shrode/articles/85598.html</guid><wfw:comment>http://www.blogjava.net/shrode/comments/85598.html</wfw:comment><comments>http://www.blogjava.net/shrode/articles/85598.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/shrode/comments/commentRss/85598.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/shrode/services/trackbacks/85598.html</trackback:ping><description><![CDATA[
		<p dir="ltr" style="MARGIN-RIGHT: 0px">本人使用SVN的时间不是很长，在使用之前也仅仅是粗浅的了解过这个软件。从今年的8月份开始，由于一个项目使用Eclipse 3.1，跨地域的开发，为了适应不同的开发人员处于不同的地理位置，因此我们使用SVN作为团队开发的管理工具。开始使用时，仅仅是边学边用，遇到不懂的地方再去查找资料。今天由于有点时间，先把合并过程遇到的冲突问题详细了解一下。<br /><br />       可以使用svn status -u命令来查看一下某个问题是否会有冲突发生。在使用svn update 的时候，会出现如下一些信息：<br />$ svn update<br />U  INSTALL<br />G  README<br />C  bar.c<br />Updated to revision 46.<br /><br />那么，U 开头的信息提示你，这个文件在你本地没有修改过，文件已经根据版本库的新版本更新了。G 开头的信息提示你，这个文件在你本地已经修改过，但是和版本库中对应的版本并没有冲突的地方，svn已经合并更新了。而C 开头的信息提示你，这个文件有点麻烦，你在本地的修改和版本库中的版本修改的地方重叠了，也就是说，你修改了某一行，你的同事也修改了同一行。这个就需要你自己手工去解决了。当冲突发生时，要注意到有三件事情可以帮助你解决问题。<br />         a.Subversion会给这个文件作出c标记。<br />         b.如果Subversion认为这个文件时可以合并的，它会一个冲突标记（特殊的横线来分开冲突的代码块）<br />         c.对每一个冲突的文件，Subversion放置三个额外的未版本化文件到你的工作拷贝。<br /><br />filename.mine<br />     你更新前的文件，没有冲突标志，只是你最新更改的内容。（如果这个文件不可以合并，.mine文件不会创建，因为它和工作文件相同。）<br /><br />filename.rOLDREV<br />     这个是你做更新操作以前的BASE版本，就是你在上次更新之后未作更改的版本。<br /><br />filename.rNEWREV<br />      这是Subversion从服务器刚刚收到的版本。这个版本就是版本库的HEAD版本。<br /><br /><br />例如，如果sally修改了一个文件sandwich.txt, 而harry也刚刚修改了这个文件的相同位置并提交到服务器。那么sally在做这个文件的update操作的时候会得到三个额外的文件sandwich.txt.mine、sandwich.txt.r1、sandwich.txt.r2。并且在提交的时候会遭到服务器的拒绝，因为这个文件的冲突问题还没有得到解决。要解决这个冲突，可以选择：<br />         a. 手工合并冲突文件（检查和修改文件中的冲突标志）。<br />         b.用一个临时文件（三个中的一个）覆盖你的工作文件。<br />         c.运行svn revert &lt;filename&gt;来放弃所有的修改。<br /><br />一旦解决了你的冲突，需要通过命令svn resolved让subversion知道并删除三个临时文件。这时才可以提交。<br /><br />下面再说说手工合并冲突。开始的时候让人觉得害怕，但做一段时间之后，就觉得不那么烦人了。<br /><br />看看如下文本：<br />Mayonnaise<br />Lettuce<br />Tomato<br />Provolone<br />&lt;&lt;&lt;&lt;&lt;&lt;&lt; .mine<br />Salami<br />Mortadella<br />Prosciutto<br />=======<br />Sauerkraut<br />Grilled Chicken<br />&gt;&gt;&gt;&gt;&gt;&gt;&gt; .r2<br />Creole Mustard<br /><br /><br />一连串的大于、小于、等于号是冲突标记，这些数据得全部删除才可以提交。其中,<br />   &lt;&lt;&lt;&lt;&lt;&lt;&lt; .mine<br />Salami<br />Mortadella<br />Prosciutto<br />=======<br />是你在冲突区里面做的修改。<br /><br />Sauerkraut<br />Grilled Chicken<br />&gt;&gt;&gt;&gt;&gt;&gt;&gt; .r2<br /> 是别人在冲突区做的修改。<br /><br />在冲突区中，或许你需要和你的同事沟通来安排冲突区的文本内容，如果是程序代码，你需要和同事商量一下，中间的这段代码到底应该是什么样子的。<br /><br />所有冲突区得到合理的解决之后，你就可以提交你的文件了。<br /></p>
<img src ="http://www.blogjava.net/shrode/aggbug/85598.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/shrode/" target="_blank">Shrode Lee</a> 2006-12-05 16:00 <a href="http://www.blogjava.net/shrode/articles/85598.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>