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.\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命令,會有如下的輸出,下面就說說輸出中各部分的意思。

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.\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行內容了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM