next up previous contents
Next: 存取名單 Up: *RCS 版本控制系統 Previous: 標記符號   Contents

版本比較與整合

  • 為何要比較與整合版本?例如:
    1. 在版本 1.3 發現錯誤( bug );
    2. 回頭找尋錯誤發生的階段,發現錯誤是在版本 1.2;
    3. 在除錯完成後產生了校正版本 1.2.1.1。
    4. 如果版本 1.3 已經完成某個階段性的目標且棄之可惜,則可用整合( merge )的功能將版本 1.2.1.1 和 版本 1.2 的不同處與版本 1.3 整合起來。

    \begin{picture}(150,105)
\setlength{\unitlength}{1mm}
\put(0,20){\dashbox{}(20,...
...,-4)}
\put(80,10){\vector(3,2){10}}
\put(100,25){\vector(1,0){10}}
\end{picture}

  • 比較版本的不同

    \begin{picture}(150,105)
\setlength{\unitlength}{1mm}
\put(0,20){\dashbox{}(20,...
...}
% put(80,10)\{ vector(3,2)\{10\}\}
\put(115,25){\vector(1,0){8}}
\end{picture}

    1. rcsdiff 命令:比較版本內容的差異(包括 IDKeyword),以瞭解兩個版本間哪些被改變。
      [root@dywHome2 ~]# rcsdiff [-kkkkvlr]
      -kk    比較版本內容的差異(不包括 IDKeyword) 
      -kkvl  指定 IDKeyword 的比較方式,預設比較方式。 
      -r     指定欲比較版本
      
    2. 都不指定版本時,rcsdiff 會比較目前工作檔案與主幹( default branch )上最後存入的一個版本。
      [dywang@dywOffice testrcs]$ rcsdiff important.c
      ===================================================================
      RCS file: RCS/important.c,v
      retrieving revision 1.6
      diff -r1.6 important.c
      
    3. 目前工作檔案與任一版本的比較
      [dywang@dywOffice testrcs]$ rcsdiff -r1.3 important.c
      ===================================================================
      RCS file: RCS/important.c,v
      retrieving revision 1.3
      diff -r1.3 important.c
      1a2
      >  * $Id: important.c,v 1.6 2008/03/12 01:51:38 dywang Exp dywang $
      # 1.3 版的第 1 行後,插入了新的第 2 行。
      7a9
      > static char const rcsid[] = "$Id: important.c,v 1.6 2008/03/12 01:51:38
       dywang Exp dywang $";
      # 1.3 版的第 7 行後,插入了新的第 9 行。
      13a16,17
      >     printf("test for comment\n");
      >     printf("%s\n", rcsid);
      # 1.3 版的第 7 行後,插入了新的第 16,17 行。
      
    4. 比較任意兩個版本:
      [dywang@dywOffice testrcs]$ rcsdiff -r1.3 -r1.4 important.c
      ===================================================================
      RCS file: RCS/important.c,v
      retrieving revision 1.3
      retrieving revision 1.4
      diff -r1.3 -r1.4
      13a14
      >     printf("test for comment\n");
      # 1.3 版的第 13 行後,插入了新的第 14 行。
      
    5. 不比較 IdKeyword
      [dywang@dywOffice testrcs]$ rcsdiff -r1.5 -r1.6 -kk important.c
      ===================================================================
      RCS file: RCS/important.c,v
      retrieving revision 1.5
      retrieving revision 1.6
      diff -r1.5 -r1.6
      8a9
      > static char const rcsid[] = "$Id$";
      15a17
      >     printf("%s\n", rcsid);
      
    6. 預設比較 IdKeyword
      [dywang@dywOffice testrcs]$ rcsdiff -r1.5 -r1.6 -kkvl important.c
      ===================================================================
      RCS file: RCS/important.c,v
      retrieving revision 1.5
      retrieving revision 1.6
      diff -r1.5 -r1.6
      2c2
      <  * $Id: important.c,v 1.5 2008/03/07 03:30:31 dywang Exp $
      ---
      >  * $Id: important.c,v 1.6 2008/03/12 01:51:38 dywang Exp $
      8a9
      > static char const rcsid[] = "$Id: important.c,v 1.6 2008/03/12 01:51:38 
      dywang Exp $";
      15a17
      >     printf("%s\n", rcsid);
      

  • 版本合併
    1. rcsmerge 命令:將兩版本內容的差異整合到工作檔案。
      [root@dywHome2 ~]# rcsmerge [-kkkkvlr]
      -kk    整合檔案版本(不包括 IDKeyword) 
      -kkvl  指定 IDKeyword 的整合方式
      -r     整合檔案版本(包括 IDKeyword)
      
    2. 使用指令 rcsmerge:需先取出要寫入的版本
      [dywang@dywOffice testrcs]$ co -l -r1.6 important.c
      RCS/important.c,v  -->  important.c
      revision 1.6 (locked)
      done
      [dywang@dywOffice testrcs]$ rcsmerge -r1.2 -r1.2.1.1 important.c
      RCS file: RCS/important.c,v
      retrieving revision 1.2
      retrieving revision 1.2.1.1
      Merging differences between 1.2 and 1.2.1.1 into important.c
      rcsmerge: warning: conflicts during merge
      
    3. 使用指令 co -j : 在從 archive file 中取出工作檔案時即整合之
      [dywang@dywOffice testrcs]$ co -l -r1.6 -j1.2:1.2.1.1 important.c
      RCS/important.c,v  -->  important.c
      revision 1.6 (locked)
      revision 1.2
      revision 1.2.1.1
      merging...
      merge: warning: conflicts during merge
      done
      
    4. 使用指令 co -j : 一次整合多個檔案的相異處
      [dywang@dywOffice testrcs]$ co -l -r1.6 -j1.2:1.2.1.1,1.3:1.4 important.c
      RCS/important.c,v  -->  important.c
      revision 1.6 (locked)
      revision 1.2
      revision 1.2.1.1
      merging...
      merge: warning: conflicts during merge
      revision 1.3
      revision 1.4
      merging...
      merge: warning: conflicts during merge
      done
      
練習題
  1. 請舉例說明,為什麼 RCS 要比較與整合版本?
    Sol. 1.若在版本 1.3 發現 bug;2.發現錯誤來自版本 1.2;3.除錯完成產生校正版本 1.2.1.1。4.比較版本 1.2.1.1 和版本 1.2 的不同,並與版本 1.3 整合。
  2. 如何使用 rcsdiff 指令,比較目前工作檔案 important.c 與主幹上最後存入的一個版本?
    Sol. rcsdiff important.c 或 rcsdiff -kkvl important.c
  3. 如何使用 rcsdiff 指令,比較目前工作檔案 important.c 與主幹上最後存入的一個版本,且不包括識別關鍵字串?
    Sol. rcsdiff -kk important.c
  4. 如何使用 rcsdiff 指令,比較目前工作檔案 important.c 與版本 1.3?
    Sol. rcsdiff -r1.3 important.c
  5. 如何使用 rcsdiff 指令,比較目前工作檔案 important.c 與版本 1.3,且不包括識別關鍵字串?
    Sol. rcsdiff -r1.3 -kk important.c
  6. 使用 rcsdiff 指令,出現訊息 1a2 代表意義為何?
    Sol. 兩版本比較差異為:第 1 行後,插入了新的第 2 行。
  7. 使用 rcsdiff 指令,出現訊息 13a16,17 代表意義為何?
    Sol. 兩版本比較差異為:第 13 行後,插入了新的第 16 及 17 行。
  8. 如何使用 rcsdiff 指令,比較工作檔案 important.c 版本 1.3 與 1.4?
    Sol. rcsdiff -r1.3 -r1.4 important.c
  9. 如何使用 rcsmerge 指令,將檔案 important.c 版本 1.2 與 1.2.1.1 之差異,整合至目前工作檔案?
    Sol. rcsmerge -r1.2 -r1.2.1.1 important.c
  10. 如何使用 rcsmerge 指令,將檔案 important.c 版本 1.2 與 1.2.1.1 之差異,整合至目前工作檔案,且不包括識別關鍵字串?
    Sol. rcsmerge -r1.2 -r1.2.1.1 -kk important.c
  11. 如何使用 co 指令,將檔案 important.c 版本 1.2 與 1.2.1.1 之差異,在鎖定方式讀出時即整合至目前工作檔案?
    Sol. co -l -j1.2:1.2.1.1 important.c
  12. 如何使用 co 指令,一次將檔案 important.c 版本 1.2 與 1.2.1.1 之差異及 版本 1.3 與 1.4 之差異,在鎖定方式讀出時即整合至目前工作檔案?
    Sol. co -l -j1.2:1.2.1.1,1.3:1.4 important.c


next up previous contents
Next: 存取名單 Up: *RCS 版本控制系統 Previous: 標記符號   Contents
2017-06-14