ci 將檔案放入 RCS 的控制下。
co 將檔案取出。
rcs 設定或是改變 RCS 檔案的參數。
有兩個可提供 RCS 檔案資訊的指令:
ident 從 RCS 檔案中取出關鍵字之值。
rlog 顯示某個 RCS 檔的改版概要說明。
要比較 RCS 檔可用下列指令:
merge 將兩個檔案的修改內容併入第三個檔 案。
rcsdiff 印出兩個版本之間的不同。
rcsmerge 將兩個 RCS 檔案中的修改內容併入第三個 RCS 檔案。
下列指令用來管理組態。不過因為這些指令非必要指令,所以有時不會安裝。
rcsclean 將未改變的工作檔案刪除。
rcsfreeze 將設定組態的檔案予以標記。
基本操作方式
一般而言,RCS 檔案會放在 RCS 目錄中。所以第一步就是 :
mkdir RCS
接著,只要把所要放入 RCS 控制之下的檔案以以下指令加入即可:
ci file
這樣會在 RCS 目錄中產生一個叫做 file,v 的檔案。file,v 稱為 RCS 檔案。這個檔案內會儲存以後該檔案所有的更動資 料。第一次執行 ci 時,系統會要求輸入該檔案的描述。然後將檔案放入 RCS 檔中,然後將版號設定為 1.1。
若要編輯新的版號,則用下列指令將檔案取出:
co -l file
這樣會使得 RCS 將檔案從 RCS 檔中取出來。使用者必須將檔案用 l 選項鎖定,這樣才能確定使用者可對該檔案進行讀寫。這個檔案稱為工作檔。每次完成編輯後可以 用 ci 指令 將檔案再送回 RCS 中:
ci file
這次,系統會提示使用者輸入所修改的紀錄,然後版號就設定為 1.2。注意將檔案送入 RCS後,通常工作檔就會刪除。若要取出唯讀的工作 檔,則不要加上 -l 選項來鎖定它:
co file
通常若要將檔案印出來或只是單純做搜尋或編譯用時,就可用這個指令取出檔案。若要直接取用 上一個 ci/co,則可用下列指令:
ci -u file
這樣會把檔案放入 RCS 中,然後立刻取出一份唯讀的工作檔案。要比較工 作檔案和 RCS 中最新版本的檔案,可用下列指令:
rcsdiff file
另一個有用的指令就是 rlog,可用來顯示記錄大綱。系統管理員可以用 rcs 指令來建立 RCS系統的預設行為。
一般 RCS 規格
本節討論重點如下:
. 關鍵字替代
. 版本編號
. 指定日期
. 指定狀態
. 標準選項和環境變數
-------------------------------------------------
關鍵字替代
RCS 可以將關鍵字變數放入工作檔案中。這些變數接著會展開成版本註記。使用者可將這些註記當作內含的註解,或是輸出時所印出的文字字串。 要從關鍵字替代來產生版本註記,請依下列步驟進行:
1. 在工作檔案中打入下列任一關鍵字。
2. 將檔案放入 RCS 中。
3. 將檔案再次取出。取出時,co 指令會將每個關鍵字展開成其對應的值。也就是說,co
會將:
$keyword$
替代成
$keyword:value$
4. 接下來的每次放入和取出的指令,都會將每個關鍵字 做更新的動作。除非指定其動作,否則新的值會取代原來的值。
注意:RCS 第 5 版中,許多指令都加入了 -k 選項,可在關鍵字替代上更有彈性。
關鍵字
$Author$ 將版本放入 RCS 的使用者名稱。
$Date$ 放入 RCS 時的日期與時間。
$Header$ 檔案標頭,包括了 RCS 檔案的完整路徑、版本號碼、日期、作者、狀態(若鎖定時,還包括鎖定本檔案的使用者名 稱)。
$Id$ 和$ Header$ 一樣,但不包括檔案的完整路徑。
$Locker$ 鎖定本版本的使用者名稱。若檔案未鎖定,這個值就保持空白。
$Log$ 這個訊息是在放入 RCS 時所打入的檔案描述。字串之前還加上了 RCS 檔名、版本號碼、作者和日期時間。記錄訊息會累 積而不會覆寫過去。
$RCSfile$ RCS 檔案的名稱,不包括其路徑。
$Rivision$ 指定的版本號碼。
$Source$ RCS 檔案名稱,包括其路徑。
$State$ 以 ci 或 rcs 指令的 -s 選項所指定的狀態。
範例
先假設 /projects/new/chater3 這個檔案是由 daniel 這位使用者放入 RCS 後又取出的。下列為本檔案的第二個版本中所有的 關鍵字替代的值:
<<<<<< code >>>>>>
版本編號
若不指定時,RCS 會假設所使用的版本皆為最新的版本。 有些指令包括了 -r 選項可用來指定所要使用的版本號碼。也有些指令可以接受版本號碼作為參數。(這些指令在指令解說中,版本號碼會以 [R] 表示)版本號碼包括四個部分:release、level、branch 和 sequence。(譯按:在此這些名詞不做翻譯,以免造成困 擾)但最常用的是 release 和 level。比如,可用下列指令取出 1.4 版的檔案:
co -l -r1.4 ch01
在重新放入時,新的版本號碼就是 1.5 版。但若編輯的檔案放入時,要指定為下一個 release時,可使用下列指令:
ci -r2 ch01
這樣就會產生 2.1 版。還可以產生前期版本的 branch。下列指令會產生 1.4.1.1 版:
ci -r1.4.1 ch01
版本號碼不只可用號碼來表示。也可將字串設定為版本號碼(雖然這樣一樣稱為「號碼」),只要 透過 ci 或 rcs 指令的 -n 選項即可。也可以將這個字串放入任何可接受版本 號碼當作參數的指令來使用。比如說,使用者可將所有的程式碼都用同一個標籤放入 RCS 中,而不管目前版本號碼為何:
ci -u -nPrototype *.c
另外,RCS 5.6 版中可以讓使用者指定 $,表示版本號碼將從工作檔案中的關鍵字取得。比 如:
rcsdiff -r$ ch01
這個指令會將 ch01 和放入 RCS 的那個版本做比較。也可以將符號和名稱結合。下 面的指令:
rcs -nDraft:$ ch*
會將檔案名稱加上一個字串。
-------------------------------------------------
指定日期
不同的版本會記錄存入 RCS 的時間和日期。有許多關鍵字字串包括了日期和時間。ci、co和 rlog 也有選項可接受時間和日期。RCS 預設使用下列的日期時間格式:
1995/10/16 02:00:00 (年 / 月 / 日 時)
預設的時區為格林威治時間 GMT,也稱為 UTC。日期可以指定為任意格式。這樣就可以指定使用 多種不同的日期格式。下列為幾種常用的格式:
假設今天時間為(1995 年十月 16 日)
<<<<<< code >>>>>>
大寫或小寫的 lt 表示本地時間。第三行為 ctime 格式(加上 LT)。第四行是 date 指令的格式。
-------------------------------------------------
指定狀態
在一些狀況之下(尤其是程式設計的環境下),我們必須知道一些版本的狀態。 RCS 檔案有一個字串描述其狀態。預設的狀態為 Exp(實驗狀態)。其他包括了 Stab(stable) 或是 Rel(release)。這些字串通常是使用者自行定義的,對程式內部 來說並沒有意義。有些關鍵字字串在值中儲存其狀態。另外,ci、co、rcs 和 rlog 都可在選項中加上狀態作為參數。
-------------------------------------------------
標準選項
RCS 5.6 版定義了一個環境變數 RCSINIT,這個環境變數是用來設定 RCS 指令所使用的預設選項。若將 RCSINIT 設定為以空白隔開的選項列,則在使用任何 RCS 指令時,這些選項都會先加在使用者所指定的選項 之前。有三個常用的選項可放入 RCSINIT 中:-q、-V 和 -x。這些可視為是標準選項,因為大部分的 RCS 指令都可用這些選項。請注意,V 在 RCS 第 5 版後才有,而 -x 則在 RCS 5.6 以後才有。
-q[R] 不輸出診斷訊息。R 指定檔案的版本號碼。
-Vn 模擬 RCS 第 n 版。若要在不同系統之間交換檔案,則這個選項十分實用。n 之值可以是 3、4 或 5。
-xsuffixes 指定不同的檔名後置字串。每個後置字串之間用「/」來分隔開。在UNIX作業系統中,RCS檔案名稱通常是以 「,v」 做結尾。而 -x 選項可以讓一些不能使用「,」字元作為檔名的系統也使用 RCS。
比如,若要將工作檔案放入 RCS 系統中時:
ci -x,v/ ch01 (第二個後置字串為空白)
會以下列順序搜尋 RCS 檔:
RCS/ch01,v
ch01,v
RCS/ch01
-------------------------------------------------
SCCS 轉換指南
RCS 中有許多功能和 SCCS 中的指令相同。下面是一個很簡單的對照表:
SCCS RCS
<<<<<>>>>> ------------------------------------------------- 指令解說 關於關鍵字的語法、版本號碼、日期、狀態和標準選項,請見前面的說明。 -------------------------------------- ci [options] files 將檔案放入 RCS 中。ci 會將指定的工作檔案 files 放入其對應的 RCS 檔案中。一般來說,ci會在檔案存入後將工作檔案刪除。若沒有 RCS 檔案,則工作檔就是第一個版本。這種情況下,會建立 RCS 檔案並提示使用者鍵入該檔案的說明。若有 RCS 檔案,ci 會將版本號碼更新,然後提示使用者輸入更動的紀 錄。 RCS 5.6 版中,若工作檔案沒有更動,則會恢復成上一個版本號碼。一些較舊的 RCS 中,最後可能要存入一個沒有更動過的新版本。 -u、-l 和 -r 三個選項一次只能使用一個。-u 選項會產生一個唯讀的工作檔,可以用作列印或是搜 尋、編譯等工作。-l 則先存入檔案後馬上取出檔案,並加以鎖定。這可以讓使用者更新版本,然後繼續編輯的動作。(比如長時間編輯時)-r 可以指定不同的 release 號碼。ci 可以接受標準的 -q、-V 和 -x 選項。 Options -d[date] 將目前存入的檔案日期標為 date,若不指定 date,則使用前次修改時的日期時間。 -f[R] 不管是否有更動都將檔案存入 RCS 中。 -I[R] 互動模式;不論輸入是否為終端機,都提示使用者輸入(比如在指令的 pipe 中)。-I 在 RCS 第 5 版後才有。 -k[R] 利用檔案中的關鍵字設定版本號碼、產生日期、狀態和作者,而不經由環境變數取得。-k 在發展大型程式時,若要發表新的版本時十分實 用。用檔案內的關鍵字串就可以對檔案的屬性進行設定。 -l[R] 將檔案存入後執行 co -l。這樣會產生一份鎖定的工作檔案,版本號碼為下 一版。 -mmsg 用 msg 字串當作所有存入檔案的紀錄訊息。存入多個檔案 時,ci 詢問 是否重複使用上一個檔案的紀錄訊息。-m 選項則可跳過詢問過程。 -M[R] 設定工作檔案的修改時間為取出版本 的修改時間。-M 選項可能會造成 make 上的困擾,需小心使用。此功能在 RCS 5.6 以後才有。 -nname 將 name 設定為下一個版本號碼 -Nname 和 -n 一樣,但取代上一個 name。 -r[R] 將檔案以 R 為版本號碼存入。 -sstate 設定存入檔案的狀態。 -tfile 將 RCS 檔案的描述以 file 的內容代替。在 RCS 第 5 版中,只有在建立新的 RCS 檔案時可用。 -t-string 將 RCS 檔案描述以 string 字串代替。在 RCS 第 5 版中,只有在建立新的 RCS檔案時可用。 -u[R] 存入檔案後,執行 co -u。這樣會產生一個唯讀的工作檔案。 -wuser 將存入的檔案作者欄設定為 user。 範例: 將每一個檔案用同一個記錄訊息存入: ci -m'First round edits' chap* 存入 prog.c 的更動,然後保留一份唯讀的工作檔案。 ci -u prog.c 重新設定 level 為 2;將 2.1 版指定為 Prototype: ci -r2 -nPrototype prog.c -------------------------------------- co [options] files 取出之前放入 RCS 之檔案,並將檔案放入工作檔案中。若指定 -p 選項則輸出到標準輸出上。如果要編輯檔案後再存入,則要指定 -l 選項來鎖定這個檔案。co 可以接受標準選項 -q、-V和 -x。 Options -ddate 取出 date 之前的最新版本。 -f[R] 強迫覆寫工作檔案。 -I[R] 互動模式;就算標準輸入不是終端機 也會提示使用者輸入。(RCS 第五版以後才有) -jR2:R3 和 rcsmerge 的功能一樣。R2 和 R3 所指定的兩個版本的改變會合併到第三個檔案中。第 三個檔案可以是工作檔案或是另一個版本號碼。(用其他選項指定的 R) -kc 根據 c 旗標來展開關鍵字。c 之值可以為下列任一: kv 將關鍵字展開為關鍵字和其值(預設)。只有在 ci -l 或是 co -l 才會插入鎖定檔案的使用者名稱。 kvl 和 kv 一樣,但加上鎖定檔案的使用者名稱。 k 將關鍵字展開,不加上其值。拿來比較檔案時,可用 來忽略一些細微的差異。 o 將關鍵字展開為前一版中所儲存的關 鍵字和其值。在一些二元檔中,若不允許字串改變時,就可用這個選項。 v 將關鍵字展開為其值,而不加上關鍵 字串。這樣以後的版本就無法在展開關鍵字了,不建議使用。 -l[R] 和 -r 一樣,但會將取出的檔案鎖定。 -M[R] 設定工作檔案的修改時間為取出版本 的修改時間。-M 選項可能會造成 make 上的困擾,需小心使用。此功能在 RCS 5.6 以後才有。 -p[R] 將取出的檔案送往標準輸出,不寫入檔案中。可用來做重導向或是 filter 用。 -r[R] 取出最新版本。若指定 R 的話,取出小於 R 的最新版本。 -sstate 設定存入檔案的狀態。 -u[R] 和 r 一樣,不過若之前鎖定過檔案,則會將檔案解除鎖 定。 -w[user] 取出由目前使用者或是指令中所指定 的 user 所存 入的版本。 範例: 將 file 的最新版本加以排序: co -p | sort 將所有大寫檔名的檔案都取出後鎖定以供編輯用: co -l [A-Z]* 請注意,如果目前目錄內沒有工作檔案,則無法進行檔名展開。所以這個例子只有在之前執行過 ci -u 的 檔案才可使用。 最後,下列這些指令是用來取出某一組 RCS 檔案的工作檔案: co -r3 *,v release 3 的最新版本檔案。 co -r3 -wjim *,v 和上面一樣,但只取出由 jim 存入的檔案。 co -d'May 5, 2 pm LT' *,v 取出在這個日期之前所修改的最新版 本。 co -rPrototype *,v 以 Prototype 為名的最新版本。 -------------------------------------- ident [options] files 從檔案中取出關鍵字及其值。files 可以是文字檔、object 檔或是 dump 檔案。 Options -q 若沒找到關鍵字則不印出錯誤訊息。 範例: 若 prog.c 已編譯過,且內含下列這行: char rcsID[] = "$Author: george $ 則輸出如下: <<<<<< code >>>>>> 將所有 RCS 檔案中的關鍵字印出(不印出警告訊息)。 co -p RCS/*,v | ident -q -------------------------------------- merge [options] file1 file2 file3 利用 diff3 將三個檔案的內容作比較和合併。file2 是原來的檔案,file1 是正確的修改版,而 file3 是另一個修改版。merge 會將 file2 和 file3 的差異找出來,然後插入 file1 中。若 file1 和 file 同時有同樣的行,則 merge 會顯示警告訊息,然後把兩行都標明出來插入file1。插入資料如下: <<<<<< code >>>>>> 最後必須在 file1 之內選擇其一,將另一個刪除。merge 的傳回值可以是 0(無重複行)或是 1(有些重複行)或是 2(不明錯誤)。見 rcsmerge Options -L text1 將重複行中的 "<<<<<<
沒有留言:
張貼留言