Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1316551
  • 博文数量: 161
  • 博客积分: 10192
  • 博客等级: 上将
  • 技术积分: 2165
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-27 17:09
文章分类

全部博文(161)

文章存档

2012年(2)

2011年(13)

2010年(137)

2009年(5)

2008年(4)

我的朋友

分类: LINUX

2010-07-21 00:55:04

CVS:
---------------------------------------------------------------------
环境:centos4.3 winxp                        
服务器端
=============================
1。 查看你的操作系统上是否安装了CVS,如果没有则用YUM安装.
#  rpm -qa|grep cvs 
cvs-1.11.17-9.RHEL4
............
2。建立cvs用户组:
# groupadd cvs
3。建立cvs组的cvsroot用户和所属的目录:
#  useradd -g cvs -G cvs –d /cvsroot cvsroot
4。为cvsroot用户添加密码:
#  passwd cvsroot
5。改变 /cvsroot/ 的目录属性:
#chmod –R 775 /cvsroot
#chown -R cvsroot:cvs /cvsroot
6。进行初始化,/cvsroot就成为CVS服务器的根目录,以后创建的目录都将默认的存放在这个目录下。
#  cvs –d /cvsroot init
7。建立CVS服务启动文件,我们使用xinetd方式:
#  cd /etc/xinetd.d
#  vi cvspserver
service cvspserver
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
env = HOME=
server= /usr/bin/cvs
server_args= -f --allow-root=/cvsroot --allow-root=/cvsroot/project2 pserver
log_on_failure += USERID
log_on_success += USERID
}
注:
 (1)env = HOME=这一行的目的就是为了解决在执行一些cvs操作时产生的读取/root/.cvsignore文件的错误,上面env那行的意思就是在运行 cvs服务的时候将环境变量HOME置空,这样虽然执行cvs的用户是root,但是由于没有了HOME这个环境变量,所以cvs就不会在去读取 /root/.cvsignore文件了。 
(2)由于xinetd的server_args长度限制,当你想运行很多的单个仓库的时候,可以这么做:
# vi cvspserver
service cvspserver
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
env = HOME=
server = /cvsroot/cvs.run
log_on_failure += USERID
log_on_success += USERID
}
编写cvs.run脚本
#vi /cvsroot/cvs.run
#!/bin/bash
/usr/bin/cvs -f --allow-root=/cvsroot pserver
# chmod +x /cvsroot/cvs.run
10。加入cvs服务.如果有就不用了.
# vi /etc/services
cvspserver 2401/tcp #pserver cvs service
cvspserver 2401/udp #pserver cvs service
11。启动cvs服务:
#  /etc/init.d/xinetd restart
12。检查cvspserver服务是否已经启动:
#  netstat -l |grep cvspserver
应该有 如下结果:
tcp 0 0 *:cvspserver *:* LISTEN
13。添加cvs用户
#adduser -g cvs -s /sbin/nologin username
#passwd username
然后在用户的属性文件.bash_profile最后添加exit
再修改/etc/group,添加用户到CVS组。
14。最后,我们试用一下:
#cvs -d :pserver:trotter@192.168.1.200:/cvsroot login
输入密码即可登陆.如果权限问 题可能造成无法登陆,修改目录权限即可.

客户端1
---------------------------

windows 下TortoiseCVS
1.TortoiseCVS的下载()、 安装类似普通WINDOWS程序,不过需要重新启动,因为它要和资源管理器集成。
2.重启之后,在桌面点击右键,菜单会多两个CVS菜 单,CVS--prefernces--language,从下拉框中选择
windows默认,不用选择chinese [GB2312],否则会乱码,点击确定。
3.在桌面随便新建一个文件夹,例如a,再在 文件夹上点击鼠标右键,选择CVS--创建新模块。
在CVSROOT后面框内输 入":pserver:trotter@192.168.0.245:2401/cvsroot"然后点击确认。在弹出的对
话框输入密码即可。
4.这时再看A文件夹,发现上面图标变化了.
进入文件夹,新建一个文本文件,点击鼠标右键,选择CVS添 加,表示该文件加入CVS版本控制,确定后,文件上
面也会多一个+号图标,
再在文件夹或者文件上点击右键,选择CVS提交,输入一些说明文字即可。(文件右键表示单个文件提交,文件夹
右键表示提交所有文件夹里面状态变化的文件)
再换一个目录,点击鼠标右键,选择CVS取出,在CVSROOT列表选择刚才的配置,在模 块那里点击获取列表,这时
下拉框就会填充CVS里面存在地模块名称,选择一个确定,即取出了工作目录。
5.由于它自带中文语言包,具体还有一些细节很容易看明白 并且应用的。尽量多试一试,有很多意想不到的很体
贴用户的使用方法。最后记得在属性那里配置一下比较工具和合并工具。

客户端2 wincvs
---------------------------

 WinCVS的配置与使用方法
1、WinCVS简介:
WinCVS是CVS的一个客户端软件,它运行在Windows上,用来在Windows上登录CVS服务器,然后进行一些CVS相关的操作与管理。由于当前很多的企业内部都采用Linux/Unix做服务器,而用Windows做客户端,所以,WinCVS与CVS服务器配合使用将组成最强有力的版本控制与管理的系统之一。
2、WinCVS的下载与安装;
   最新的WinCVS可以从php?group_id=10072地址下载到,也可以在 上下载到最新的或其它版本的WinCVS。
   下载到相应的版本后根据向导进行安装,已经要使用CVS的用户,安装这个WinCVS应该没什么问题吧!
3、配置WinCVS:
a、一般选项的设置,选择Admin->references…,出现如下界面:
   
第一、Authentication:用来配置cvs服务器的认证方式,可以从下拉框中选择其它的认证方式,不过一般只要选择默认的pserver方式就可以,要注意的是必须与cvs服务器配置时所指定的认证方式一致;
第二、Path:用来配置cvs在服务器上的主目录路径,也就是服务器上用进行cvs初始化的目录,如:/home/cvsroot;
第三、Host Address:用来配置cvs服务器所在服务器的地址,可以是IP地址,也可以是DNS名,如:10.104.1.204;
第四、User name:用来配置要使用些WinCVS来登录CVS服务器的用户名,如:cvsyxwu,用户的登录必须由管理员把其添加cvs用户组中;
第五、CVSROOT:此项一般都不需要用户进行修改,用户在输入上边的几个选项时,系统将自动根据用户的输入生成此项的相应内容。
b、全局选项的设置,在上一个界面上选择“Globals”:
   
   此项的配置主要是要注意这几选项:
第一,Checkout read-only不要选上,否则,checkout出来的源代码将不允许用户进行
修改,并且此选项默认是选中的;
第二,Prune (remove) empty directories也不要选上,否则,会自动删除空目录;
第三,对一般配置没有特殊要求的,把Dirty files support、Supply control when adding
与TCP/IP compression选项选中;
4、登录服务器:
选择Admin->;login,将出现如下对话框要求用户输入登录口令

输入口令后,选择“OK”按钮,如果CVS服务器与WinCVS的配置都没出错的话,将在CVS的状态栏中提示:
cvs -z9 -d :pserver:cvsyxwu@10.104.1.204:/home/cvsroot login
Logging in to :pserver:cvsyxwu@10.104.1.204:2401/home/cvsroot
***** CVS exited normally with code 0 *****
code 0表示正确的登录;而如果出错的话,将是code 1,那么要根据错误的提示进行相应的修改。
5、从CVS服务器上check out相应的模块:
第一,在workspace中的Modules选中要存放checkout模块的目录;
第二,选择Create->;Checkout Modeles,将出现如下对话框:

其中,Module name and path on the server就是要存放checkout 内容的目录,由用户输入;而Local folder to checkout to就是第一中用户所选择的目录。
6、修改之后把文件提交到CVS服务器
a)、只有一个用户对文件进行修改的情况
用自己喜欢的编辑器对checkout出来的文件进行修改,修改之后的文件在没有提交之前会是红色的,如下图example.h文件:
     选中红色的文件example.h后右击选择“Commit Selection”选项,如果没有其它用户也对其进行修改并已经提交到CVS服务器上,一切正常的话将把example.h文件提交到CVS服务器并把图标恢复成原来的颜色。
   b)、两个或两个以上的用户对同一文件的不同部分进行修改的情况
这种情况就是如用户A与用户B都checkout了文件example.h,内容如下:
int callby (int count)
{
    printf("ExcelStor!\n";
}
void main(int argv,char *argc)
{
//added by my cvs
    printf("I am Cather\n";
}
int mainexample()
{
    printf("OK\n";
}
然后用户A修改成如下,并提交到CVS服务器(一般将正常提交):
int callby (int count)
{//add
    printf("ExcelStor!\n";
}
void main(int argv,char *argc)
{
//added by my cvs
    printf("I am Cather\n";
}
int mainexample()
{//add
    printf("OK\n";
}
接着用户B修改成如下:
int callby (int count)
{//add
    printf("ExcelStor!\n";
}
void main(int argv,char *argc)
{
//modified
    printf("I am Cather\n";
}
int mainexample()
{//add
    printf("OK\n";
}
当用户B选择“Commit Selection”时将提示:
cvs server: Up-to-date check failed for `example.h'
cvs [server aborted]: correct above errors first!
此时表明已经有用户对同一个文件example.h进行修改并提交到CVS服务器,这时
要先选择“Update Selection”对本地example.h与CVS服务器上的example.h文件进行
同步与合并,不用选中出现的任何选项,直接选择“OK”,这时将显示如下:
  cvs -z9 update example.h (in directory C:\my cvs\STW\src\)
RCS file: /home/cvsroot/STW/src/example.h,v
retrieving revision 1.5
retrieving revision 1.6
Merging differences between 1.5 and 1.6 into example.h
M example.h  

***** CVS exited normally with code 0 *****
      表明用户B与用户A的修改已经合并成功,同时文件example.h的图标也将变成红色,合并后的文件是存放在用户B的本地机上,为了更新到CVS服务 器还必须选中example.h并右击选择“Commit Selection”才能把用户A与用户B的修改合并后的结果提交到CVS服务器上。注:M表示此文件已经被修改过。
  c)、两个或两个以上的用户对同一个文件的相同部分进行修改的情况
      这种情况就是如用户A与用户B都下载了文件example.h,内容如下:
void main(int argv,char *argc)
{
    printf("I am Cather\n";
}
然后用户A把文件修改成如下,并提交到CVS服务器(一般将正常提交):
void main(int argv,char *argc)
{
    printf("I am Cather\n");
    printf("I am Pat\n");
}
接着用户B又把文件修改成如下:
void main(int argv,char *argc)
{
    printf("I am Cather\n");
    printf("I love you Cather\n");
}
如果用户B这时选择“Commit Selection”准备把修改结果提交到CVS服务器,此
时将显示如下的错误提示:
   cvs -z9 commit -m "update in 11:20" example.h (in directory C:\my cvs\STW\src\)
cvs server: Up-to-date check failed for `example.h'
cvs [server aborted]: correct above errors first!

***** CVS exited normally with code 1 *****
  表明用户B的修改与其它用户的修改冲突,这时要先选择“Update Selection”,将显示如下提示:
  cvs -z9 update example.h (in directory C:\my cvs\STW\src\)
RCS file: /home/cvsroot/STW/src/example.h,v
retrieving revision 1.9
retrieving revision 1.10
Merging differences between 1.9 and 1.10 into example.h
rcsmerge: warning: conflicts during merge
cvs server: conflicts found in example.h
C example.h
  
***** CVS exited normally with code 0 *****
  example.h前面的C表示与其它用户的修改有冲突,并且文件的图标会加显示一个“C”,如下所示:
   
双击example.h将显示example.h的内容,如下:
   void main(int argv,char *argc)
{
    printf("I am Yanxi\n");
    printf("I am Cather\n");
<<<<<<< example.h
    printf("I love you Yanxi,too!\n"); //这部分为你的修改
=======
    printf("I love you Cather!\n"); //这部分为其它用户的修改
>;>;>;>;>;>;>; 1.10
}
这时你应该与用户A进行协商以决定最终要怎样修改。比如,可以修改成:
void main(int argv,char *argc)
{
        printf("I am Yanxi\n");
    printf("I am Cather\n");
    printf("I love you Yanxi,too!\n"); //这部分为你的修改
    printf("I love you Cather!\n"); //这部分为其它用户的修改
}
然后选择“Commit Selection”进行提交,将显示如下的提示信息:
cvs -z9 commit -m "update in 11:20" example.h (in directory C:\my cvs\STW\src\)
Checking in example.h;
/home/cvsroot/STW/src/example.h,v  <--  example.h
new revision: 1.11; previous revision: 1.10
done

***** CVS exited normally with code 0 *****
表明用户A与用户的修改已经合并成功。

这样,向CVS服务器提交文件所会遇到的问题也基本上就是这些,用户要根据所遇到的实际问题进行修改。
7、向CVS服务器添加新文件
    在本地添加文件后,要提交到服务端。先选中文件,然后点击“添加按钮”,添加文件后,再在右键菜单中选择提交命令“Commit Selection”即可。
   
如图,选中文件example.h.bak,因为example.h.bak当前不是CVS的文件,此时“添加按钮”将由不可选状态变成可选状态,所以 Status中显示为“NonCvs file”,选择“添加按钮”之后example.h.bak图标将变成红色并增加了一个A字母,如下:
     
然后选中example.h.bak,右击,选择“Commit Selection”把文件example.h.bak提交到CVS服务器上而成为CVS的一个文件。
8、结束语
来到这里,你基本上已经能为自己或公司配置一个实用的CVS服务器与WinCVS客户端,配合使用CVS进行系统开发或其它文档的版本管理与控制。


客户端3
-----------------------------
Unix下常用CVS命令整理
1.登录:
$export  CVSROOT=:pserver:username@the_server_name:/cvsroot  
Note:pserver是访问方式,如果服务器设置的是口令认证,则是 pserver。
      username是  CVS服务器的用户名,可以根据你的设置修改;
      the_server_name是CVS服务器的名称或者IP地址;
      /cvsroot是你的CVS服务器的CVSROOT目录,根据你的CVS服务器设置做修改或者询问管理员.
登陆CVS服务器:  
$cvs  login
 
这时候cvs会问你口令,请把你在CVS服务器上的口令敲进去:
Passwd:xxxxxxxx
 
2. 提交项目--import
   cvs import [-options] repository vendortag releasetag...
Note: 该命令将当前目录下的所有文件(包括子目录)导入源代码储存库。
    repository :项目名称,在CVS服务器上会创建以这个名字命名的仓库。
    vendortag :  项目分支的总标记。(不常用)
    releasetag :标识文件的输入层次的标记。 (一般用start)
  使用import提交项目的时候,CVS会要求对项目进行说明。在默认状态下,CVS会弹出文本编辑器。用户也可以用-m “log_message”来输入说明信息。
例如
$cvs import -m "upload the first time as new module" judecvs v_0_0_1 start
 
提示:import 一般在第一次导入module时使用。后期修改文件后可直接使用commit命令提交修改的文件。
  
3. 别的同事可以从CVS导出项目--checkout
   cvs checkout [options] modules...
    此命令将源代码储存库中已有的项目导出到当前目录。
    modules :项目名称
例如,从仓库中检索出judecvs项目的源文件. 
$cvs  checkout  judecvs
 
4.CVS 主要命令---update 更新当前工作目录中的文件
  cvs update [-options] [files...]
   此命令比较指定CVS源码库中的文件和当前目录下的文件,如果CVS源码库中有更高版本的源文件,则更新当前目录下的文件。此命令只有在checkout 命令使用过后才能使用。
   在执行update命令时,CVS并不是简单的将新版本覆盖当前文件,而是试图将新版本所做的修改添加到当前文件中去。如果发生冲突,CVS会以字符串 “<<<<<<”和“>>>>>>”来表示冲突发生。这时候你可以修改文件, 重新提交。
提示:如果你已经做过一次checkout了,那么不需要重新checkout,只需要 进入cvstest项目的目录,更新一把就行了:
  
例如:
$cd  judecvs  
$cvs  update
 
5.CVS 主要命令---status 如果你不想直接更新,只是想看看有没有更新的东西,那么:  
$cvs  status
会给每个文件有一份状态报告,类似这样:  
==================================================
File:  client.c                    Status:  Up-to-date  
      Working  revision:        1.1.1.1  'Some  Date'  
      Repository  revision:  1.2          /home2/cvsroot/judecvs/client.c,v
  
这里最重要的就是  Status  栏,这里总共可能有四种状态:  
Up-to-date:表明 你要到的文件是最新的.  
Locally  Modified:表明你曾经修改过该文件,但还没有提交,你的版本比仓库里的新.  
Needing  Patch:表明有人已经修改过该文件并且已经提交了!你的版本比仓库里的旧.  
Needs  Merge:表明你曾经修改国该文件,但是别人也修改了这个文件,而且还提交给仓库了!
 
6.CVS 主要命令---commit 保存修改到CVS中
  cvs commit  [-lnR]  [-m 'log_message' | -f file] [-r revision] [files...]
   此命令将当前目录下的源代码与CVS中最新版本比较,并进行更新。
   [-m ‘log_message‘ ] :输入修改说明。
   [-r revision] :指定版本。
   [files...] :指定修改文件。
 
$cvs  commit  -m  "add XXX function"   client.c
 
系统会提示
CVS: ----------------------------------------------------------------------
CVS: Enter Log.  Lines beginning with `CVS:' are removed automatically
CVS:
CVS: Committing in .
CVS:
CVS: Modified Files:
CVS:    client.c
CVS: ----------------------------------------------------------------------

 
退出后,系统询问是否continue,输入c,则完成checkin  
Log message unchanged or not specified
a)bort, c)ontinue, e)dit, !)reuse this message unchanged for remaining dirs
Action: (continue) c
Checking in client.c;
/home2/cvsroot/judecvs/client.c,v  <--  client.c
new revision: 1.2; previous revision: 1.1
done

 
如果CVS上文件已经有其他人更新,也就是我当前工作的不是最新版本,系统提 示commit失败,这时候需要先update,然后把整合文件再commit.
cvs server: Up-to-date check failed for `client.c'
cvs [server aborted]: correct above errors first!
cvs commit: saving log message in /tmp/cvsCEjA9N
 
提示:修改文件之前先update或者先查看文件状态,确认当前工作版本是最 新版本。
 
7.添加文件到项目中---add 
   cvs add [-k kflag] [-m 'message'] files...
    此命令并不真正添加文件,只是将文件注册到项目中,要真正添加文件,还要使用commit命令。
 例如:
$cvs add -m "test add" testadd.c
 
提示:
cvs server: scheduling file `testadd.c' for addition on branch `v_0_0_2'
cvs server: use 'cvs commit' to add this file permanently
 
$cvs commit
同commit过程一样,CVS将testadd.c添加到项目中
 
8.CVS 主要命令---remove 从项目中删除文件
  cvs remove [-k kflag] [-m 'message'] files...
   和add命令一样,此命令并不真正删除文件,只是将文件从项目中取消,要真正删除文件,还要使用commit命令。
  e.g.
  $rm testadd.c
  $cvs rm testadd.c
系统提示
cvs server: scheduling `testadd.c' for removal
cvs server: use 'cvs commit' to remove this file permanently

 
 $cvs  commit testadd.c
 此时,CVS才将testadd.c从项目的最新版本中删除,但是如果它有以前的版本,以前版本依然存在。
 
一些常用命令的简化形式:
cvs co
cvs up filename 提交修改
cvs ci filename  确认修改
cvs log filename 察看修改日志
cvs st filename  察看文件状态
cvs rm filename 将某个源文件物理删除
-------------------------------------------------
另一网友的CVS命令行详细介绍:



Subbersion服务器端+TortoiseSVN客户端:
------------------------------------------------------------------------------

1.yum install subversion.x86 mod_dav_svn
2.自动生成/etc/httpd/conf.d/subversion.conf
建立多个版本库配置文件(单版本库配置文件更简单):
vi /etc/httpd/conf.d/subversion.conf
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

   DAV svn
   SVNParentPath /var/www/svn
      AuthType Basic
      AuthName "Authorization Realm"
      AuthUserFile /etc/httpd/conf.d/httpasswd
      Require valid-user



   DAV svn
   SVNParentPath /var/www/site
      AuthType Basic
      AuthName "Authorization Realm"
      AuthUserFile /etc/httpd/conf.d/site-httpasswd
      AuthzSVNAccessFile /etc/svnusers
      Require valid-user



   DAV svn
   SVNParentPath /var/www/test
      AuthType Basic
      AuthName "Authorization Realm"
      AuthUserFile /etc/httpd/conf.d/test-httpasswd
      AuthzSVNAccessFile /etc/svnusers
      Require valid-user


3.建立svn用户的权限文件
vi /etc/svnusers
[groups]
admin=site,test
dev=site2,test2
guest=site3,test3
[/]
@admin=rw
@dev=rw
@guest=r
[/site2]
@admin=rw
@dev=rw
@guest=r
[/test2]
@admin=rw
@dev=rw
@guest=r

4.在svn下建立多个项目,访问密码相同,访问方式为
mkdir -p /var/www/site/site2
mkdir -p /var/www/test/test2
svnadmin create /var/www/site/site2 
svnadmin create /var/www/test/test2 
chown -R apache. /var/www/site
chown -R apache. /var/www/test

5.添加不同组的用户
htpasswd -c /etc/httpd/conf/site-htpasswd site
htpasswd -c /etc/httpd/conf/site-htpasswd site2
htpasswd -c /etc/httpd/conf/site-htpasswd site3

htpasswd -c /etc/httpd/conf/test-htpasswd test
htpasswd -c /etc/httpd/conf/test-htpasswd test2
htpasswd -c /etc/httpd/conf/test-htpasswd test3

6./etc/rc.d/init.d/httpd restart

7. client install TortoiseSVN

8. test
 
 
 

9.回滚文件
windows下用tortoisesvn回滚到旧文件(回滚日志法):
选中想要恢复变更的文件或者文件夹。如果想要恢复所有的变更,需要选中最顶层的文件夹。
选择TortoiseSVN → 显示日志,显示出版本列表。有可能需要使用全部显示或者下100 按钮,把想要恢复的版本显示出来。
选中想要恢复的版本。如果想要恢复一个版本范围,选中想要恢复的第一个版本,按住shift键,然后选中想要恢复的最后一个版本。注意,当恢复多个版本的时候,这些版本必须在列表中是连续的。用鼠标右键点击选中的版本(段),然后选择右键菜单 → 恢复这些版本的变更。
10. unix like comm:
svn checkout
svn update fielname
svn commit filename
svn add filename
阅读(931) | 评论(0) | 转发(0) |
0

上一篇:EMOS

下一篇:FIND+XARGS

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