1. Q:CVS提交文件的一个问题,如果版本不一致,会出现如下情况:
cvs commit: sticky tag `1.2' for file `abc.c' is not a branch
cvs [commit aborted]: correct above errors first!解决办法: 进入cvs中该文件所在文件夹,然后找到CVS目录(隐藏的),进入该目录,打开Entries文件,然后找到标记有版本号的地方,如:
cd CVS
vi Entires
/abc.c/1.2/Tue Dec 17 13:33:06 2002//T1.2
A: 然后T1.2标记删除,再次提交即可。
2. Q: Could not connect to :pserver:[email protected]:/cvs_2010/project/sywg(SYWG): Cannot connect to host: Connection timed out: connect
Connection timed out: connect
A: 这问题我也出现了,重启服务器就好。
CVS常见问题解答
基于WINCVS:
一、配置问题:
1、win下的rwc = linux下的rwx吧?如果我想让一个用户只有只读权限,应该设置成r--吗?
答:r 就可以了
2、 我在设置更改【CVSRoot】的拥有者:cvs chown administrator时,为什么总是不成功呀.提示cvs server: 'admin' does not own '.'
答:1.admin 不是超级用户了
2.对cvsroot admin 不是拥有者
应使用超级用户或 cvsroot 的拥有者登陆
3、我配了一个用户,现在不记得给他配什么密码了,这可怎么办?有什么办法吗?
答:以administrator登陆,cvs passwd user,然后重设密码
4、是为每个用户建立自己的工作目录,把自己开发的模块放在自己的目录下方便,还是把一个项目放在一个公共的目录,为每个人分配不同的权限方便呢?
答:如果每个人负责的东西都和别人没有关系,那显然是工作目录分开方便。不过这对一个项目整体来说不是很好,有些乱。而且,如果各个人负责的东西之间有交叉就更不行了。
5、为每个人分配不同的权限,我不知道这个在CVSNT服务器上怎么做。
答:cvs chacl default:n
cvs chacl user:rcw
n表示没有权限,r表示读,c:建、删,w是写
6、我想让某一个用户拥有一个项目下一个子文件夹的读写权限,其的文件夹下不具有权限应该怎么指定呢?
答:分别对单独目录操作
7、在服务器端用户是怎么设置的呢?用WinNT用户还是CVS自己的用户?我不知道怎么设置CVS自己的用户,但用WinNT的用户好像和权限相关的地方都有问题啊。
答:NT下用创建组,把用户分配到不同的组,给组创建权限
8、是不是nt上存在的用户就可以登录cvs的啊?还是一定要创建一下?为什么我用本机上的用户登录cvs就出现“cvs [login aborted]: authorization failed: server 192.168.0.180 rejected access to F:/pxh for user eileen”啊
答:要映射到CVS用户
9、配置代码是指什么?
答:配置代码表示模块运行的配置环境等,比如说平台
10、如何做到只有部份人可IMPORT?
想要限制IMPORT的权限,在CVSROOT的同级目录下建一个.PERM文件,文件中写入可以IMPORT的用户名,例如只允许ADMINISTRATOR进行IMPORT操作,只需写入两行:
Default:n
Administrator:rcw
需对CVSROOT进行权限设置,只有ADMINSTRATOR可以访问。且更改拥有为ADMINISTRATOR
11、出现cvs chacl Administrator:rcw
cvs [server aborted]: Invalid permissions: 'rcw
', can only have r, w, and c
***** CVS exited normally with code 1 *****
的提示是怎么回事?
答:出现\n 这样的提示表示在打入命令时多按了一个回车,将命令后的回车去掉即可
12、出现cvs chacl flw:rcw
cvs chacl: Empty password used - try 'cvs login' with a real password
客户端曾经有两个不同的用户登录过,cvs客户端记录下了你前个登录的用户的信息,认为你还是前个用户,原来的目录下没有cvs的信息,重新check out出来的有cvs的信息的
解决方法:换了一个目录导出,然后再做权限
13、在利用passwd管理用户时出现不能解决的问题,administrator用户不再里面
把passwd内容删了 ,删完后,以系统管理员的身份进入 ,密码就是系统管理员的密码,然后再PASSWD建用户命令行输入cvs passwd -r -a administrator adminstrator
14、以前cvsnt在ip是192.168.115.170上,现在我把cvsnt装自己机器上了,ip是192.168.2.55,而且也在本机登录成功了,可是使用命令的时候会提示connect to 192.168.115.170;2401 failed: 由于连接方在一段时间后没有正确的答复或连接的主机没有反应,连接尝试失败。这个设置应该在哪里能改过来呢???
答:手动修改导出的工作目录里的隐藏文件ROOT中ip地址
15、如何建CVS用户
在winNT下建立一个用户,然后在cvs里建用户映射到那一个用户,也就是用-a参数, cvs passwd -a -r windows用户 cvs用户1
cvs passwd -a -r windows用户 cvs用户2
。。。。。。。。
16、建一个库配置过程
(1)、建立目录,add这个目录
(2)、CVSNT中control panel里的advance页面上的第二个选项要勾上
(3)、设置admin->preference
(4)、用系统的管理用户登录导出CVSROOT目录
(5)、对CVSROOT目录进行权限设置,输入命令
cvs chacl default:n
cvs passwd -a -r 系统管理员 cvs管理员
cvs chacl cvs管理员:rcw
cvs chown cvs管理员(以上就是更改cvsroot文件夹下的.perms以及.owner文件内容,分别控制读写权限以及所有权)
(6)、在cvsroot下加入新文件admin里面写入cvs管理员
(7)、更改config:第二行的#sysauth=yes改为sysauth=no
17、为什么一个用户有时候可以登录,有时候不能?
因为config文件中第二行SystemAuth前的那个#没有去掉,所以config里的SystemAuth设置是无效的,所以用户有时候可以登录,有时候不能,设成SystemAuth=no时只能是cvs用户验证方式登陆,设成SystemAuth=yes时可用windows和cvs两种混和验证方式登陆
18、就是比如目录aa aa\aaa\aaaa,我想让g用户查看aaaa,但又不能查看其它内容aaa目录下的其它内容,各位,请问如何实现。
aaa级的其他目录权限设为n,只有aaaa目录可以r
19、如何用group的方式设置cvs的访问权限?
你在cvsroot里面添加一个group文件,把相同权限的人加到里面就可以了
我设置了两个组:test1:aaa bbb n
test2:ccc rcw
使用bbb登录后,无法下载项目,如果我把bbb放在test2组下,就可下载项目。
分别对两个组又用chacl设置权限了
只要对组设置了权限后,想让哪个用户拥有什么权限,只要把用户入到组下就可以了,
就不用在重新设置权限了。
哪怕个人权限是rw,而组是n,都是以个人权限优先组的权限矛盾
20、服务器端的整个项目的目录能不能直接改目录名?
答:不能
21、我登陆不上cvsnt,老显示“cvs [login aborted]: authorization failed“怎么回事,可是我把cvsnt装到一个server的机器上问题就解决了,我又装一个到porfession上有无法登陆了,配置是一样的
答:cvs -d c: / catv passwd -a administrator
运行了一下上面得命令就可以了,这个命令在cvsroot下建立了个passwd文件,并把用户添加进去,好像cvsnt用得是混合登陆方式,系统有administrator,而cvsnt得cvsroot下没administrator,运行一下这个命令就建了administrator这个用户了,
22、加writers和readers文件有什么作用呀
答:只有加入WRITERS中的用户才能进行提交
加入READERS中的用户只能读取
同时在两个文件中的用户只能读取
两个文件是需要手动添加得(混合模式下要用这两个文件)
如里有了writers和readers两个文件,可以在项目还没上传时,就对用户进行权限控制我不需每次都用命令分配权限。
另:默认状态下,passwd文件是不存在的,如果你要在cvsnt验证模式下工作的话,就必须建立passwd文件
二、操作问题:
1、我在登录时,信息窗口中显示的就是以前的用户呀.应该怎么改呢?
答:你换用户后,你的工作目录也要换
2、是不是我设置了用户权限后,用那个用户登录后,要么用marco下的把cvsroot改掉然后操作,要么checkout到另一个目录才能操作?
答:不同用户要checkout到不同目录才能对按权限对文件进行操作
3、我想吧文件传到A下面的B目录里,应该怎么写路径?wincvs?
答:import到a\b就可以了
4、CVS是不是不能import一个空目录的?
答:不能
5、我 import 进去后是 1.1.1.1 想改成 4.0 怎么改
答:固定版本,使用COMMIT SELECT ,然后将第三个选项打勾,写上你要固定的版本号就可以了
6、如何在wincvs下向CVSnt提交一个新建子目录
答:新建文件夹-->添加选项-->提交选项
7、比如我在一个已有的文件夹a下,添加了2个子文件夹a1和a2,是不是只能把a1、a2选中以后,添加而不能选中a,然后直接提交呢
答:前者
而且a1和a2都不能为空,是吗?
是的。因为你a1,a2都是非cvs文件,提交也不会成功的
子目录添加没有继承性
8、我在改一个文件中的一个函数,改完后提交,另一个也改了这个函数,改后提交,那这个更改后的结果是什么?
答:上传提示冲突,结果是你传上去了,他传的时候有冲突。CVS会要求他先Update(若同时上传也会提示冲突。
9、我执行cvs admin -l1.7,提示cvs admin: while processing more than one file:
cvs [admin aborted]: attempt to specify a numeric revision
答:-l要和后面的版本号连在一起,没有空格,比如版本号为V1.7,应写成cvs admin -l1.7 filename.doc,一次只能指定一个,而且要输文件全名,不能用 * -u可以解锁
10、我locked了一个文件后,显示已经被locked了,但是我还可以edit
答:那里的 lock是 lock服务器端的文件,本机可以修改,但不能提交
11、如果我提交了删除,别人在check整个工程,那被删除的还会被CHECK出来?
答:不会被check出来。
12、如何查看文件的不同
答:cvs log
13、我想比较一下两个Tag或Branch之间有哪些文件改动过,用什么命令?
答:1、export两个版本分别到两个目录,然后用文本比较工具比较两个目录的差别
2、cvs diff -r Tag1 -r Tag2 --brief
这样会告诉你Tag1和Tag2之间有哪些文件差别。
14、大家对tag的命名规则一般是怎么规定的
答:项目名-模块名-配置代码-版本号
15、CVS如何做合并:
答:如果改了同一个文件不同的地方,会自动合并,如果改的是相同的地方就会产生冲突,也许需要手动更改
二进制文件无法合并。所以如果你把c文件当成二进制Import了,导致以后的合并功能都无效了。
不能太信任CVS的合并功能,就算提示合并成功,也要仔细看看,有时自动合并不是你
需要的结果。
一般使用checkout read-only ,然后编辑时用reserved edit ,不建议使用force edit,就可防止多人修改。
16、把分支上文件修改的内容合并到开发主线上后,怎么不能提交了?
在你合并完后,要进行修改才能提交,并不是一合并就提交
17、依时间点取出过去的文件,如果该文件在此时间之前存在,当前已经不存在了,如何再取出该文件啊?
答:重置标签
cvs -q update –A
18、cvs -q update –A中参数代表什么
-q:不输出信息
-A:Reset any sticky tags/date/options.
-a:Clear tag from removed files that would not otherwise be tagged.
19、为什么CHECKOUT出来的文件在wincvs中看不到
view->file filter->clear all
20、xml,mdb,gif,cpp,cs之类的文件checkin的时候文件类型应该转换成什么样的
啊?
答:二进制,我们把各种源代码文件(java,c,cpp,html,jsp,css,js等等)作为文本文件,其他文件,包括图形文件,文档(doc,pdm,cdm,vsd,mpp)等作为二进制
用文本的尽量不能二进制。二进制不能做比较
(用ultraedit打开一下,看的懂的就是文本类型,看不懂的就是二进制 )
21、管理员建立新帐户后,客户端用户能改变他的密码吗?
能,cvs passwd,然后更改,直接输新密码两次
22、传错了,如何修改格式?
change text to binary:
cvs admin -kb foo.c
cvs update -A foo.c
back to text :
cvs admin -kkv foo.c
cvs update -A foo.c(试验时传后出现乱码)
23、我想比较一个本地文件及其对应的服务器上的不同修订,比如昨天的一个修订,但是现在怎么得知服务器上昨天那个修订号呢,我使用wincvs。
答:查看文件的图型,点击哪部都应该能看到版本号和日期。
24、如果我在合并的时候出现冲突,那我怎么调整主干中这个冲突的文件,我现在无法提交
答:你自己手工冲突,然后提交
25、出现:cvs commit -m "no message" tony111.txt (in directory E:\proj\training\)
cvs server: sticky tag `1.2' for file `tony111.txt' is not a branch
cvs [server aborted]: correct above errors first!
答:更新时把标签去掉就好了,就是update时要把第三个选项勾上
26、如何下载分支?
答:选中主干co 时候指定分支或者tag
27、请问大家,分支是不是不能单独提交?要合并到主干上才能提交的?
答:不是,分支完全可以继续独立开发
28、有没有试过最新修改过的分支跟主干上一个很早之前的版本合并后会怎么样。比如主干上有rel01,rel09两个,按理说该跟最新的合09合并,结果跟01合并了,那要怎么恢复啊
答:重和09合并
29.分支较常见的命令:
检出主干版本到本地新建目录
cvs co -r baseline_1_patch 文件名
也可以通过命令
cvs co -d test_old -r baseline_1_patch文件名
提交分支版本
cvs ci -m “fixed bug no.123” ttt.txt
到主干版本所在的目录下,将分支版本合并到最新的主干版本
cvs update -j baseline_1_patch
30、开发人员要提交一个版本到服务器上,但服务器上的版本比他本地的高,他提交不上去,怎么办?
答:有冲突会提示的,没有冲突就可直接提交了,有冲突时updatet然后更改后commit。
31、如何忽略版本控制?
答:在那个目录下面新建.ignore文件,然后在里面加入忽略版本控制的文件名就可以了
32、请问大家,为什么我在modules文件下设置的项目关联,检出时,有的人能看到,有的人看不到呢?(装的是同一个客户端)
答:如果是更改preference,就是开始path是a,后来又改成b登陆,这种情况下是显不出来,先刷新,fresh不行的话就关闭wincvs再开,反正不要更改后登陆就行了
33、如何给文件建个分支
答:这个文件需要先打一个tag,然后在这个tag的基础上建分支,如果你们有了比如是rel_01
那就需要把带有这个tag的标签co到本地
然后cvs tag -b rel_01_branch readme.txt
34、直接remove一个目录行吗?
目录不空就不行,提示
cvs remove test
cvs server: Removing test
cvs server: file `test/qjq.txt' still in working directory
cvs server: 1 file exists; remove it first
必须先remove文件,现REMOVE目录,然后update一下
35、CVS update的时候,文件名之前字母含义:
P:通过补丁的方式更新到一个新的版本。
U:通过下载的方式更新到一个新的版本。
M:你本地的文件已经被修改。
C:你的版本和服务器上存储的新版本冲突。你应该通过编辑冲突的文件并汇入你的修改来消除冲突。
这时在当前目录下回多出来一个你修改的备份文件,名为 .#file-version
?:文件既不在远端服务器的文件库中,也不在本地的忽略清单中。
A:文件已被添加,但还没有被提交。
R:文件已被清除,但还有被提交。
36、要把一个文件夹导入到一个模块的文件夹下,是不是只能用add,不能用导入啊?
答:要导入就得连同他的上一级一起
也可以单独导入,但就是需要设置一下路径
37、wincvs里面的监视器干吗用的?
监视文件的编辑状态
可以监视那些被高度关注的文件的编辑状态。这个设计遵循发布/订阅模型。当某个人想要修改一个文件时,她(CVS)会发出一个“编辑”的命令,这个命令将会通知那些对这个文件设置了“监视”的开发者。监视通知是通过Email发送的。同样,当文件被提交时也会发送通知。
要监视一个文件,从Trace菜单中选择“Add a Watch”。
38、为什么有时候无法commit,提示一堆这样的信息
cvs server: Up-to-date check failed for `StatInterface.h'
cvs [server aborted]: correct above errors first!
答:这种有引用关系或编译了得最好不用import,如果要导入就以二进制方式导入
我是之前导入过现在做了修改就无法commit
39、CVS支持把最近几天前更新的文件单独提取出来吗?
答:CVS update -D "2 days ago"
40、如何查看文件状态:
cvs status -v 文件名
41、什么方法可以让cvs在导入文件时候自动判别是否以某种格式(如二进制)导入?
答:在CVSROOT/cvswrappers文件里加入那个扩展名需要以二进制导入就可以了,如:*.exe -k'b'即可,可以加你需要的格式 *.avi -k'b',保存后下次导入时cvs按照这个文件里定义的格式进行导入,其它格式:-ku强制unicode,-ko强制不进行关键字扩展,T强制文本
42、我把 BASELINE_2标签的文件捡出了然后用cvs tag -b BASELINE_2_PATCH 代码
创建分之,不行应该怎么建?
答:cvs tag -b BASELINE_2_PATCH
三、基于LINUX:
1、是不是每个用户都需要分配一个工作目录呢?
Linux下的应该为每个用户分配一个工作目录。WinNT的不用。
2、 在Linux下如何配置CVS
加cvs用户组
groupadd cvs
增加cvsroot用户是cvs组的
useradd -g cvs cvsroot
在/etc/inetd.conf 中加入一行
cvspserver stream tcp nowait root /usr/bin/cvs -b /usr/bin --allow-root
加入用户有cvs的使用权
useradd -g cvs test
在.bash_profile文件中加入一行
export CVSROOT=:pserver:[email protected]:/export
假如cvs装在192.168.1.1上了
/export pserver
其中export是为cvs建仓库的路径
mkdir /export
chown cvsroot export
chgrp cvs export
chmod 764 export
3、 如何锁文件:
cvs admin -L test.txt
可以提交但不起作用
6.1 如何删除下载的文件或目录:
1. 选中下载的某个或多个文件,执行【Remove】命令。
2. 再次选中这些文件,执行【Commit】命令就完成了删除文件的操作。
3. 本质上CVS是不会删除任何文件和目录的,即使是执行了以上操作,删除了某些文件,远端CVS实际执行的是将提交删除的文件放到了一个叫【Attic】的目录下,因此,这些被删除的文件是可以通过一定的方法恢复的。
6.2 如何恢复已经删除的文件或目录:
1. 在执行了【Remove】命令之后恢复文件。
l 【Ctrl+L】直接输入命令cvs add xxxxx,或执行【Add Selection】界面操作。
l 这样就可以直接恢复还未提交的删除文件。
2. 在执行了【Commit】命令之后恢复文件。
l 只能用【Ctrl+L】直接输入命令cvs add xxxxx,这时会得到一个空的文件。
l 选中这个空文件,执行【Update】操作,得到这个文件的实体。
l 再次选中这个文件,执行【Commit】操作,得到这个文件最新版本。
3. 由于CVS系统中本质上不会删除任何目录,因此,谈不上对目录的恢复,但是CVS系统默认情况下是要在用户本机上(如:YCW2000)要删除空目录,因此,可以用如下方法得到已被删除的空目录:cvs checkout -p xxx,也可以在Admin=>Preference的【Globals】页面进行设置。
4. 可见,CVS系统能够保证:只要上传到服务器的文件,无论你怎么在远程进行如何的操作,正常的或非正常的操作,都可以用Administrator登陆上去,通过以上的方法找到丢失的文件。除非用户进入到远端服务器,将文件手动删除,那就没办法了:)
6.3 如何得到以前版本的文件:
1. 有时我们需要得到以前版本的文件,而WinCVS默认方式只传递最新的版本。
2. 选中某个文件,【Ctrl+G】或右键,点按【Graph selection…】,使用默认设置,就可以得到该文件所以版本的图形结构描述。
3. 选中一个版本,右键,点按【Retrieve revision】,就可以得到相应的老版本文件。当然也可以得到最新版本的文件:)
6.4 有时WinCVS会变得异常缓慢,怎么办?
1. 确认安装了WinCVS的机器上没有安装CVSNT服务器端,因为它们使用的版本有可能不一致。
2. 只安装了WinCVS,但以前安装过其它版本的WinCVS,怎么办?
3. 先卸载所有的WinCVS系统,删除安装目录下的残留文件。
4. 打开注册表编辑器,全程查找cvs关键字,找到一个删除一个,一直到找不到为止!!:)
5. 重新安装WinCVS,这个问题基本上就可以解决了,我就是这样解决,不晓得你那里如何?:)