3.在管理中的相關(guān)技術(shù)
3.1 在管理源文件的一種技術(shù)叫"關(guān)鍵字替換".在每次執(zhí)行"cvs commit"操作后源文件的某些關(guān)鍵字會被替換為可用的詞
$AUTHOR$ 用戶名
$Data$ 登記時的時間
$Header$ 標準的首部,包含RCS的完整路徑名,日期,作者
$Id$ 除RCS文件名不完整外與$Header$同.
$Log$ 包含RCS的完整路徑名,版本號,日期,作者和在提交時提供的日志信息.
$RCSfile$ 包含RCS的文件名,不包括路徑名
$Revision$ 分配的版本號
$Source$ RCS文件的完整名
$State$ 分配的版本的狀態(tài),由 cvs admin -s 分配.
例: 在cvs commit之前,main.c里有
static char *rcsid="$Id$";
執(zhí)行cvs commit后
main.c的改行變?yōu)?
static char *rcsid="$Id: main.c,v 1.2 1999/04/29 15:10:14 trimblef Exp$";
當然,這里只是一個演示.在實際的程序開發(fā)中,這種技術(shù)有非常有用的作用,在此不多贅述.有興趣的朋友可參考相關(guān)書籍.
3.2 創(chuàng)建分支可以使用戶對一些文件使用命令commit進行修改時不會影響主干. 創(chuàng)建分支應首先為擬作修改的那些文件創(chuàng)建一個標簽(tag).
標簽是賦于一個文件或一組文件的符號.在源代碼的生命周期里,組成一組模塊的文件被賦于相同的標簽.在工作目錄中執(zhí)行
~usr/teat/$cvs tag release-1-0
標簽創(chuàng)建后, 可以為其創(chuàng)建一個分支:
~usr/teat/$cvs rtag -b -r release-1-0 release-1-0-path print
-b :創(chuàng)建分支
-r release-1-0 :指定存在的標簽
releas-1-0-patch:分支
print: 模塊名
使用cvs update -j 選項可以將分支上的改變與本地文件拷貝合并.
~usr/teat/$cvs update -j release-1-0 print.c
對源文件作必要修改后, 可以用cvs release 刪除本地工作拷貝
并通知其他開發(fā)者這個模塊不再使用.
~use/$cvs release -d test
3.3 沖突解決
在有多個用戶對同一個文件進行修改時,如果修改了其中的相同部分,而修改后的內(nèi)容如果有不同的話,出現(xiàn)沖突是不可避免的。
例如在CVS 文件倉庫中有一個文件 test.c ,它的版本是 1.4, 用戶A 先檢出該文件進行修改,而稍后有用戶B 檢出該文件進行修改,并提前提交成 1.5,這樣在用戶A再提交時會出現(xiàn)沖突,這時CVS會提示需要手工解決。
例如,文件倉庫中的版本1.4:內(nèi)容為:
#include
main()
{
int i;
for(i = 0; i < 100; i++)
printf(“Count: %d
”, i);
}
用戶B 1.5:
#include
main()
{
int i;
for(i = 0; i < 10; i++)
printf(“Count: %d
”, i);
printf(“Over
”);
}
用戶A :
#include
main()
{
int i;
for(i = 0; i < 50; i++)
printf(“Count: %d
”, i);
return;
}