CVS 相关资料

来源:互联网 发布:insert多条数据 编辑:程序博客网 时间:2024/05/01 07:37

粘滞性标签(Sticky Tag)
在CVS中,如果检出时指定版本树上的一个版本,对它进行的修改是无法直接提交的,这种情况下就叫Sticky Tag。解决方法可以是:

方法一:
1、要提交必须先在检出版本的地方创建分支,更新到分支,再修改提交到分支上。步骤如下:
从先前标记的里程碑:release_1_0 导出一个分支 release_1_0_patch:
cvs rtag -b -r release_1_0 release_1_0_patch proj_dir
2、在另外一个目录下导出 release_1_0_patch 这个分支,修改其中的bug:
cvs checkout -r release_1_0_patch
3、在release_1_0_patch上修正错误后,标记一个1.0的错误修正版本号:
cvs tag release_1_0_patch_1

方法二:
或者用"cvs update -A"命令更新,去掉粘滞性标签,-A选项将从文件版本更新到主干顶部,并且忽略中间的任何粘性标签、设置日期和选项。

正确的通过CVS恢复旧版本的方法
如果用cvs update -r 1.2 file.name
这个命令是给 file.name 加一个Sticky Tag: "1.2" ,虽然你的本意只是想将它恢复到1.2版本
正确的恢复版本的方法是:cvs update -p -r 1.2 file_name > file_name
如果不小心已经加成Sticky Tag的话:用cvs update -A 解决

恢复CVS中被Remove的文件
如果是执行了remove命令而没有提交的话,直接运行"cvs add 被删除的文件名"即可。
如果是执行了remove后又执行了commit,就要先运行"cvs add 文件名",然后选中这个文件,执行update,然后再执行commit。如:
cvs -r x.x(删除时的版本号) file > file
cvs add filename
cvs ci -m "file" file
注释:file是要恢复的文件名

移动文件/文件重命名
cvs里没有cvs move或cvs rename,因为这两个操作是可以由先cvs remove old_file_name,然后cvs add new_file_name实现的。

查看修改历史
cvs log file_name
cvs history file_name

删除/移动目录
最方便的方法是让管理员直接移动,删除CVSROOT里相应目录(因为CVS一个项目下的子目录都是独立的,移动到$ CVSROOT目录下都可以作为新的独立项目:好比一颗树,其实砍下任意一枝都能独立存活),对目录进行了修改后,要求其开发人员重新导出项目cvs checkout project_name 或者用cvs update -dP同步。

项目多分支同步开发
确认版本里程碑:
cvs tag release_1_0
多个文件各自版本号不一样,项目到一定阶段,可以给所有文件统一指定一个阶段里程碑版本号,方便以后按照这个阶段里程碑版本号导出项目,同时也是项目的多个分支开发的基础。

开始一个新的里程碑:
cvs commit -r 2 标记所有文件开始进入2.x的开发
注意:CVS里的revsion和软件包的发布版本可以没有直接的关系。但所有文件使用和发布版本一致的版本号比较有助于维护。

版本分支的建立:
在开发项目的2.x版本的时候发现1.x有问题,但2.x又不敢用,则从先前标记的里程碑:release_1_0导出一个分支 release_1_0_patch
cvs rtag -b -r release_1_0 release_1_0_patch proj_dir

一些人先在另外一个目录下导出release_1_0_patch这个分支:解决1.0中的紧急问题,
cvs checkout -r release_1_0_patch
而其他人员仍旧在项目的主干分支2.x上开发

在release_1_0_patch上修正错误后,标记一个1.0的错误修正版本号
cvs tag release_1_0_patch_1

如果2.0认为这些错误修改在2.0里也需要,也可以在2.0的开发目录下合并release_1_0_patch_1中的修改到当前代码中:
cvs update -j release_1_0_patch_1

 

TortoiseCVS使用技巧

 1. CVS创建新模块――在CVS目录中创建个目录,目录下的内容并不会自动加入到CVS仓库中,需要通过添加内容加入到CVS仓库中。

 2. CVS添加内容――获取当前目录下(包括子目录)的文件/文件夹,添加完成后,需要进行提交操作(在目录操作,该目录下所以子目录及文件会批量提交)。

 3. CVS提交――所有需要更新CVS仓库的命令都需要提交确认。

 4. CVS更新――获取当前目录下(包括子目录)的最新版本,如果有冲突会保留本地版本。

 5. 解决冲突――在WinMerge右侧窗体中进行文件合并编辑。冲突解决后提交到CVS。

 6. 从CVS中获取历史版本,在打开文件的历史窗口,选中要恢复的历史版本,点击“保存此版本为”按钮,然后双击本地的同名文件,历史版本获取到本地,如果想更新到CVS中,进行提交操作。

 7. CVS文件夹刷新――文件夹状态不自动刷新,需要手工刷新。

 8. CVS删除文件――选中要删除的文件,点击CVS删除,然后要在该文件的父文件夹上进行提交操作。(删除操作也会遇到冲突问题,避免方法在删除文件前先进行版本同步)。

 9. CVS的Lock/Unlock状态监视器――在创建模块的时候,勾选中选项菜单中的按只读方式取出文件,监视启动后,取出或者更新正在编辑的文件都将被创建为只读的。

10. CVS编辑――获得文件的写权限。(注意,在创建模块时没有开启Lock/Unlock状态监视器则更改编辑状态作用不明显)。选择 CVS编辑 菜单,这个菜单会由于文本文件或者二进制文件而稍微不同。对于二进制文件,例如DOC,TCVS完成更新操作并且检测是否有别的用户也在编辑它。如果有, 那么你将不能编辑它,如果是文本文件例如.TXT/.CPP,即使有人在编辑,TCVS仍然允许你编辑它。

11. CVS取消编辑状态――是否想回复原有版本,这将丢失你所作的修改。(注意,在创建模块时没有开启Lock/Unlock状态监视器则更改编辑状态作用不明显)。

12. 标签――标签一般都是用在整个模块,以便将来这个模块的当前状态可以回溯。当标签名称输入之后,点击 确定,不像其他CVS操作,TAG标签立即在仓库生效,不需要再 提交。

13. 分支――分支包括(创建分支,获取分支,合并分支)。在一个软件项目周期中,分支是一个很有用的修改控制。例如,如果你已经推出了你的软件的第一个版本 1.0,现在你已经在下一个版本2.0增加新功能。此时你的第一个版本发现了BUG,你的新版本的源代码正在开发阶段,推出稳定版本至少需要一个月的时 间,因此无法基于最新版本推出一个修正原有BUG的版本。创建分支和获取分支和标签操作类似(注意,合并分支在提交后才会更新到CVS仓库中)。

14. CVS批注――如果一个项目突然被中断了,准确找出谁是这个错误修改的责任人是非常重要的,这就是CVS注释的用途。在文件的每一行,对话框显示,每一行的修改原因涉及版本,本行的作者,修改时间日期,本行的当前内容。

 

 

CVS 不同用户设置不同的访问权限方法

完成如下权限的设置:
假设有用户1:user1 ;用户2:user2
用户1(user1)的工作模块:user1dir;用户2(user2)的工作模块:user2dir
要求实现 user1 只能访问user1dir;user2只能访问user2dir

第1步
设置CVS的库配置文件(模块CVSROOT)的访问权限
方法:建立超级用户的工作目录 WINCVSADMIN
a.以cvsnt服务器超级用户administrtor 登陆 wincvs
b.CHECKOUT 库控制文件 checkout moudel 'cvsroot ',此目录下的文件为CVS的高级配置文件,可以在本地进行修改,提交,本身在版本控制之中
c.修改CVSRoot的访问权限,在命令行输入如下命令 #之后为说明,不需要输入 每行命令要单独执行,这是4条命令
cvs chacl default:n #取消所有用户的默认权限
cvs chacl administrator:rcw #设置Administrator拥有所有权限 读取;创建和删除;写入
cvs chown administrator #更改的拥有者Administrator
cvs lsacl #察看权限的设置情况

第2步
建立CVS的用户
正常可以用WINNT 系统的用户作为CVS 的用户,访问CVS ,但是这种方式安全性太差
可以建立CVS 自己的用户
a.建立WINNT系统用户 CVSUSER,权限设为一般用户就可以,只要能访问WINNT就可以
b.建立密码文件PASSWD,
直接在服务端 CVSROOT 目录下建立文件就可以 PASSWD
出于安全考虑,不要将 passwd列在 checkoutlist 文件里面。
C.建立CVS用户
在WINCVS 命令行下输入命令
cvs passwd -a -r cvsuser user2 #建立USER2用户与系统用户cvsuser有一样的权限,回车后提示输入两次口令
cvs passwd -a -r cvsuser user1 #建立user1用户与系统用户cvsuser有一样的权限,回车后提示输入两次口令
cvs passwd -a -r administratro administrator #建立administrator用户与系统用户administrator有一样的权限,回车后提示输入两次口令
可以看到PASSWD 文件多了两行
user2:CUXQwLMdoZHNs:cvsuser #中间为加密的密码,密码使用Unix标准的crypt()函数加密
user1:ZTUCMKUkZ6ap2:cvsuser
administrator:oN2Stm4NIf31Q:administrator


第3步
使用CVS用户登陆
由于CVS 在默认模式下,是采用系统用户登陆的,这就要修改配置文件 CONFIG
设置文件CONFIG为修改状态
加入如下一行
SystemAuth=no #yes 默认值,表示 如果用户在PASSWD文件中不存在,就用系统用户检查权限是否正确
#no 表示用PASSWD检查用户密码权限是否正确
之后提交
(在设置CONFIG 文件SystemAuth=no 之后
需要在cvs 控制目录cvsroot/ 下建立admin文件
这个文件是指定CVSNT的管理员列表的文件,CVSNT根据这个文件来判断一个用户是否是管理员。文件的内容很是一个用户列表。如下:
user1
user2
user3
这些代表user1,user2,user3都是管理员 ;
在此之前 cvs将服务器的管理员用户作为自己的管理员用户的)


第4步
加入文件 WRITERS ,READERS 控制用户的读写权限
在cvsroot目录下加入两个文本文件,WRITERS ,READERS
其每行内容为 用户名 回车
只有加入WRITERS中的用户才能进行提交
加入READERS中的用户只能读取
同时在两个文件中的用户只能读取
在writers文件中加入如下
user2
user1
administrator

 

第5步
配置CVS库模块文件--modules
a.将MODUES文件设为可编辑状态
b.在MOUDES 加入如下3行
CVSRoot CVSRoot
user1的工作目录 -a user1DIR
user2的工作目录 -a USER2DIR
c.保存,提交 COMMIT
原创粉丝点击