Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1646830
  • 博文数量: 268
  • 博客积分: 8708
  • 博客等级: 中将
  • 技术积分: 3764
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-06 15:58
文章分类

全部博文(268)

文章存档

2014年(1)

2013年(15)

2012年(23)

2011年(60)

2010年(51)

2009年(12)

2008年(59)

2007年(47)

分类: LINUX

2007-04-06 16:09:08

1安装前准备
OS
RHEL3
11
需要的软件包
cvs-1.11.20.tar.gz

下载:


2
安装步骤
21
卸载系统缺省安装的CVS
使用下面命令查看
#rpm -qa |grep cvs
cvs-1.11.2-25


然后卸载CVS
# rpm -e cvs-1.11.2-25

 

22安装源码包
# tar -zxvf  cvs-1.11.20.tar.gz
# cd cvs-1.11.20
# ./configure --prefix=/usr/local/cvs --exec-prefix=/usr --disable-server-flow-control
# make
# make install

 

3配置步骤
31
建立用户

建立cvs用户组,便于管理cvs用户
# groupadd cvs 

建立cvs组的cvsroot用户和所属的目录
# useradd -g cvs -G cvs -d /home/cvsroot -s /sbin/nologin cvsroot

cvsroot用户添加密码  
    passwd   cvsroot  

 

改变/home/cvsroot的目录属性

# chmod 755  /home/cvsroot

 

添加环境变量

vi /etc/profile

CVSROOT=/home/cvsroot

export CVSROOT

 

32配置服务

 

cvs服务由inted来唤起,因此需要改动inetd提供的服务,如果你的redhat使用的是inetd   方式则在文件/etc/inetd.conf中加入如下的内容:cvspserver   stream   tcp   nowait   root   /usr/bin/cvs   cvs   --allow-root=/home/cvsroot   pserver   (在一行)

编辑/etc/xinetd.d/cvspserver,修改内容如下:
------------------------------------------------------------------------------------
service cvspserver
{

port = 2401
  flags = REUSE
  socket_type = stream
  wait = no
  user = cvsroot
  protocol = tcp

Env = HOME=
  server = /usr/bin/cvs
  server_args = -f --allow-root=/home/cvsroot pserver
  disable = no
}
-------------------------------------------------------------------------------------------------
参数说明:
--allow-root
是指定Repository的目录,可以建立多个Repository
pserver
表示是口令认证的访问方式,如果想要更高的安全性可以使用ssh来加密口令和数据流

 

加入cvs服务(我的redhath7.3缺省就有cvs服务,所以不用加)  
vi   /etc/services  
cvspserver   2401/tcp   #pserver   cvs   service  
cvspserver   2401/udp   #pserver   cvs   service  

 

33重新启动服务
# /etc/rc.d/init.d/xinetd restart
Stopping xinetd:   [  OK  ]
Starting xinetd:  [  OK  ]
重新启动xinetd服务后,CVS服务也开始工作了。

 

检查cvspserver服务是否已经启动  
    netstat   -l   |grep   cvspserver  
   
应该有如下结果:  
    tcp   0   0   *:cvspserver     *:*   LISTEN  

 

34初始化CVS服务器
# cvs -d /home/cvsroot init
命令执行后会在/home/cvsroot目录中就产生了CVSROOT目录,其中存放了一些配置文件,如config等,然后设置权限:
# chown -R cvsroot.cvs /home/cvsroot
# chmod -R ug+rwx /home/cvsroot
# chmod 644 /home/cvsroot/CVSROOT/config

35建立密码生成文件
建立密码生成文件passwdgen.pl,并设置为可执行
# vi /home/cvsroot/passwdgen.pl
--------------------------------------------------------------------------------------------------------------
#!/usr/bin/perl
              srand (time());
              my $randletter = "(int (rand (26)) + (int (rand (1) + .5) % 2 ? 65 : 97))";
              my $salt = sprintf ("%c%c", eval $randletter, eval $randletter);
              my $plaintext = shift; my $crypttext = crypt ($plaintext, $salt);
              print "${crypttext}\n";
--------------------------------------------------------------------------------------------------------------
# chmod +x /home/cvsroot/passwdgen.pl

假设要生成的密码为"111111",则使用如下命令
# /home/cvsroot/passwdgen.pl "123456"
RGMogKjCYuqRo
结果"
RGMogKjCYuqRo "即为所要的密码

36建立CVS用户
在目录/home/cvsroot/CVSROOT/下创建三个用户配置文件:passwdwritersreaders
# vi /home/cvsroot/CVSROOT/passwd
--------------------------------------------------------------------------------------------
peng_ji:
RGMogKjCYuqRo:cvsroot
hu_mingjie: RGMogKjCYuqRo:cvsroot
----------------------------------------------------------------------------------------------
增加两个用户writerreader

# vi /home/cvsroot/CVSROOT/writers
----------------------------------------------------------------------------------------------
writer
-----------------------------------------------------------------------------------------------
设置具有读写权限的用户writer,密码111111

# vi /home/cvsroot/CVSROOT/readers
----------------------------------------------------------------------------------------------
reader
-----------------------------------------------------------------------------------------------
设置具有读权限的用户reader,密码111111


4
测试
使用下面命令进行测试
# cvs -d :pserver:cvsroot@172.16.10.234:/home/cvsroot login

输入密码后,没有收到任何消息,即表示成功

 

五、创建用来访问cvs的用户 

前面创建的cvs用户是cvs仓库管理用户,而为了让用户访问则还需要一个访问用户: 
# useradd cvspub (cvsroot)
# usemod -G cvs cvspub 
这里添加了一个用户cvspub,并且将该用户添加到cvs组中。 

然后编辑 cvs 管理员家目录里 CVSROOT/passwd 文件,加入下面几行: 

laser:$xxefajfka;faffa33:cvspub 
gumpwu:$ajfaal;323r0ofeeanv:cvspub 
henry:$fajkdpaieje:cvspub 
betty:fjkal;ffjieinfn/:cvspub 
anonymous::cvspub 
注意:上面的第二个字段(分隔符为 :)是密文口令,你要用程序或者用我的土办法生成。 
编辑 readers 文件,加入下面几行: 
anonymous 
betty 
编辑 writer 文件,加入下面几行: 
laser 
gumpwu 
henry 

 

 

七、建立新的CVS项目

进入到已有项目的目录,比如叫 cvstest 
$cd cvstest 
运行命令将项目文件导入到cvs仓库中: 
$cvs import -m "this is a cvstest project" cvstest v_0_0_1 start 
说明:import cvs的命令之一,表示向cvs仓库输入项目文件. 
-m
参数后面的字串是描述文本,对项目进行描述,如果不加 -m 参数,那么cvs会自动运行一个编辑器(一般是vi,但是可以通过修改环境变量EDITOR来改成你喜欢用的编辑器)让你输入信息,cvstest 是项目名称(实际上是仓库名,在CVS服务器上会存储在以这个名字命名的仓库里) 
v_0_0_1
是这个分支的总标记.没啥用(或曰不常用) 
start 
是每次 import 标识文件的输入层次的标记,没啥用。 
这样我们就建立了一个CVS仓库了,然后,我们可以把这个测试项目的文件删除,试验如何从仓库获取文件这会在后面的客户端文章进行说明

 

导入项目:

进入到已有项目的目录,比如叫 cvstest 
$cd cvstest 

cvs –d /home/cvsroot import simmv simmv_pro ver_o-1

 

 

 

找相应的客户端软件,这里我先说一下在 Linux*nix)里怎么做:

  1. 设置环境变量CVSROOT

 

$export CVSROOT=:pserver:laser@the_server_name:/home/cvsroot

注意:这里的pserver是访问方式,我在上面设置的是口令认证,所以这里是pserver,如果你的CVS服务器设置成别的访问模式,那么需要相应修改.laser是可以使用 CVS服务器的用户名,这里可以根据你的设置修改,我在这个版本设置的是直接使用系统用户的口令文件,也就是说laser必须是CVS服务器上的合法用户,这里当然有安全问题,CVS可以设置成为拥有自己的用户,我将在以后的版本里面增加这些内容,或者您也可以提供一些补充,或者直接读CVS的文档.the_server_nameCVS服务器的名称或者IP地址,根据你的情况填写,/home/cvsroot是你的CVS服务器的CVSROOT目录,根据你的CVS服务器设置做修改或者询问管理员.你可以把这行放到你的shellprofile里(.bash_profile.profile等)这样就不用每次敲一长串命令了.
 

  1. 登陆CVS服务器:

 

$ cvs login,这时候 cvs 会问你口令,请把你在 CVS 服务器上的口令敲进去,这里是 laser CVS服务器上的系统用户的口令:
 Passwd:xxxxxxxx


成功登陆后将在你的家目录建立一个 .cvspass 文件,以后就不用输入口令了.

好,客户端设置完成,简单吧.

 

 

 

CVS服务器的安装和配置
Watchers
WinCVS
的安装和配置
CVSWEB
的安装


概述
==================================

CVS
是一个并行版本控制系统,它采用C/S模式,它的复杂度和功能性属于中等,是当今最流行的版本控制系统。它有两个基本的特点:
*
保存修改记录:保存了所有文件的修改历史,并可以建立分支
*
协作与并行:cvs不推荐使用lock-modify-unlock的串行的工作模式,而采用多人可以并行地修改同一个文件,而在提交时merge conflict;它更适合于大型的工作团体。
使用CVS的好处:
*
文件集中管理,大家都可以方便的看到所有人员的最新文件,规范化了文件的管理
*
可以查看以前任何的一个版本或修改历史
*
可以同时维护多个版本和分支


CVS
环境设置
==================================

先不要管CVS服务器的配置,我们先假设已经有一台配置好的服务器,要访问CVS,必需先设置环境变量CVSROOT
CVSROOT=:pserver:user@server#port:/path/to/cvsroot

*pserver
是访问方式,口令认证的意思,这是最常用的方式,其他还有gserver,kserver,ext
*user
CVS服务器的用户名,
*server
CVS服务器的名称或者IP地址
*/path/to/cvsroot
是你的CVS服务器的CVSROOT目录,根据你的CVS服务器设置做修改或者询问管理员
你可以把设置放到你的shellprofile里(.bash_profile.profile等)这样就不用每次敲一长串命令了

高级功能:现在比较流行是使用ssh来加密口令和数据流
CVSROOT=:ext:user@server#port:/path/to/cvsroot
CVS_RSH=ssh
hints:
实际上没有CVSROOT也可以,你可以每次用cvs -d :pserver:user@server#port:/path/to/cvsroot来访问,而且它将忽略CVSROOT环境变量,也许你会笑我只有疯子才这么用,不过,cvs可以把每次使用的命令参数放到一个文件中,所以在~/.cvsrc中加入
cvs -d :pserver:user@server#port:/path/to/cvsroot
即可,它最大的好处是修改了立刻生效,而且它的优先级高于CVSROOT环境变量,到时候不要傻乎乎地来问我,我的环境变量真么不起作用了。


登录CVS服务器: 
==================================
$cvs
 login,这时候cvs会问你口令,请把你在CVS服务器上的口令敲进去
如果没有任何错误信息,恭喜你,成功了!
成功登录后将建立一个~/.cvspass文件,保存你的口令,以后就不用输入口令了.

cvs
命令格式
==================================
cvs [global_opts] command [command_opts] [command_args]
Global options
属于左边cvs的,是全局的
command_opts
属于左边command的,是局部的
cvs --help-commands
查看命令列表
cvs -H command/cvs -help command
查看该命令的选项
hints:
如果你每次使用一些命令都带同样的参数的话,可以把它们放到~/.cvsrc文件中去
update -c
diff -c
add -kb
cvs -Q


cvs global-option comand comand-option arguments

CVS
的日常使用
==================================
CVS
使用流程
a checkout
尽当本地没有working copy时使用
b staus
检查服务器上是否有新版本
c update
如果有,则用update同步文件
d
做你自己的修改,并保证正确
e update
看是否有人修改了你的文件
f
如果有冲突,合并冲突
g commit
提交你的修改,如果因为又有人提交修改而失败,回到e
h
回到b

1 cvs checkout module_name
-------------------------------------
module_name
可以暂时理解为目录名,它会在本地但前目录下建立module_name目录,在把服务器上说有module_name目录下的文件copy到本地module_name目录下。
注意:第一次checkout后,就不是通过cvs checkout来同步文件了,而是要进入该目录下进行具体文件的版本同步(添加,修改,删除)操作。

2 cvs update filename
-------------------------------------
将文件同步到最新的版本:不指定文件名,cvs将同步所有子目录下的文件。
最好每天开始工作前或将自己的工作导入到CVS库里前都要做一次,并养成"先同步 后修改"的习惯,和Virvual SourceSafe不同,CVS里没有文件锁定的概念,所有的冲突是在commit之前解决,如果你修改过程中,有其他人修改并commit到了CVS 库中,CVS会通知你文件冲突
<<<<<<< filename
你文件上的内容
=======
服务器上文件的内容
>>>>>>> latest revision number in the repository

由你确认冲突内容的取舍。也可以多人协商解决,修改完成后去掉文件中的冲突标志

conflict:
多人修改同一文件的同一区域这就叫冲突,它必须由人来解决,CVS不处理冲突,它只是告诉你存才冲突


3 cvs commit -m "write some comments here" file_name
------------------------------------
确认修改写入到CVS库里。
注意:CVS的很多动作都是通过cvs commit进行最后确认并修改的,最好每次只修改一个文件。在确认的前,还需要用户填写修改注释,以帮助其他开发人员了解修改的原因。如果不用写-m "comments"而直接确认`cvs commit file_name` 的话,cvs会自动调用系统缺省的文字编辑器(一般是vi)要求你写入注释。
注释的质量很重要:所以不仅必须要写,而且必须写一些比较有意义的内容:以方便其他开发人员能够很好的理解
不好的注释,很难让其他的开发人员快速的理解:比如: -m "bug fixed" 甚至 -m ""
好的注释,甚至可以用中文: -m "在用户注册过程中加入了Email地址校验"

修改某个版本注释:每次只确认一个文件到CVS库里是一个很好的习惯,但难免有时候忘了指定文件名,把多个文件以同样注释commitCVS库里了,以下命令可以允许你修改某个文件某个版本的注释:
cvs admin -m 1.3:"write some comments here" file_name

4
查看状态
------------------------------------
cvs
 status filename
状态报告,类似这样: 
File:
 foo.c             Status: Up-to-date 
   Working revision:    1.1.1.1 'Some Date' 
   Repository revision: 1.2     /home/cvsroot/cvstest/foo.c,v 
   Sticky Tag:          (none) 
   Sticky Date:         (none) 
   Sticky Options:      (none) 

这里最重要的就是Status栏,这里总共可能有四种状态: 
Up-to-date
: 表明你要到的文件是最新的. 
Locally
 Modified: 表明你曾经修改过该文件,但还没有提交,你的版本比仓库里的新. 
Needing
 Patch: 表明有个哥们已经修改过该文件并且已经提交了!你的版本比仓库里的旧. 
Needs
 Merge: 表明你曾经修改该文件,但是偏偏有个不识相的也修改了这个文件,而且还提交了!

5
查看修改历史和注释信息
------------------------------------
cvs log file_name


其他常用命令
==================================
1
添加文件和目录
------------------------------------
cvs add new_file_name
cvs add -kb new_file_name
cvs add dir_name

CVS
一般只处理文本文件,它会扩展keyword()并转换行结束符
对于图片,Word文档等非纯文本的项目,需要使用cvs add -kb选项,否则有可能出现文件被破坏的情况
然后确认修改并注释
cvs ci -m "write some comments here" new_file_name

2
删除文件
------------------------------------
将某个源文件物理删除后
cvs remove file_name
然后确认修改并注释
cvs ci -m "write some comments here" file_name

注意:很多cvs命令都有缩写形式:commit=>ci; update=>up; checkout=>co; remove=>rm;

3.
修改文件名
------------------------------------
移动文件:文件重命名
cvs
里没有cvs movecvs rename,因为这两个操作是先cvs remove old_file_name,然后cvs add new_file_name实现的。

4
目录结构同步
------------------------------------
如果在你checkout后,有人添加了新的文件或目录,你需要把他们取出来
cvs update -d

5
放弃本地的修改(undo)
------------------------------------
如果修改来了本地文件,不想提交,想重新取新文件
cvs update -C filename
它会先把你的本地文件改名

建议:建议大家把checkout的文件缺省为readonly,"cvs -r"添加到~/.cvsrc文件中
这样,你每次修改一个文件前,先cvs edit filename,提交后文件又变成readonly,
如果你想放弃本地的修改,则cvs unedit filename,它会undo,而且文件又变成readonly


6
恢复到旧版本
------------------------------------
cvs update -j1.20 -j1.15 filenames
1.20
时当前版本号,注意顺序不要反了,记住要commit,为了保证是但前版本号,最好先lock
注意:cvs update -r1.15 file.name,这里的-r不是版本号的意思,是给文件加了一个叫1.15sticky tag
如果不小心已经加成STICK TAG的话:用cvs update -A 解决

7
文件比较
------------------------------------
cvs diff -c filename
cvs diff -c -r1.8 -r 1.5 filename

8
锁定与解锁文件
------------------------------------
为保证串行的修改文件,或修改二
cvs admin -l files
cvs admin -u files


==========================================================================
如果你只是一般性的使用cvs,到此为止就足够了。一个系统20%的功能往往能够满足80%的需求,CVS也不例外,以下是CVS最常用的功能,可能用到的还不到它全部命令选项的10%,更多的功能请在实际应用过程中体会,学习过程中应该是用多少,学多少,用到了再学也不迟。
==========================================================================

CVS
/keyword
==================================
CVS
缺省会对文件进行keyword()替换,在文件中加入这些关键字是个良好的工作习惯
$Id$
关键字是用文件名、版本、时间、作者 及代码性质替换,如果使用-l选项取出,在Exp
面会加上登录用户的名称。除了$Id$关键字,RCS还支持下面常用的关键字:
$Log$ :
你所提供的修改日志信息。
$Author$
:存入该版本的作者。
$Locker$ :
该版本的加锁者
$State$ :
该版本的状态 Exp(试验版), Stabe(稳定版), Rel(发行版).缺省是Exp
$Date$ :
该版本存入的时间,使用UTC时间格式。
$Revision$ :
该版本的版本号
$RCSfile$ : RCS
文件名
$Source$ : RCS
全路径名
$Name$ :
取回该版本的符号名
$Header$ :
相当于$ Source $$ Revision$$Date$$Author $$State$$Locker$的组合


Sticky Tag
==================================
tag
的作用是对多个连续变化的文件做一个快照来表示某一时刻的所有不停内部版本的文件,一般是项目到一定阶段,可以给所有文件统一指定一个阶段里程碑版本号,需要的时候可以一次导出这些版本不一的文件.标记的另外一个非常重要的作用是生成分支和合并分支.
1 cvs tag release_name module_name
------------------------------------
release_name
要简洁而含义丰富,由字母开头,加字母,数字,下划线和连字号组成,特别是不能含“.”
2 cvs checkout -r release_name module_name
------------------------------------
取出tag_name标志的文件
3 cvs update -A
------------------------------------
tag
标识的文件是历史文件,不能修改,这样可在本地去除这个限制,让它和当前版本合并




CVS
分支管理
=============================
CVS
可以将历史划分成多个独立,并行和互不影响的分支,并去修改历史
1
标定里程碑
------------------------------------
cvs tag release_1_0 prj_dir_name

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

3
建立分支
------------------------------------
在开发项目的2.x版本的时候发现1.x有问题,但2.x又不敢用,则从先前标记的里程碑:release_1_0导出一个分支release_1_0_b2
cvs rtag -b -r release_1_0 release_1_0_bugfixes prj_dir_name
-r
修饰的是release_1_0,-b 修饰的是release_1_0_bugfixescvs的版本号将变为4位,以后每分一次支,版本号增加2

4
分支并行开发
------------------------------------
一些人先在另外一个目录下导出release_1_0_bugfixes这个分支:解决1.0中的紧急问题,
cvs checkout -r release_1_0_bugfixes
分支是可以修改的,并自动提交到分支上去
而其他人员仍旧在项目的主干分支2.x上开发

5 tag
分支
------------------------------------
release_1_0_bugfixes上修正错误后,标记一个1.0的错误修正版本号
cvs tag release_1_0_bugfixes_p1

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

7
再次合并分支
------------------------------------
如果又发现1.x新的bug,我在分支已经修改了,并标定了release_1_0_patch_2,我们同样希望把它合并到主干上来
cvs update -j release_1_0_bugfixes_p1 -j release_1_0_bugfixes
它的意思是把release_1_0_bugfixes_p1(tag)release_1_0_bugfixes(分支)变化了的部分合并到当前文件(主干)
否则用6步的方法,则以前合并的内容会重新合并
注意:此时我们使用第5步的结果
教训:尽早频繁的tag,但同时不能导致tag泛滥,tag在不同的分支里可以同名

8
锁定分支
------------------------------------
cvs admin -l r_0_2
锁定r_0_2分支
cvs admin -l
锁定主分支

9
设置缺省分支
------------------------------------
cvs admin -b r_0_2
设定r_0_2为缺省分支
cvs admin -b
设定主分支

10
删除历史记录
如果历史文件过多,或确定有几个阶段的稳定版本,我们可以删除一些历史文件,以保证cvs的性能
cvs admin -o rev1:rev2 filename
删除rev1rev2的版本,含这两个版本
cvs admin -o rev1::rev2 filename
删除rev1rev2的版本,不含这两个版本
如果省略rev1,表示删除本分支rev2之前的所有版本
如果省略rev2,表示删除本分支rev1之后的所有版本
cvs admin -o rev filename
删除rev这个版本的文件
注意:有tag的版本不能被删除,所以tag很重要,而且只能删单个文件


CVS
服务器的安装和配置
=============================
1
下载源码
------------------------------------
可从很多地方下载cvs,也可从官方ftp://ftp.gnu.org/gnu/cvs/下载

2
安装,同很多源码安装一样
------------------------------------
gunzip cvs-1.10.6.tar.gz
tar xvf cvs-1.10.6.tar
cd cvs-1.10.6
./configure
make
make install

3
包的安装,如果找到具体操作系统的安装包,则见此操作系统的使用说明,比如linux
------------------------------------
rpm -ivh cvs-1.10.8-3.i386.rpm
即可

4
建立Repository
------------------------------------
groupadd cvs(
要访问cvs的用户加入此组)
useradd cvsroot
mkdir /home/cvsroot
cvs -d /home/cvsroot init
chown -R cvsroot.cvs /home/cvsroot
chmod -R ug+rwx /homecvsroot

5
配置/etc/services文件
------------------------------------
添加cvspserver,如果有就不要加了
cvspserver 2401/tcp # cvs client/server operations
cvspserver 2401/udp # cvs client/server operations

6
配置inetd
------------------------------------
编辑/etc/inetd.conf,加入
cvspserver stream tcp nowait root /usr/bin/cvs cvs --allow-root=/home/cvsroot pserver
如果使用tcpwrappers
cvspserver stream tcp nowait root /usr/sbin/tcpd /usr/bin/cvs --allow-root=/usr/local/newrepos pserver
如果使用xinetd,编辑/etc/xinetd.d/cvspserver
service cvspserver
{
disable = no
socket_type = stream
wait = no
user = root
env = HOME=
server = /usr/bin/cvs
server_args = -f --allow-root=/home/cvsroot pserver
}
pserver
表示是口令认证,如果要用ssh方式则应该是server
--allow-root
Repository的目录,可以有多个此选项来建立多个Repository

7
验证配置成功
cvs login
看时候能成功登录,有几个可能失败的地方
用户是否属于cvs组和目录权限
inetd
是否正常配置和启动,--allow-root是否写对
8
导入项目
把你的所有项目文件放入prj_dir
cd prj_dir
 cvs import -m "this is a cvstest project" prj_dir v_0_0_1 start
v_0_0_1
是这个分支的总标记.没啥用(或曰不常用)
 start 是每次 import 标识文件的输入层次的标记,没啥用。


Watchers
=============================
cvs
提供了watch的功能,来帮助大家了解谁在干什么,谁在对文件做什么操作,它发email通知,以协调大家的工作。
1
开启watch功能
CVSROOT/notify文件中加入下面行
ALL mail %s -s "CVS notification"
2
设定外部email地址
缺省是把通知信息发给本机的email,要发给别的地址,在CVSROOT/users加入如下内容
hwz:kerlion@netease.com
3 watch
文件的修改
cvs watch add filename
cvs watch remove filename
4 watch
文件的修改
watch
功能是个大家协调的功能,大家必须按一个统一的工作流程来做,如果不cvs editcvs没有办法通知修改情况
cvs edit filename
修改文件
cvs unedit filename
5
提醒大家使用watch功能
cvs
没有强制使用watch的功能,只有这个功能在用户提交完后自动把文件变为只读的,再使用cvs edit filename就可以修改它了
cvs watch on
6
查看那人人再watch
cvs watchers

 

阅读(1399) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:SNMP Agent开发

给主人留下些什么吧!~~