cygwin下建立cvs仓库

原创 2005年03月01日 09:13:00
最由于在自己的机器上安装了Cygwin,天天让他在那里闲着不太好,需要给他派点用途,正好需要一个安装一个CVS服务器,我就决定不采用cvsnt,在我的机器上安装一个Cygwin下的服务。好了,现在开始:
第一步:首先需要安装Cygwin,需要选择以下包
Devl/cvs (当然要了)
Admin/cygrunsrv 用于把cygwin服务加到windows服务中
Net/inetutils 不许要xinetd,因为我在测试使用xinetd时候有很多的问题,没有解决只好使用inetd了。
第二步:安装好了Cygwin后,在windows下建立一个cvsroot的用户。这个用户需要是本地用户,不要是域用户,确定在Cygwin/home目录下有cvsroot户。如果没有切换到这个用户下,运行cygwin就可以了。
第三步:Cygwin环境下,运行iu-config
第四步: 运行 mkpasswd -l > /etc/passwd,将windows用户导入到Cygwin中,然后用编辑器(vi,ultraEdit都可以,就是notepad不行)打开这个文件,只保留Administrator用户和cvsroot用户和其它你认为需要的用户。
第五步:运行inetd服务。运行以下命令
设置windows环境变量:CYGWIN=ntsec。将cygwin/bin加入到PATH中。
在cygwin中运行
cygrunsrv -I inetd -d " CYGWIN inetd " -p /usr/sbin/inetd -a -d -e CYGWIN=ntsec
cygrunsrv -S inetd
就可以在windows服务管理器中看到CYGWIN inetd服务已经启动了。
运行usr/sbin/inetd.exe --install-as-service
从新启动。
由于cygwin不支持su命令,只好使用telnet来切换在cygwin下的用户了。
第六步:建立cvsroot目录,可以建立在/var/cvsroot,如果不想把仓库目录建立在Cygwin环境下,可以使用/cygdrive/d来选择驱动器。在cygwin下选择cvsroot用户,运行cvs -d /cygdrive/d /cvsroot init,配置好cvs服务的根目录,根目录建立在d:/cvsroot下。
第七步,编辑修改/etc/inetd.conf文件,加入:
cvspserver stream tcp nowait cvsroot /bin/cvs cvs -f --allow-root=/cygdrive/d/cvsroot pserver
编辑修改/etc/services,加入:
cvspserver 2401/tcp #cvs server tcp port
cvspserver 2401/dup #cvs server udp port
第八步,配置好cvs用户,和其它系统下的配置一样,网上有很详细的文档,这里就不再多说了。
从新启动inetd服务,就可以了。

在安装过程中需要注意的就是目录的权限问题,在cygwin中建立的文件,只能(最好)在cygwin中管理。
还有在这个cvs下仍然有不区分文件名大小写的问题,在使用的时候需要注意。
如果选用xinetd在安装过程中,我还没有找到注册成功windows服务的方法,所以在这里就不再介绍了。
祝大家使用愉快。



CVS使用经验谈
来自:UML工程组织 作者:龚天乙 [2004/11/22]
CVS 是 Concurrent Version System(并行版本系统)的缩写,用于版本管理。在多人团队开发中的作用更加明显。CVS 的基本工作思路是这样的:在一台服务器上建立一个仓库,仓库里可以存放许多不同项目的源程序。由仓库管理员统一管理这些源程序。这样,就好象只有一个人在修改文件一样。避免了冲突。每个用户在使用仓库之前,首先要把仓库里的项目文件下载到本地。用户做的任何修改首先都是在本地进行,然后用 cvs 命令进行提交,由 cvs 仓库管理员统一 修改。这样就可以做到跟踪文件变化,冲突控制等等。
  由于CVS是建立在在原先 Unix 体系里很成熟的 SCCS 和 RCS 的基础上,所以CVS多是Linux(UNIX)系统中所使用,本文中服务器端设置也是以Linux为例。
  一、CVS服务器的安装
  首先确认系统中是否安装CVS服务:
  [root@localhost /]# rpm -qa|grep cvs
cvs-1.11.2-cvshome.7x.1
  如果命令输出类似于上面的输出则说明系统已经安装有cvs,否则就需要从安装光盘中安装cvs的rpm包,或者到http://www.cvshome.org下载。
  1、建立 CVSROOT
  目录,因为这里涉及到用户对CVSROOT里的文件读写的权限问题,所以比较简单的方法是建立一个组,然后再建立一个属于该组的帐户,而且以后有读写权限的用户都要属于该组。假设我们建一个组叫cvs,用户名是cvsroot。建组和用户的命令如下
#groupadd cvs
#adduser cvsroot
  生成的用户宿主目录在/home/cvsroot(根据自己的系统调整)
  2、用cvsroot 用户登陆,修改 /home/cvsroot (CVSROOT)的权限,赋与同组人有读写的权限: 
  $chmod 771 . (或者770应该也可以)
  注意:这一部分工作是按照文档说明做的,是否一定需要这样没有试验,我会在做试验后在以后版本的教程说得仔细一点。如果您有这方面的经验请提供给我,谢谢。
  3、建立CVS仓库,(仍然是 cvsroot 用户),用下面命令:
  $cvs -d /home/cvsroot init
  4、以root身份登陆,修改 /etc/inetd.conf(使用 xinetd 的系统没有此文件)和 /etc/services
  如果用的是 inetd 的系统,在 /etc/inetd.conf 里加入:
  
  cvsserver  stream tcp nowait root /usr/bin/cvs cvs -f --allow-root=/home/cvsroot pserver
  说明:上面的行是单独一整行,/usr/bin/cvs 应该是你的cvs版本的命令路径,请根据自己的系统调整./home/cvsroot是你建立的CVSROOT的路径,也请根据上面建立目录的部分的内容做调整。
  如果是使用 xinetd 的系统,需要在 /etc/xinetd.d/ 目录下创建文件 cvspserver(此名字可以自己定义),内容如下:
  # default: on
  # description: The cvs server sessions;
  service cvsserver
  {
  socket_type = stream
  wait = no
  user = root
  server = /usr/bin/cvs
  server_args = -f --allow-root=/cvsroot pserver
  log_on_failure += USERID
  only_from = 192.168.0.0/24
  }
  其中only_from是用来限制访问的,可以根据实际情况不要或者修改。修改该文件权限:
  # chmod 644 cvspserver
  在/etc/services里加入:
  cvsserver 2401/tcp
  说明:cvsserver 是任意的名称,但是不能和已有的服务重名,也要和上面修改 /etc/inetd.conf 那行的第一项一致。
  5、添加可以使用 CVS 服务的用户到 cvs 组:
  以 root 身份修改 /etc/group,把需要使用 CVS 的用户名加到 cvs 组里,比如我想让用户 laser 和gumpwu 能够使用 CVS 服务,那么修改以后的 /etc/group 应该有下面这样一行:
  cvs:x:105:laser,gumpwu
  在你的系统上GID可能不是105,没有关系。主要是要把laser和gumpwu用逗号分隔开写在最后一个冒号后面。当然,象RedHat等分发版有类似linuxconf这样的工具的话,用工具做这件事会更简单些。
  6、重起inetd使修改生效:
  #killall -HUP inetd
  如果使用的是 xinetd 的系统:
  # /etc/rc.d/init.d/xined restart
然后察看cvs服务器是否已经运行:
[root@localhost /]# netstat -lnp|grep 2401
  tcp 0 0 0.0.0.0:2401 0.0.0.0:* LISTEN 1041/xinetd
则说明cvs服务器已经运行。

  二、管理CVS服务器
  服务器可以用了,现在大家最关心的就是如何管理服务器,比如,我想让一些人有读和/或写 CVS 仓库的权限,但是不想给它系统权限怎么办呢?
  不难,在 cvs 管理员用户(在我这里是 cvsroot 用户)的家目录里有一个 CVSROOT 目录,这个目录里有三个配置文件,passwd, readers, writers,我们可以通过设置这三个文件来配置 CVS 服务器,下面分别介绍这几个文件的作用:
  passwd:cvs 用户的用户列表文件,它的格式很象 shadow 文件:
  {cvs 用户名}:[加密的口令]:[等效系统用户名]
  如果你希望一个用户只是 cvs 用户,而不是系统用户,那么你就要设置这个文件,刚刚安装完之后这个文件可能不存在,你需要以 cvs 管理员用户手工创建,当然要按照上面格式,第二个字段是该用户的加密口令,就是用 crypt (3)加密的,你可以自己写一个程序来做加密,也可以用我介绍的偷懒的方法:先创建一个系统用户,名字和 cvs 用户一样,口令就是准备给它的 cvs 用户口令,创建完之后从 /etc/shadow 把该用户第二个字段拷贝过来,然后再把这个用户删除。这个方法对付数量少的用户比较方便,人一多就不合适了,而且还有冲突条件(race condition)的安全隐患,还要 root 权限,实在不怎么样。不过权益之计而已。写一个小程序并不难,可以到 linuxforum 的编程版搜索一下,有个朋友已经写了一个贴在上面了。
第三个字段就是等效系统用户名,实际上就是赋与一个 cvs 用户一个等效的系统用户的权限,看下面的例子你就明白它的功能了。
readers:有 cvs 读权限的用户列表文件。就是一个一维列表。在这个文件中的用户对 cvs只有读权限。
writers:有 cvs 写权限的用户的列表文件。和 readers 一样,是一个一维列表。在这个文件中的用户对 cvs 有写权限。
上面三个文件在缺省安装的时候可能都不存在,需要我们自己创建,好吧,现在还是让我们用一个例子来教学吧。假设我们有下面几个用户需要使用 cvs:
laser, gumpwu, henry, betty, anonymous。
其中 laser 和 gumpwu 是系统用户,而 henry, betty, anonymous 我们都不想给系统用户权限,并且 betty 和 anonymous 都是只读用户,而且 anonymous 更是连口令都没有。那么好,我们先做一些准备工作,先创建一个 cvspub 用户,这个用户的责任是代表所有非系统用户的 cvs 用户读写 cvs 仓库。
#adduser
...
然后编辑 /etc/group,令 cvspub 用户在 cvs 组里,同时把其它有系统用户权限的用户加到 cvs 组里。(见上文)
然后编辑 cvs 管理员家目录里 CVSROOT/passwd 文件,加入下面几行:
laser:$xxefajfka;faffa33:cvspub
gumpwu:$ajfaal;323r0ofeeanv:cvspub
henry:$fajkdpaieje:cvspub
betty:fjkal;ffjieinfn/:cvspub
anonymous::cvspub
注意:上面的第二个字段(分隔符为 :)是密文口令,你要用程序或者用我的土办法生成。
编辑 readers 文件,加入下面几行:
anonymous
betty
编辑 writers 文件,加入下面几行:
laser
gumpwu
henry
注意:writers中的用户不能在readers中,要不然不能上传更新文件。

对于使用CVS的用户要修改它的环境变量,例如laser用户的环境变量,打开/home/laser(laser的宿主目录)下的.bash_profile文件,加入
CVSROOT=/home/cvsroot
export CVSROOT
用laser登陆就可以建立CVS项目,如果要root使用,可以修改/etc/profile文件。

现在我们各项都设置好了,那么怎么用呢,我在这里写一个最简单的(估计也是最常用的)命令介绍:
首先,建立一个新的CVS项目,一般我们都已经有一些项目文件了,这样我们可以用下面步骤生成一个新的CVS项目:
进入到你的已有项目的目录,比如叫 cvstest:
$cd cvstest
运行命令:
$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仓库了。
建立CVS仓库的文件夹应该是“干净”的文件夹,即只包括源码文件和描述的文件加,而不应该包括编译过的文件代码等!
三、使用CVS
winCVS是一个很好的CVS客户端软件,在http://cnpack.cosoft.org.cn/down/wincvsdailyguide.pdf可以下载到这个软件的使用手册。这里不在赘述了。
四、用CVS管理项目
本人正在一加公司从事该公司ERP项目的开发,在没有使用CVS的时候,多次出现了由于不同的开发人员修改同一程序,而导致程序错误,解决版本控制问题迫在眉睫。
由于这个项目采用Linux平台下JAVA开发,使用的开发工具Jbulider是支持CVS进行项目管理的,作为主程序员,我决定采用CVS进行版本控制,首先参照上文在Linux服务器上建立了CVS服务,然后我把我本地的工程文件传至服务器。
例如:我的工程文件在F:/ERP下,我把ERP下的erp.jpx文件、defaultroot文件夹和src文件夹上传至服务器/usr/local/erp下,然后登陆Linux服务器,登陆的用户是CVS的用户,其环境变量要正确(我的用户名为admin)
#cd /usr/local/erp
#cvs import -m "this is a ERP project" erp v_0_0_1 start
这样名为erp的CVS仓库就建立了。
之后开发小组的成员可以用winCVS把该项目下载到本地:
打开winCVS
点击工具栏Create -> Create a new repository... 弹出窗口
在Grenral中
Enter the CVSROOT填写admin@192.168.1.9:/home/cvsroot 其中admin是cvs的用户,在本例中admin也是linux的系统用户,192.168.1.9是服务器的地址,/home/cvsroot是CVS的主目录,参考上文。
Authentication中选择"passwd file on the cvs server"
Use version中选择cvs 1.10 (Standard)
其它项默认即可。
确认后,点工具栏Admin --> Login... 会提示输入密码,输入密码后,看看winCvs的状态栏。如果提示
*****CVS exited normally with code 0*****
表示登录正常。
点击工具栏Create --> Checkout module...弹出对话框,其中的Checkout settings项中
Enter the module name and path on the server 填写erp,即我们建立的名为erp的CVS仓库
Local folder to checkout to 选择要下载到本地的目录,我选了F:/myerp
其它项目可以默认,确定后就可以下载到本地了,在F:/myerp/下会有一个erp文件夹,其文件结构和F:/erp下的文件结构是一样的。
用Jbulider打开F:/myerp/erp/下的erp.jpx文件,这个工程文件就可以使用了。
在Jbuilder的工具栏Team --> Select Project VCS 弹出对话框,选择CVS
对于你要进行修改的文件,在Project View中点中该文件,然后点右键,探出快捷菜单,选择CVS --> CVS Edit "xxxx.java(文件名)"
第一次使用可能会提示CVS服务器的密码。
在修改之前还要选择CVS --> Update "xxxx.java(文件名)"
修改之后选择CVS --> Commit "xxxx.java(文件名)"
这样,修改的文件就保存到CVS服务器了,Update的目的是下载、比较文件。每次在修改之前都Update,保持最新版本。
CVS在项目管理使用中确实起到了良好的效果,仔细研究CVS的命令,可以更好的发挥CVS在版本控制上的能力。

CVS与版本控制

-
  • 1970年01月01日 08:00

创建仓库的最简单方式是在命令行使用cvs init命令

  创建仓库的最简单方式是在命令行使用CVS init命令。 Unix:   CVS -d ~/sandbox init Windows:    CVS -d C:/sandbox init     ...
  • thisisvoa
  • thisisvoa
  • 2011-06-10 16:56:00
  • 1093

cvs仓库中的项目文件出现,v

我从wincvs 客户端导入到服务器仓库,cvs仓库中的项目文件出现,v请问怎么去掉。多谢...
  • shangjialei
  • shangjialei
  • 2008-04-15 17:06:00
  • 358

cygwin git 在github创建仓库

本文以testParse项目为例子: 首先确认在cygwin是可以在github上clone项目的,(这个不在讲述) 在cygwin 执行 mkdir testParse --创建目录 ...
  • www203203
  • www203203
  • 2017-06-16 20:52:24
  • 144

CVS 使用点滴记录

1. 2004-2-19: 在当前工作目录里面一次性递归添加一个目录,包括其子目录及文件    使用 cvs import 命令,一次性的将要添加的子目录当作一个子模块导入到CVS仓库中,再用 cvs...
  • Scott_Woo
  • Scott_Woo
  • 2005-01-20 17:52:00
  • 1612

将CVS仓库转换为git

按一步一步就没什么问题。这里列出我的步骤。
  • lessconcern
  • lessconcern
  • 2014-07-08 14:00:23
  • 580

CVS 创建用户

CVS创建用户文章分类:大众软件1 、下载CVSNT并安装不清楚请看上一篇文章:CVS服务端创建与Eclipse简单使用 2、创建仓库(Ropository)                     ...
  • TechChan
  • TechChan
  • 2010-10-21 11:05:00
  • 6356

向CVS添加新的项目模块

向CVS添加新的项目模块 一般我们都已经有一个或多个项目了,这样我们可以用下面步骤生成一个新的CVS项目。...
  • alexdream
  • alexdream
  • 2007-01-16 12:03:00
  • 5695

将CVS迁移到Git并保留历史记录和分支

二话不说,先看代码:cat run.sh #!/bin/sh #rsync -av admin@cvshost::/cvshome/module/ /data/cvs_migration/CVSRe...
  • loxygenc
  • loxygenc
  • 2016-08-19 14:07:25
  • 788

Eclipse 整合cvs教程及遇到的问题

今天看着视频教程学习cvs版本管理,现在很多企业开发或许都采用了版本管理器,因为这样可以更好的进行团退开发与代码管理,所以学习一种版本管理技术还是很重要的。 最原始的独立版本管理是由两部分组成的,一...
  • CD344549214
  • CD344549214
  • 2013-12-04 16:50:22
  • 1720
收藏助手
不良信息举报
您举报文章:cygwin下建立cvs仓库
举报原因:
原因补充:

(最多只允许输入30个字)