next up previous contents
Next: 標記符號 Up: *RCS 版本控制系統 Previous: RCS 基本功能   Contents

識別關鍵字串

  • RCS 提供識別關鍵字串( IdKeyword ),幫助使用者產生各版本的相關資訊, 這些識別關鍵字串都是用符號 $ 夾住以供 RCS 辨識。
  • 各 IdKeyword 代表意義:
    keyword     相關資訊
    ----------------------------------------------------------
    $Author$    寫入該版本的作者
    $Date$      日期和時間( UTC ) 
    $Header$    RCS 檔名(含路徑)+版本(Revision)+日期(Date)
                +作者(Author)+狀態(State)+正 lock 該檔案者(Locker)
    $Id$        除 RCS 檔名不含路徑外,餘與 $Header$ 相同
    $Locker$    目前 lock 住該檔案者,如未 lock ,則空白
    $Log$       關於該版本的 log 的訊息
    $Name$      標記名稱
                例如:執行 co -r first,則 $Name$ 展開為 `Name: first'. 
    $RCSfile$   RCS 檔名(不含路徑)
    $Revision$  版本序號 
    $Source$    RCS 檔名(含路徑)
    $State$     狀態:Exp (for experimental), Stab (for stable), 
                     and Rel (for released)
    
  • IdKeyword 的使用:通常加在程式檔案的檔頭
    1. 讀出並鎖定 important.c。
      [dywang@dywOffice testrcs]$ co -l important.c
      RCS/important.c,v  -->  important.c
      revision 1.4 (locked)
      done
      
    2. 在 important.c 的檔頭加上 $Id$
      [dywang@dywOffice testrcs]$ vi important.c
      [dywang@dywOffice testrcs]$ cat important.c
      /*
       * $Id$
         This is an important file for managing the project.
         It implements the canoncial "Hello World" program.
      */
      以下省略
      
    3. 將 important.c 寫入 archive file。
      [dywang@dywOffice testrcs]$ ci -m"test for IdKeyword" important.c
      RCS/important.c,v  <--  important.c
      new revision: 1.5; previous revision: 1.4
      done
      
    4. 再將 important.c 從 archive file 讀出,則 $Id$ 代表的相關資訊,會被加在 $ 符號裡面。
      [dywang@dywOffice testrcs]$ co -l important.c
      RCS/important.c,v  -->  important.c
      revision 1.5 (locked)
      done
      [dywang@dywOffice testrcs]$ cat important.c
      /*
       * $Id: important.c,v 1.5 2008/03/07 03:30:31 dywang Exp dywang $
         This is an important file for managing the project.
         It implements the canoncial "Hello World" program.
      */
      以下省略
      # RCS 檔名(不含路徑):important.c,v
      # 版本(Revision):1.5
      # 日期與時間(Date):2008/03/07 03:30:31
      # 作者(Author):dywang
      # 狀態(State):Exp
      # 目前 lock 住該檔案者(locker):dywang
      

  • RCS 如何來解釋各個識別關鍵字串( IdKeyword )
    Option 解釋方式                 說明
    ----------------------------------------------------- 
    -kkv   keyword+相關資訊         default 的解釋方式
    -kkvl  keyword+相關資訊+locker  如 -kkv 再加上 locker
    -kk    keyword                 只顯示 keyword 不加解釋 
    -kv    相關資訊                 只顯示相關資訊不加 keyword
    

    1. 以 -kk 選項登出檔案( unlock )
      [dywang@dywOffice testrcs]$ co -kk important.c
      RCS/important.c,v  -->  important.c
      revision 1.5
      done
      [dywang@dywOffice testrcs]$ cat important.c
      /*
       * $Id$
         This is an important file for managing the project.
         It implements the canoncial "Hello World" program.
      */
      以下省略
      
    2. 以 -kv 選項登出檔案( unlock )
      [dywang@dywOffice testrcs]$ co -kv important.c
      RCS/important.c,v  -->  important.c
      revision 1.5
      done
      [dywang@dywOffice testrcs]$ cat important.c
      /*
       * important.c,v 1.5 2008/03/07 03:30:31 dywang Exp
         This is an important file for managing the project.
         It implements the canoncial "Hello World" program.
      */
      以下省略
      

  • ident 命令:找出檔案中之 IdKeyword。
    1. IdKeyword 只存在於註解中,則編譯完之目標檔 important.o 及可執行檔 important 中不會有 IdKeyword
      [dywang@dywOffice testrcs]$ gcc -c important.c; gcc -o important important.o
      [dywang@dywOffice testrcs]$ ident important.c important.o important
      important.c:
           $Id: important.c,v 1.5 2008/03/07 03:30:31 dywang Exp dywang $
      
      important.o:
      ident warning: no id keywords in important.o
      
      important:
      ident warning: no id keywords in important
      
    2. 編輯程式 important.c,加入字串變數 rcsid[] = "$Id$"
      [dywang@dywOffice testrcs]$ vi important.c
      [dywang@dywOffice testrcs]$ cat important.c
      /*
       * $Id: important.c,v 1.5 2008/03/07 03:30:31 dywang Exp dywang $
         This is an important file for managing the project.
         It implements the canoncial "Hello World" program.
      */
      
      #include <stdlib.h>
      #include <stdio.h>
      static char const rcsid[] = "$Id$";
      
      int main()
      {
          printf("Hello World\n");
          printf("This is an extra line added later\n");
          printf("test for lock\n");
          printf("test for comment\n");
          printf("%s\n", rcsid);
          exit(EXIT_SUCCESS);
      }
      
    3. 寫入 important.c,v 後再讀出,得到 $Id$ 之相關資訊
      [dywang@dywOffice testrcs]$ ci important.c
      RCS/important.c,v  <--  important.c
      new revision: 1.6; previous revision: 1.5
      enter log message, terminated with single '.' or end of file:
      >> test ident on object files
      >> .
      done
      [dywang@dywOffice testrcs]$ co -l important.c
      RCS/important.c,v  -->  important.c
      revision 1.6 (locked)
      done
      [dywang@dywOffice testrcs]$ cat important.c
      /*
       * $Id: important.c,v 1.6 2008/03/12 01:51:38 dywang Exp dywang $
         This is an important file for managing the project.
         It implements the canoncial "Hello World" program.
      */
      
      #include <stdlib.h>
      #include <stdio.h>
      static char const rcsid[] = 
      	"$Id: important.c,v 1.6 2008/03/12 01:51:38 dywang Exp dywang $";
      
      int main()
      {
          printf("Hello World\n");
          printf("This is an extra line added later\n");
          printf("test for lock\n");
          printf("test for comment\n");
          printf("%s\n", rcsid);
          exit(EXIT_SUCCESS);
      }
      
    4. 編譯 important.c,產生目標檔 important.o 及可執行檔 important。
      [dywang@dywOffice testrcs]$ gcc -c important.c; gcc -o important important.o
      
    5. IdKeyword 字串已被結合到目標檔 important.o 及可執行檔 important 之中。以指令 ident 查看:
      [dywang@dywOffice testrcs]$ ident important.c important.o important
      important.c:
           $Id: important.c,v 1.6 2008/03/12 01:51:38 dywang Exp dywang $
           $Id: important.c,v 1.6 2008/03/12 01:51:38 dywang Exp dywang $
      
      important.o:
           $Id: important.c,v 1.6 2008/03/12 01:51:38 dywang Exp dywang $
      
      important:
           $Id: important.c,v 1.6 2008/03/12 01:51:38 dywang Exp dywang $
      

  • make 配合 RCS 產生可執行檔
    1. 刪除 important.c
      [dywang@dywOffice testrcs]$ rm -f important.c
      
    2. 若 important.c 不存在,則 make 會利用 RCS,從 important.c,v 讀出最新版本,產生 important.c,並進行編譯。
      [dywang@dywOffice testrcs]$ make important
      co  RCS/important.c,v important.c
      RCS/important.c,v  -->  important.c
      revision 1.5
      done
      cc    -c -o important.o important.c
      cc   important.o   -o important
      rm important.o important.c
      
    3. make 在編譯產生可執行檔 important 後,再刪除 important.o 及 important.c 檔案。
      [dywang@dywOffice testrcs]$ ll
      total 20
      -rw-r--r-- 1 dywang users   21 Mar  7 10:16 commentfile
      -rwxr-xr-x 1 dywang users 6850 Mar 11 15:23 important*
      -rw-r--r-- 1 dywang users  341 Mar  7 11:29 important.c~
      drwxr-xr-x 2 dywang users 4096 Mar 11 15:23 RCS/
      
練習題
  1. RCS 識別關鍵字串,使用什麼符號夾住以供 RCS 辨識?
    Sol. $
  2. RCS 識別關鍵字串 $Author$,產生什麼資訊?
    Sol. 寫入該版本的作者
  3. RCS 識別關鍵字串 $Date$,產生什麼資訊?
    Sol. 日期和時間( UTC )
  4. RCS 識別關鍵字串 $Header$,產生什麼資訊?
    Sol. RCS 檔名(含路徑)+版本(Revision)+日期(Date)+作者(Author)+狀態(State)+正鎖住該檔案者(Locker)
  5. RCS 識別關鍵字串 $Id$,產生什麼資訊?
    Sol. RCS 檔名(不含路徑)+版本(Revision)+日期(Date)+作者(Author)+狀態(State)+正鎖住該檔案者(Locker)
  6. RCS 識別關鍵字串 $Locker$,產生什麼資訊?
    Sol. 目前鎖住該檔案者,如未鎖住,則空白
  7. RCS 識別關鍵字串 $Log$,產生什麼資訊?
    Sol. 關於該版本的附註訊息
  8. RCS 識別關鍵字串 $Name$,產生什麼資訊?
    Sol. 標記名稱
  9. RCS 識別關鍵字串 $RCSfile$,產生什麼資訊?
    Sol. RCS 檔名(不含路徑)
  10. RCS 識別關鍵字串 $Revision$,產生什麼資訊?
    Sol. 版本序號
  11. RCS 識別關鍵字串 $Source$,產生什麼資訊?
    Sol. RCS 檔名(含路徑)
  12. RCS 識別關鍵字串 $State$,產生什麼資訊?
    Sol. 狀態(實驗、穩定或釋出)
  13. RCS 識別關鍵字串通常加在什麼地方?
    Sol. 程式檔案的檔頭
  14. 在程式中加入 RCS 識別關鍵字串 $Id$,寫入管理檔案後再讀出,出現 $Id: important.c,v 1.5 2008/03/07 03:30:31 dywang Exp dywang $,其中 important.c,v 表示什麼訊息?
    Sol. RCS 檔名(不含路徑)為 important.c,v
  15. 在程式中加入 RCS 識別關鍵字串 $Id$,寫入管理檔案後再讀出,出現 $Id: important.c,v 1.5 2008/03/07 03:30:31 dywang Exp dywang $,其中 1.5 表示什麼訊息?
    Sol. 版本序號 1.5
  16. 在程式中加入 RCS 識別關鍵字串 $Id$,寫入管理檔案後再讀出,出現 $Id: important.c,v 1.5 2008/03/07 03:30:31 dywang Exp dywang $,其中 2008/03/07 03:30:31 表示什麼訊息?
    Sol. 日期 2008/03/07,時間 03:30:31
  17. 在程式中加入 RCS 識別關鍵字串 $Id$,寫入管理檔案後再讀出,出現 $Id: important.c,v 1.5 2008/03/07 03:30:31 dywang Exp dywang $,其中第一次出現之 dywang 表示什麼訊息?
    Sol. 作者(Author)為 dywang
  18. 在程式中加入 RCS 識別關鍵字串 $Id$,寫入管理檔案後再讀出,出現 $Id: important.c,v 1.5 2008/03/07 03:30:31 dywang Exp dywang $,其中 Exp 表示什麼訊息?
    Sol. 版本狀態為實驗階段
  19. 在程式中加入 RCS 識別關鍵字串 $Id$,寫入管理檔案後再讀出,出現 $Id: important.c,v 1.5 2008/03/07 03:30:31 dywang Exp dywang $,其中第二次出現之 dywang 表示什麼訊息?
    Sol. 目前鎖住該檔案者為 dywang
  20. 從 RCS 管理檔案中讀出程式 important.c 時,如何以 keyword+相關資訊,顯示識別關鍵字串?
    Sol. co -kkv important.c
  21. 從 RCS 管理檔案中讀出程式 important.c 時,預設之識別關鍵字串解釋方式為何?
    Sol. co -kkv important.c,以 keyword+相關資訊,顯示識別關鍵字串。
  22. 從 RCS 管理檔案中讀出程式 important.c 時,如何以 keyword+相關資訊+locker,顯示識別關鍵字串?
    Sol. co -kkvl important.c
  23. 從 RCS 管理檔案中讀出程式 important.c 時,如何只以 keyword,顯示識別關鍵字串?
    Sol. co -kk important.c
  24. 從 RCS 管理檔案中讀出程式 important.c 時,如何只以相關資訊,顯示識別關鍵字串?
    Sol. co -kv important.c
  25. 若識別關鍵字串只存在於程式 important.c 之註解中,則編譯完之目標檔 important.o 及可執行檔 important 中會不會有識別關鍵字串之相關資訊?
    Sol. 不會
  26. 若在程式 important.c 中加入變數 char rcsfile[] = "$RCSfile$";,寫入管理檔案後,再以預設解釋方式讀出、編譯,則目標檔 important.o 及可執行檔 important 中之之變數 rcsfile[] 內容為何?
    Sol. $RCS important.c,v $
  27. 若 RCS 管理檔案 important.c,v 存在,但程式 important.c 並未讀出,是否可以直接使用 make 指令編譯可執行檔 important?為什麼?
    Sol. 可以。make 會從 important.c,v 讀出最新版本,產生 important.c,並進行編譯,在編譯產生可執行檔 important 後,再刪除 important.o 及 important.c 檔案。


next up previous contents
Next: 標記符號 Up: *RCS 版本控制系統 Previous: RCS 基本功能   Contents
2017-06-14