zoukankan      html  css  js  c++  java
  • svn diff 详解

    UI版:

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

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

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

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

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

    其中红色块表示是冲突,是必须要处理的。如果不处理冲突,那么ctrl+s 会提示 :

    出现unresolved conflicts,即

    这个是必须解决的,否则 冲突会一直保留。 冲突解决完毕,下面的merged部分的红色会消失。  否则表示冲突没有解决,是无法执行 “mark 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.
    ",add(5,10));
      8         printf("15 - 10 = %d.
    ",sub(15,10));
      9         //kris's test
     10         printf("kris: 12 + 28 = %d.
    ",add(12,28));
     11         //sally's test
     12         printf("sally: 60 - 33 = %d.
    ",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.
    ",add(5,10));
      8         printf("15 - 10 = %d.
    ",sub(15,10));
      9         //kris's test
     10         printf("kris: 32 + 28 = %d.
    ",add(32,28));
     11         printf("kris: 15 - 10 = %d.
    ",sub(15,10));
     12         //sally's test
     13         printf("sally: 60 - 33 = %d.
    ",sub(60,33));
     14         return 0;
     15 }
    修改完后,调用svn diff命令,会有如下的输出,下面就说说输出中各部分的意思。
    
    root@letuknowit:/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.
    ",add(5,10));
            printf("15 - 10 = %d.
    ",sub(15,10));
            //kris's test
    -       printf("kris: 12 + 28 = %d.
    ",add(12,28));
    +       printf("kris: 32 + 28 = %d.
    ",add(32,28));
    +       printf("kris: 15 - 10 = %d.
    ",sub(15,10));
            //sally's test
            printf("sally: 60 - 33 = %d.
    ",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.
    ",add(5,10));
            printf("15 - 10 = %d.
    ",sub(15,10));
            //kris's test
    -       printf("kris: 12 + 28 = %d.
    ",add(12,28));
    +       printf("kris: 32 + 28 = %d.
    ",add(32,28));
    +       printf("kris: 15 - 10 = %d.
    ",sub(15,10));
            //sally's test
            printf("sally: 60 - 33 = %d.
    ",sub(60,33));
            return 0;
    这个就是具体的差异情况了,前面的-号表示需要从原始文件中删除的行,+号表示目标文件中将要增加的行,-号开头的部分只属于原始文件,+号开头的部分只属于目标文件,其余的是两者相同的部分。
    
      7   1   1         printf("5 + 10 = %d.
    ",add(5,10));
      8   2   2         printf("15 - 10 = %d.
    ",sub(15,10));
      9   3   3         //kris's test
     10   4     -       printf("kris: 12 + 28 = %d.
    ",add(12,28));
     11       4 +       printf("kris: 32 + 28 = %d.
    ",add(32,28));
     12       5 +       printf("kris: 15 - 10 = %d.
    ",sub(15,10));
     13   5   6         //sally's test
     14   6   7         printf("sally: 60 - 33 = %d.
    ",sub(60,33));
     15   7   8         return 0;
    为了进一步了解@@ -7,7 +7,8 @@的意思,上面加上了行号等信息,第一列的数字是行号,后面两列的数字表示第几行。经过标注可以清晰的看出原始文件第7行开始的7行和目标文件第7行开始的8行内容了。
  • 相关阅读:
    Python学习--not语句
    【图论】有向无环图的拓扑排序
    算法精解:DAG有向无环图
    Python xrange() 函数
    自然语言处理课程(二):Jieba分词的原理及实例操作
    Jieba分词原理与解析
    ios面试题整理
    OC语言Block和协议
    OC内存管理
    IOS 开发-- 常用-- 核心代码
  • 原文地址:https://www.cnblogs.com/FlyAway2013/p/5633331.html
Copyright © 2011-2022 走看看