對某個檔案所做的修改都放在一個叫 s.file 的檔案中。這個檔案稱為 SCCS 檔。每一次這個檔案 " 放入 "SCCS 中,SCCS 就會去記錄和上次不同的地方,有哪些行更改過或 是刪除了等等。有了這些資料,SCCS 就可以馬上產生所需的檔案。每次更改都會參考到上一次的更改記錄。
每組更改過的檔案叫做一個 delta,SCCS 會指定一個 SCSS id 字串(sid)給它。sid 可能是一組兩個的資訊,release 和 level 號碼,或是含有一組四個的資訊,包括 release,level,branch,sequence numbers 四種。(譯按: 在此的名稱就延用原文,不另外將 sequence number 譯為序號等等)。若同時有兩份檔案在線上使用,就會用到 branch 跟 sequence 這兩個編號。如 delta 3.2.1.1 表示 release 3,level 2,branch 1,sequence 1。
指令概說
SCCS 分為以下幾類:
基本設定和編輯
admin 建立新的 SCCS 檔案或改變其參數。
get 取出指定版本的 SCCS 檔案。
delta 建立新版的 SCCS 檔案(加上一個新的 delta)。
unget 取消 get 指令的動作 ; 不建立新的 delta。
delta 管理
cdc 修改 delta 相應的註解。
comb 將連續的 delta 合併成一個 delta。
rmdel 將不小心造出的 delta 刪除。
查詢
help 印出指令用法或是解釋錯誤訊息。
prs 將 SCCS 檔案的一部份以指定格式印出。
sact 顯示 SCCS 檔案的更動記錄。
what 搜尋 %Z% 所替代的字串然後印出其後的文字。
比較檔案
sccsdiff 比較兩個 sccs 檔案的差異。
val 確認某個 SCCS 檔案。
基本操作方式
本節的解說順序依照 SCCS 的操作順序排列:
. 建立 SCCS 檔案
. 取出檔案
. 建立新的 release 和 branch
. 記錄更動的部份
------------------------------------------------------
建立 SCCS 檔案
admin 指令加上 -i 選項可以建立新的 SCCS 檔案。例如:
admin -ich01 s.ch01
這個指令會建立一個新的 SCCS 檔案,內容則指定為 ch01 的內容,這個就變成 delta 1.1。若不加上任何關鍵字參數,則會顯示 "No id keywords(cm7)"。大致上來說,關鍵字就是在get 時,會由 get 置換成適當的值,用來做識別用的資訊。識別用關 鍵字在本章後面會詳細解說。
建立 s.ch01 後,原來的 ch01 就可以刪除了,因為只要用 get 指令就可以輕易取得。
------------------------------------------------------
取出檔案
get 指令可以從 SCCS 中取得任一版本的檔案。比如要取出上一個範例中 的檔案,可用下列指令:
get -e s.ch01
然後輸出訊息如下:
1.1
new delta 1.2
272 lines
這表示取出的是 1.1,取出的檔案中有 272 行文字。若再用 delta 指令把 ch01 放入SCCS檔案 s.ch01 時,delta 就會變成 1.2。
-e 選項表示取出的檔案經過編輯修改後要再 " 放入 "SCCS" 中。若不加上這個選項,取出的檔案就是唯讀的。-e 選項除了將檔案設定為可讀寫外,還會建立一個 p.ch01 檔案,用來記錄一些重新放入 SCCS 時所需的資訊。
------------------------------------------------------
p17-4
建立新的 release 和 branch
-r 選項可讓 get 指定取出某個版本的檔案,但若不指定 level 號碼,則預設為取出 level號碼最大的那個版本。比如:
get -r3.2 ch01
會取出 3.2 版的 ch01 檔案,但下面的這個指令:
get -r3 ch01
會取出 3.x 版中,x 最大者,比如說 3.8。不加上 -r 選項的話,預設為取出最新的版本,也就是號碼最 大的版本。
當大部份的修改都已儲存起來後,使用者或許會想 要另起爐灶推出一個新的 release。這時可以用 get 來取得比目前 release 大 1 的 release 號碼。比如,若最新的檔案是 3.2 版,而要新建立一個 release 4 的檔案,則可使用:
get -e -r4 ch01
訊息顯示如下:
3.2
new delta 4.1
53 lines
若要修改前幾版的檔案,則可使用下列指令:
get -e -r2.2 ch01
然後訊息顯示如下:
2.2
new delta 2.2.1.1
121 lines
這樣就從原有的檔案版號中建立了新的 branch。也就是從 2.2 延伸出去的 2.2.1.1。不過這個 delta 所做的修改不會影響原有的版本,如 2.3,3.2 等等。
------------------------------------------------------
記錄更動的部份
修改過檔案後,用下列指令把檔案 " 送入 "SCCS 中:
delta s.ch01
然後系統會提示使用者打入修改的註解。delta 指令接著會執行自己的 get 和 diff 來將修改過的檔案和目前最新的檔案來做比較。然 後印出新的版號以及修改的行號等等資訊。
------------------------------------------------------
識別關鍵字
下列關鍵字可以放在 SCCS 檔案中。get 指令會將適當的值替代進檔案中。
%A% what 字串的縮寫
%A%=%Z%%Y% %M% %I%%Z%。
%B% Branch 號碼。
%C% 目前行號,可用來找出錯誤所在。
%D% 日期(YY/MM/DD)。
%E% 最新的 delta 建立日期(YY/MM/DD)。
%F% SCCS 檔案名稱。
%G% 最新的 delta 建立日期(MM/DD/YY)。
%H% 日期(MM/DD/YY)。
%I% 取出檔案的 sid(%R%.%L%.%B%.%S%)。
%L% Level 號碼。
%M% 模組名稱(檔名去掉 s.)。
%P% 完整的 SCCS 檔案名稱。
%Q% string的值,以 admin -fqstring 所定義。
%R% release 號碼。
%S% sequence 號碼。
%T% 目前時間(HH:MM:SS)。
%U% 最新的 delta 建立的時間(HH:MM:SS)。
%W% 另一個縮寫
%W%=%Z%%M%tab%I%。
%Y% 模組的型態(type),由 admin -fttype 所定義。
%Z% what 所認得的字串,也就是 @(#)。
資料關鍵字
資料關鍵字是用來選 SCCS 檔案的一部份,可用 prs 的 -d 選項輸出。
:A: what 字串的格式。
:B: branch 號碼。
:BD: 內文。
:BF: branch 旗標。
:C: delta 的註解。
:CB: 上界。
:D: delta 建立日期(:Dy:/:Dm:/:Dd:)。
:Dd: delta 建立日期。
:Dg: 忽略的 delta(sequence 號碼)。
:DI: delta 的 sequence 號碼(:Dn:/:Dx/:Dg:)。
:DL: delta 行狀態 (:Li:/:Ld:/:Lu:)。
:Dm: 建立 delta 的月份。
:Dn: 包括進來的的 delta(sequence 號碼)。
:DP: 上一個 delta 的 sequence 號碼。
:Ds: 預設 sid。
:DS: delta sequence 號碼。
:Dt: delta 資訊。
:DT: delta 種類。
:DX: 排除在外的 delta(sequence 號碼)。
:Dy: delta 建立的年份。
:F: SCCS 檔名。
:FB: 下界。
:FD: 檔案描述。
:FL: 旗標表。
:GB: get 進來的本文。
:I: SCCS ID 字串(sid)(:R:.:L:.:B:.:S:)。
:J: 合併編輯旗標。
:KF: 關鍵字錯誤 / 警告旗標。
:KV: 關鍵字確認旗標。
:L: level 號碼。
:Ld: delta 刪除的行號。
:Li: delta 插入的行號。
:LK: 鎖定的 release。
:Lu: delta 未更動的行號。
:M: 模組名稱。
:MF: 確認更動旗標。
:MP: 確認更動的程式名稱。
:MR: delta 的更動號碼。
:ND: Null delta 旗標。
:P: 建立 delta 的使用者名稱。
:PN: SCCS 檔案路徑。
:Q: 使用者定義的關鍵字。
:R: release 號碼。
:S: sequence 號碼。
:T: delta 建立的時間。
:Th: delta 建立時的時。
:Tm: delta 建立時的分。
:Ts: delta 建立時的秒數。
:UN: 使用者名稱。
:W: what 字串的格式。
:Y: 模組型態旗標。
:Z: what 字串的分隔字元。
------------------------------------------------------
指令解說
SCCS 的檔名參數可以是檔名或是目錄名稱。若給定目錄名 稱,則目錄內所有可讀可處理的檔案都會予以處理。若以 "-" 來代替檔名,則 SCCS 會從標準輸入來讀入所要處理的檔名。
--------------------------------------
admin [options] files
將 files 檔案加到 SCCS 或是改變 files 的 options 選項。
Options:
-a[user | groupid]
指定 user 或 groupid 可以製作 delta。若 user 或 groupid 前加上 "!",則表示不准製作 delta。若不指定可用或不可用的 user 或 groupid,則全部的使用者都可以製作 delta。
-dflag 將 -f 所設定的旗標清除。旗標如下:
b 將 get 指令的 -b 選項打開,可以建立 branch。
cn 將最高的 release 設定為 n(預設為 9999)。
dn 將 get 預設的 delta 號碼設定為 n。
fn 將最低的 release 號碼設定為 n(預設為 1)。
i[string]
將 "No id keywords(ge6)" 視為嚴重錯誤。若指定 string,則若關鍵字不符合 string時為嚴重錯誤。
j 可同時進行多個 get。
llist list 中的 release 不可更改。用 a 來指定所有的 release。
mname 將 %M% 以模組名稱 name 代替之。
n 建立一個 null delta,由此來建立新的 branch。
qstring 將關鍵字 %Q% 以 string 代替。
ttype 將 %Y% 以模組類型 type 代替。
v[prog] 強迫使用者在輸入確認更動號碼,用 於建立新 delta 的原因。用 prog 程式來顯示確認更動號碼。
-e[user | groupid]
列出的 user 或是 groupid 不可建立 delta。
-fflag 設定旗標(見 -d)。
-h 檢查 SCCS 檔案是否有損毀。
-i[file]
以 file 的內容新建立一個 delta。若無 delta,則使用標準輸入。
-m[list]
將 list 所指定的確認更動號碼當做建立檔案的原因。
-n 建立一個新的空白 delta
-rn.n 將 delta 的 release 初值設定為 n.n。預設為 1.1。必須和 -i 一起使用。
-t[file]
將 SCCS 檔案描述以 file 的內容代替。若無 file 參數,則目前的描述會自動刪除。
-y[text]
將 text 做為初始資料的註解。(僅可用於 -i 或 -n)。
-z 重新計算 SCCS 的 checksum,然後存於第一行。
--------------------------------------
cdc -rsid [options] files
修改檔案指定 sid 的註解。
Options
-m[list] 加入 list 中的更動要求號碼。(在號碼之前加上 "!" 可刪除該號碼)。-m 只有在 admin 指令使用 -v 選項的時候有用。若不加上 -m,則終端機上會顯示 MRs? 要求你輸入。
-y[string] 將 string 加到指定資料的註解中。若不加上 -y,則會顯示 comments? 要求你輸入。
範例:
在 s.prog.c 的 delta 1.3 中加上 x01.5 和 x02-8 兩個更動號碼,然後加上註解:
--------------------------------------
comb [options] files
將指定的 SCCS 檔案予以合併。這個指令會只保存每個 branch 中最新的版本,然後把前面不必要的檔案都予以除 去,只留下最新版所需的檔案。comb 會產生一個 shell script,真正的合併過程是由這個 script 來進行的。
Options
-clist 只將 list 中以 "," 分開的幾個 SCCS 檔案保留下來。可用 "-" 來指定範圍。比如1.3.2.1-2.5。
-o 將重建後的 file 檔案以 delta 建立時的版本號碼存取,而非最新版的版號。這個 動作可能會影響到樹狀結構。
-psid 重建 file 的過程中,SCCS 識別字串早於 sid 的 delta 都予以刪除。
-s 建立一個 script,用來計算總共縮小的檔案大小。-s 可用來預測 comb 實既上執行時的動作。
--------------------------------------
delta [options] files
將一個或多個 SCCS 的加入修改的動作。delta 可用來儲存用 get -e 取出,編輯完成後要儲存的更改。delta 通常將更改過的文字檔刪除,保留 SCCS 的檔案。
Options
-glist 將 list 中所指定的 SCCS ID(用 "," 分開)的檔案予以略過。用 "-" 來指定範圍,如 1.2,2.1-2.5。
-m[list] 加入 list 中的更動要求號碼。(在號碼之前加上 "!" 可刪除該號碼)。-m 只有在 admin 指令使用 -v 選項的時候有用。若不加上 -m,則終端機上會顯示 MRs? 做為提示符號。
-n 不要將更動過的文字檔(用 get -r 取出後修改的)刪除。
-p 印出 diff 式的 file 檔案更動記錄。
-rSID file 的 delta 版本號碼。只有一次編輯數個不同版本的 file 時才會使用 -r。
-s 不印出新的 SID 和其他資料。
-y[string]
將 string 當做建立 delta 的原因。若不加上 -y,則會顯示 comments? 做為提示符號。
--------------------------------------
get [options] files
將 SCCS 檔案取出成為文字檔。取出的檔案(稱為 g-file)和 SCCS 有一樣的檔名,但前面不加上 "s."。每個 SCCS 檔案,get 都會印出它的版本號碼和行數。請見前面 " 識別關鍵字 "一節說明檔案中可放入那些關鍵字。
Options
-an 取出 sequence 號碼為 n 的 delta。不常用(多被 comb 使用)。
-b 建立新的 brance(和 -e 一起用)。
-cdate 只取出包括 date 日期之前修改過的版本。date 的格式為
YY[MM][DD][HH][MM][SS]。可用非數字符號來分隔這些欄位。
-e 取出檔案供編輯用;這是最常用的選項。
-g 不取出內文,只取出其版本號碼,常 用於檢查檔案用。
-Gname
將取出的文字放入 name 這個檔案中。(預設為不加 "s.")(僅可用於 Solaris 2.0)
-ilist 將 list 所指定的版本號碼的內容也併入所取出的檔案中。用 "-" 來指 定範圍。如 1.2,2.3-2.5。
-k 不把 ID 關鍵字展開為值 ; 和 -e 合用可以重建在編輯過程中損毀的檔案。
-l[p] 建立 delta 的大綱(存檔或是用 -lp 顯示在標準輸出上)
-m 將每一行前加上該行所對應的 SCCS ID。
-n 將每一行前加上 %M% 關鍵字。(通常是文字檔名)。
-p 將取出的文字不寫入檔案,而寫入標 準輸出。
-rsid 取出 SCCS ID sid。
-s 只輸出錯誤訊息。
-t 取出 release 中最新的版本。
-wstring
將 %W% 關鍵字以 string 代替。%W% 是 what 的檔頭標籤。
-xlist 和 -i 相反,將 list 中所指定的 delta 排除在取出的檔案外。
範例:
將 prog.c 取出編輯;接下來的 delta 指令會在 1.3 的地方建立一個新的 branch:
get -e -b -r1.3 s.prog.c
將 prog.c 取出,但不取出任何在 1990 年六月 1 號 2:30p.m. 之後所做的任何修改。(但依然包括 2.6 和 2.7,這兩個版本有用 -i 指定包括在內):
get -c'90/06/01 14:30:00' -i'2.6,2.7' s.prog.c
印出 s.text.c 的內容(除了 1.1-1.7 以外的所有版本)
get -p -x1.1-1.7 s.text.c
--------------------------------------
help [commands | error_codes]
這是用來對 SCCS 的指令或是錯誤訊息做解釋的指令。不加任何參數時,help 會提示使用者輸入指令名稱或是錯誤代碼。若要指 令講解,就打入指令名稱,若需要錯誤訊息說明,則打入錯誤訊息後的代碼。help 的檔案通常放在 /usr/ccs/lib 中。
中斷 SCCS 所產生的錯誤訊息的形式如下:
ERROR filename: message (code)
code 可用來查詢所產生的錯誤為何。只要打:
help code
即可。
範例:
若完全不能動時,可試著用:
help stuck。
--------------------------------------
prs [options] files
依格式將一個或多個檔案的資訊印出。
Options
-a 包括移除了的 delta 之資料。
-cdate 將 -e 或 -l 所使用的日期去掉。(見 get 中日期格式說明)。
-d[format] 用文字或 SCCS 關鍵字指定印出的格式。見資料關鍵字的說明。
-e 和 -r 合用。列出 sid(含)之前的 delta 的資訊。和 -c 合用時,列出 date(含)之前的 delta 的資訊。
-l 和 -e 一樣,但列出 date 之後或是 sid(含)之後的 delta。
-r[sid] 指定 SCCSID sid。預設為最新版本的 sid。
範例:
下列指令:
prs -d"program :M: version :I: by :P:" -r s.yes.c
其結果可能如下:
program yes.c version 2.4.6 by daniel
--------------------------------------
rmdel-rsid files
從一個或多個 SCCS 檔中移除 delta。sid 是 SCCS ID。這個 delta 必需是該 branch 的最新版。
--------------------------------------
sact files
對指定的 SCCS files 檔,回報哪些 delta 將要更動(比如正在用 get -e 取出,但尚未用 delta 重新放入)。sact 輸出有五欄。目前編輯中的 delta 的 SCCS ID,下一個要新建立的 delta的 SCCS ID,執行 get -e 的使用者名稱及執行的時間。
--------------------------------------
sccsdiff-rsid1 -rsid2 [options] files
印出兩個不同的版本間的差異。sid1 和 sid2 指定兩個拿來做比較的 delta 版號。這個指令會執行 bdiff (然後呼叫 diff)。
Options
-p 將輸出導向到 pr。
-sn 使用檔案節區大小為 n(n 之值會傳給 bdiff)。
--------------------------------------
unget [options] files
將一個或多個 files 檔案的 get -e 動作取消。若有個檔案正在編輯中,用 delta 指令會建立新的 delta,而用 unget 時則會將所修改的部分予以取消,如此就不會建立 新的 delta 。
Options
-n 不將 get -e 所取出的檔案刪除。
-rsid 要取消的 SCCS ID。僅在同一個檔案執行過多個 get -e 時要使用。
-s 不將要處理的檔案的 sid 顯示出來。
--------------------------------------
val [options] files
確認 files 檔案符合在選項中所指定的條件。val 會將訊息顯示在標準輸出上,並在結束時傳回一個 8bit 的 值。
Options
- 從標準輸入讀入資料,並將每一行視為 val 的指令行參數。以 EOF 結束,這個選項為指令本身所使用。
-mname
將 name 和檔案內的 %M% 相比較。
-rsid 檢查 sid 是否正確或是模稜兩可。
-s 不顯示任何錯誤訊息。
-ytype 將 type 和檔案內的 %Y% 相比較。
--------------------------------------
what [options] files
在 files 檔案內尋找 @(#) 然後印出之後的文字。其實這個指令尋找的是 %Z% 這個關鍵字,但因為 get 會把這個關鍵字換成 @(#)。what 的主要功能是印出識別字串。
Options
-s 找到第一個符合的字串就跳出。
------------------------------------------
sccs 和擬指令(pseudo-command)
這整個套裝軟體中還包括了 sccs 這個前端處理程式。這個指令提供了一個相當便利 的使用者介面。其語法如下:
/usr/ucb/sccs [options] command [SCCS_flags] [files]
除了一般的 SCCS 指令外,sccs 還提供了擬指令。這些擬指令是原本 SCCS 指令的一些常用的形式。options 僅可用於 sccs 介面。 command 是 SCCS 指令或是擬指令名稱。而 flags旗標則會傳給 SCCS 指令使用。
sccs 可讓指定檔案變得比較直接簡單,因為它會直接將 SCCS/.s 接在檔名之前。比如:
sccs get -e file.c
就會被解譯成:
get -e SCCS/s.file.c
Options
-dprepath 從 prepath 中找檔案,而不從目前目錄尋找。比如:
sccs -d/home get file.c
會被解譯成:
get /home/SCCS/s.file.c
-pendpath 從 endpath 中存取檔案,而不從 SCCS 目錄中存取檔案。比如:
sccs -pVERSIONS get file.c
會被解譯成:
get VERSIONS/s.file.c
-r 以真實使用者執行 sccs,而非有效使用者。
擬指令
相對應的 SCCS 指令列於括號中。
check 如 info,但傳回值為非零之值,而不是檔名。
clean 將目前目錄下不是 SCCS 正在編輯的檔案刪除。(如 get -e)
create 建立 SCCS 檔案(admin -i 後執行 get)
deledit 執行 delta 後執行 get -e。
delget 執行 delta 後執行 get。
diffs 將目前的檔案和 SCCS 的版本做比較(和 sccsdiff 一樣)。
edit 取出檔案並編輯(get -e)。
enter 和 create 一樣,但後面不執行 get(admin -i)。
fix 和 rmdel 一樣(必須加上 -r)。
info 列出編輯中的檔案(sact)。
print 印出資訊(如 prs -e 後加上 get -p -m)。
tell 和 info 一樣,但一行只列出一個檔名。
unedit 和 unget 一樣。
沒有留言:
張貼留言