svn diff 详解

UI版:

如果多人编辑同一段代码,常常容易出现冲突的情况:

如果出现冲突,我们如何解决他呢?

1 可以选择使用自己的文件mime file,也可以使用 他们的文件 their file

2 解决冲突, 而不是逃避。 在上图 Mergerd 部分直接编辑即可:

编辑完毕,然后 选择“Marked as resolved” 即可

圆圈表示空行,

— 表示左边的版本的内容

+ 表示右边的版本的内容

<=> 表示移动的内容, 这个其实没什么用

灰色部分表示原来是没有的。

(左边)褚红色的表示被修改的内容,——   这里一定是修改而不是新增 ———— 这个只会出现在左边,也就是被修改的部分。

橘黄色的表示 空行或空的内容

黄色(或者不知道是否可以说是浅黄色)的表示 新增或修改的内容。 —— 没错, 这回包括了新增 和修改。

浅紫色表示 修改的行中, 没有发生变的部分 —— 新增的不会有浅紫色

白色, 当然表示没有发生任何变化的部分

红色: 表示冲突, 通常,左右两边都会出现红色。

总结, 除了黑色的字体颜色之外,

左边(原文件,或者说新文件) 可能出现的颜色有:

上面提及的颜色都可能出现

右边(新文件) 可能出现的颜色有:

白色

黄色  黄色,一律表示发生变化的内容, 以单词为单位(这里面的单词是java的变量名), 以 . , ; /  ‘;" 为分隔符。

浅紫色

灰色

红色

可以看到, svn 的diff 功能其实是不完美的, 比较,常常出现不准确的情况, 比如

下面是 文本版diff 说明,参照 : http://www.xuebuyuan.com/2028115.html


在冲突解决一节结束后,我们的main.c文件的内容如下

  1 #include <stdio.h>
  2 #include "add.h"
  3 #include "sub.h"
  4
  5 int main()
  6 {
  7         printf("5 + 10 = %d.\n",add(5,10));
  8         printf("15 - 10 = %d.\n",sub(15,10));
  9         //kris‘s test
 10         printf("kris: 12 + 28 = %d.\n",add(12,28));
 11         //sally‘s test
 12         printf("sally: 60 - 33 = %d.\n",sub(60,33));
 13         return 0;
 14 }
下面,我们做一些修改,具体如下

  1 #include <stdio.h>
  2 #include "add.h"
  3 #include "sub.h"
  4
  5 int main()
  6 {
  7         printf("5 + 10 = %d.\n",add(5,10));
  8         printf("15 - 10 = %d.\n",sub(15,10));
  9         //kris‘s test
 10         printf("kris: 32 + 28 = %d.\n",add(32,28));
 11         printf("kris: 15 - 10 = %d.\n",sub(15,10));
 12         //sally‘s test
 13         printf("sally: 60 - 33 = %d.\n",sub(60,33));
 14         return 0;
 15 }
修改完后,调用svn diff命令,会有如下的输出,下面就说说输出中各部分的意思。

[email protected]:/home/kris/calc/trunk# svn diff main.c
Index: main.c
===================================================================
--- main.c      (revision 8)
+++ main.c      (working copy)
@@ -7,7 +7,8 @@
        printf("5 + 10 = %d.\n",add(5,10));
        printf("15 - 10 = %d.\n",sub(15,10));
        //kris‘s test
-       printf("kris: 12 + 28 = %d.\n",add(12,28));
+       printf("kris: 32 + 28 = %d.\n",add(32,28));
+       printf("kris: 15 - 10 = %d.\n",sub(15,10));
        //sally‘s test
        printf("sally: 60 - 33 = %d.\n",sub(60,33));
        return 0;
Index: main.c

svn diff可以查看当前工作拷贝中所有的被修改的文件,对于每个文件的diff输出部分由Index: 文件名的形式进行区分。
等于号后面的内容就是关于main.c文件的diff情况了。

--- main.c      (revision 8)
+++ main.c      (working copy)
---打头的是原始文件,也就是版本库中的最新版本,或者理解为修改前的文件
+++ 打头的是目标文件,这个就是你修改后的版本

@@ -7,7 +7,8 @@
这里的-和+分别表示原始文件和目标文件,7,7表示从第7行开始的7行,-7,7就是原始文件的从第7行开始的7行内容,+7,8的意思类似,表示目标文件从第7行开始的8行内容。结合起来理解就是:
目标文件从第7行开始的8行内容和原始文件的从第7行开始的7行内容之间存在差异

        printf("5 + 10 = %d.\n",add(5,10));
        printf("15 - 10 = %d.\n",sub(15,10));
        //kris‘s test
-       printf("kris: 12 + 28 = %d.\n",add(12,28));
+       printf("kris: 32 + 28 = %d.\n",add(32,28));
+       printf("kris: 15 - 10 = %d.\n",sub(15,10));
        //sally‘s test
        printf("sally: 60 - 33 = %d.\n",sub(60,33));
        return 0;
这个就是具体的差异情况了,前面的-号表示需要从原始文件中删除的行,+号表示目标文件中将要增加的行,-号开头的部分只属于原始文件,+号开头的部分只属于目标文件,其余的是两者相同的部分。

  7   1   1         printf("5 + 10 = %d.\n",add(5,10));
  8   2   2         printf("15 - 10 = %d.\n",sub(15,10));
  9   3   3         //kris‘s test
 10   4     -       printf("kris: 12 + 28 = %d.\n",add(12,28));
 11       4 +       printf("kris: 32 + 28 = %d.\n",add(32,28));
 12       5 +       printf("kris: 15 - 10 = %d.\n",sub(15,10));
 13   5   6         //sally‘s test
 14   6   7         printf("sally: 60 - 33 = %d.\n",sub(60,33));
 15   7   8         return 0;
为了进一步了解@@ -7,7 +7,8 @@的意思,上面加上了行号等信息,第一列的数字是行号,后面两列的数字表示第几行。经过标注可以清晰的看出原始文件第7行开始的7行和目标文件第7行开始的8行内容了。
时间: 2024-10-12 12:07:38

svn diff 详解的相关文章

Linux SVN 命令详解(zz)

Linux下常用SVN命令 2012-04-02 11:46:00 标签:服务器 目录 Linux checkout linux系统 1.将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/domain  --username qinxiaohui 简写:svn co 2.往版本库中添加新的文件 svn add file 例如:svn add test.php(添加test.

SVN功能详解

SVN功能详解 TortoiseSVN是windows下其中一个非常优秀的SVN客户端工具.通过使用它,我们可以可视化的管理我们的版本库.不过由于它只是一个客户端,所以它不能对版本库进行权限管理. TortoiseSVN不是一个独立的窗口程序,而是集成在windows右键菜单中,使用起来比较方便. TortoiseSVN每个菜单项都表示什么意思 01.SVN Checkout(SVN取出)点击SVN Checkout,弹出检出提示框,在URL of repository输入框中输入服务器仓库地址

SVN命令详解

一下内容转载于:http://blog.chinaunix.net/space.php?uid=22976768&do=blog&id=1640924.这个总结的很好~ windows下的TortoiseSVN是资源管理器的一个插件,以覆盖图标表示文件状态,几乎所以命令都有图形界面支持,比较好用,这里就不多说.主要说说linux下svn的使用,因为linux下大部分的操作都是通过命令行来进行,所以必须得掌握linux下svn的常用指令.当然linux下也有模仿TortoiseSVN的lin

SVN 命令详解

服务器端命令 svnadmin create [路径]    #创建一个新的版本库 svnadmin hotcopy        #版本库备份 svnadmin lslocks        #打印锁描述 svnserve -d          #以守护方式启动 svnserve --listen-port=3690      #指定端口,默认是3690 svnserve -r /home/        #指定版本库路径 客服端访问格式 file:///    #直接访问本地磁盘的版本库

linux svn命令详解

检测是否安装svn:svnserve --version svn服务的关闭:killall svnserve 创建svn库:svnadmin create /opt/svn/repos 配置自动启动:把svnserve -d -r /opt/svn/repos 放在/etc/rc.d/rc.local最后一行 启动svn: svnserve -d -r /opt/svn/repos 如果已经有svn在运行,可以换一个端口运行:svnserve -d -r /opt/svn/repos --lis

Linux SVN 命令详解

1.将文件checkout到本地目录 svn checkout path(path是服务器上的目录)   例如:svn checkout svn://192.168.1.1/pro/domain    简写:svn co 2.往版本库中添加新的文件 svn add file   例如:svn add test.php(添加test.php)   svn add *.php(添加当前目录下所有的php文件) 3.将改动的文件提交到版本库 svn commit -m "LogMessage"

从本地安装Eclipse的SVN插件详解

由于绝大多数Eclipse插件的Update Site服务器位于国外,甚至无法访问,再加上Eclipse自身缓慢的下载速度,导致在线安装Eclipse插件耗费的时间非常多.因此,一般情况下,我们建议先通过加速下载工具手动下载插件安装包,然后从本地安装Eclipse插件. 从本地安装Eclipse插件的方法有多种,下面我们根据难度从易到难一一为大家介绍. 1.以图形化方式从本地安装插件 Eclipse为我们提供了以图形化方式本地安装插件的方法. 首先,点击Eclipse菜单栏的[Help]->[I

SVN三部曲之SVN设置详解深入

想知道不同的设置是干什么用的,你只需将鼠标指针在编辑框/选项框上停留一秒钟...一个帮助提示气泡就会弹出来. 常规设置 图 4.68. 设置对话框,常规设置页面 这个对话框允许你指定自己喜欢的语言,同时也可做那些与Subversion相关的特殊设置. 语言 Selects your user interface language. Of course, you have to install the corresponding language pack first to get another

SVN使用详解

SVNsvn = 版本控制 + 备份服务器.(一)SVN每上传一个服务器档案内容,它会自动的赋予每次的变更一个版本,我们用来存放上传档案的地方叫做Repository,第一次有一个新增档案的动作,将想要备份的档案放到Repository上面,日后我们有任何修改是都可以上传到Repository上面,上传已经存在且修改过的档案叫做commit,每次上传都赋予它一个新的版本,同时,也会把它上传的时间记录下来,日后需要从Repository下载曾经提交的档案,可以提取最新版本和之前的任何一个版本,还可