??xml version="1.0" encoding="utf-8" standalone="yes"?>五月天欧美精品,91日韩一区二区三区,成人免费黄色http://www.aygfsteel.com/weibogao/category/19263.htmlmy second lifespacezh-cnSat, 03 Mar 2007 04:58:30 GMTSat, 03 Mar 2007 04:58:30 GMT60用CVS来管理自qE序http://www.aygfsteel.com/weibogao/archive/2007/01/16/94195.htmlweibogaoweibogaoTue, 16 Jan 2007 04:49:00 GMThttp://www.aygfsteel.com/weibogao/archive/2007/01/16/94195.htmlhttp://www.aygfsteel.com/weibogao/comments/94195.htmlhttp://www.aygfsteel.com/weibogao/archive/2007/01/16/94195.html#Feedback0http://www.aygfsteel.com/weibogao/comments/commentRss/94195.htmlhttp://www.aygfsteel.com/weibogao/services/trackbacks/94195.html http://51cmm.csai.cn/casepanel/CM/No047.htm

每个~写E序的h也许都有q这L(fng)体验Q对~写的程序作?jin)一些修改,几天以后Q我们可能发Cơ的修改D?jin)其它的矛盾Q甚至编译不能通过Q但q时我们却很难找到自己刚在哪里作?jin)改动。一般说来,我们L希望自己完整的记录下一个程序开发的q程Q记录下q个E序的每一Ҏ(gu)q和调整。或许我们可以用备䆾的方法来解决q个问题Q于是我们徏立一个backup的目录,定期或不定期的将自己的源E序打包放进去,直到某一天整个硬盘都被这些文件撑满。这当然有些夸张Q但q种机制带给我们的不方便是显而易见的。更q一步,现在一个Y件品的开发,一个h单枪匚w很难完成。可能是包含几个、几十个乃至上百个程序员协作开发,q时的源代码又该如何理Q解决问题的Ҏ(gu)是使用CVS?
  CVS - Concurrent Versions System(q发版本理pȝ)是一个版本控制管理系l,它是目前最为广泛用的一个系l。从gftp到gtk到KDEQ你几乎可以在每一个你熟?zhn)的自pY件的源码里看到它的踪q?下面我们?x)知道,它的t迹指一个称为cvs的子目录)。同P你也可以在几乎每一个Linux的发行版本里看到CVSpȝ。可以说Q如果失M(jin)CVSQ现有的许多多h协作、自由开发的软g都会(x)在一定程度上放慢自己发展的步伐?  CVS到底有哪些功能,使得它有如此强大的魅力呢Q?br />  1.CVS能做什么?
   如上所_(d)CVS首先是一个版本管理系l,它可以保留Y件开发过E中的每一个版本的信息Q包括谁、在何时、作?jin)什么样的修改以?qing)?f)什么作q样的修改等。这个功能和以前行于Linux和Unix的版本管理系lRCS(Revision Control System)和SCCS(Source Code Control System)很象。但CVS的功能远非仅此。它的最大的特点是它的ƈ发性,卛_支持分布式项目的开发。在互联|席卷一切的今天Q这个功能太为重要了(jin)。小C个办公室内部开发一个OApȝQ大到KDE组利用互联|开发新版本的KDEQCVS都可以一展n手。一个程序员开发出?jin)自p责模块的新版本后Q迅速的通过CVS让开发组的每一个成员都分n自己的最新成果。甚臻ICVS通过特定的机制允许多个程序员同时修改同一个源E序文g?br />  另外CVS增强的目录结构以?qing)对二进制文件良好的处理Q都使得它远q优?sh)其它的版本理pȝ。最后,必须一提的是CVS是基于RCS开发而成的?br />  2.如何得到CVS?
   CVS在几乎包含在所有的Linux发布版本中,如RedHat、Turbo Linux、Slackware以及(qing)国的红旗、Xteam Linux{。你可以试着敲一下cvs命o(h)Q大多数情况下都?x)出CUsage: cvs开头的一堆信息,提示你如何用cvsQ这意味着在你的机器上早已有了(jin)CVSQ只是遗憄是它一直未被你发现和利用。运气不好的话,你会(x)看到形如cvs: Command not found.的提C,q意味着你的机器没有安装CVS。这时你有两U选择。一是找C的Linux安装盘,从那里安装CVS。例如在使用RPM方式安装的Linux(上面介绍的几个发布版本中g除了(jin)SlackwareQ其他都?发布版本中,扑ֈcvs***.rpmQ用rpm命o(h)q行安装。第二种方式是到一些站点cvs的源代码Q然后遵循里面附带的指导q行安装Q需要的读者请讉K站点www.cyclic.com/或者http://www.loria.fr/~molli/cvs-index.html?br />  3.CVS的基本用方?br />   在这一节里Q我们来学习(fn)掌握CVS的一些基本用方法。现在我们假定已l安装好?jin)CVSQƈ且我们打用它来理自己正在开发的一个YӞ软g名叫netantsQ它存放在硬盘(sh)一个叫做netants的目录里Q目前里面有?jin)文件netants.c、netants.h、http.c、http.h和Makefile。我们ƈ没有和它人协作开发这个YӞ也没有利用Internet或者Intranet来开发这个Y件。或许,它只是自q一个业余作品,试图写出一个比Windows下的|络蚂蚁更好的下载工具出来?br />  3.1初始化CVS 
  我们首先要用的命o(h)是cvs initQ这个命令用来初始化CVSpȝ。正如我们所看到的,所有的CVS命o(h)都以cvs开_(d)然后在后面紧跟命令、参数和一些选项。初始化CVSpȝ主要是ؓ(f)?jin)创Z个ؓ(f)CVS所使用的源码储存库(repository)。创建的时候,需要指定在那个目录下创个源码储存库。有两种Ҏ(gu)来指定目录。一是利?-d "选项来指定,例如Q?d /usr/local/cvsroot。另一U更方便的方法是在shell里设定一个名叫CVSROOT的环境变量。用csh或者tcsh的用户可以用命令setenv来设定,在文?csh rc或者文?tcshrc里添加入下的一行:(x) setenv CVSROOT /usr/local/cvsroot 使用sh或者bash的用户需要在文g.profile或者文?bashrc里添加如下两行:(x) CVSROOT=/usr/local/cvsroot export CVSROOT 讄?jin)环境变量CVSROOT后,我们q行命o(h)cvs initQCVS在指定的目录下面徏立自己所需要的一些文Ӟ以后我们使用CVS理的Q何项目,都会(x)被CVS储存在这个目录之下。不q千万要注意的是Q永q不要去试图修改q个目录下的文g。这个目录是由CVS自己q行理的,ȝ的改动可能会(x)D你丢׃部分或全部的交由CVS理的源代码或其他资源?br />  3.2导入目到CVS中去
  初始化结束以后,我们p真正开始利用CVS来管理自qE序|络蚂蚁?jin)。第一步,我们这个项目交由CVS理。用如下的CVS的import命o(h)Q将源程序导入到CVS的源码储存库中去Q cd netants cvs import -m "start my project: Netants" netants yoyo start q个命o(h)看v来有些复杂,需要解释一下。import是cvs的导入命令,默认状况下,它@环的当前目录下的所有文?包括子目?导入到源码库(即CVSROOT指定的目?里去?m "start my project: Netants"告诉CVS你对q一步操作的说明。这是CVS强制要求的,如果你没有用这U?m "字符?的选项QCVS会(x)弹出一个文本编辑器(如果自己不特别指定的话,在Linux下一般是viQ而在Windows下则是Notepad)Q让你输入一些说明信息它才Ş休。netants是这个项目被CVS存储时的路径名,即CVS在创徏一?CVSROOT/netants的目录,q在此目录下存放此项目的文gQ当?dng)它不是原不动的存储QCVS?x)做一番处理。最后两个字W串讑֮?jin)两个标?tag)Q现在ƈ没有什么用处,但它们同hCVS指定必需的,所以我们添上这两个参数。执行此命o(h)ӞCVS自动所有的文g版本设ؓ(f)1.1Q这是它所认ؓ(f)的最低版本。以下ؓ(f)执行上述命o(h)后的昄信息QN netants/netants.c N netants/http.c N netants/http.h N netants/netants.h N netants/Makefile No conflicts created by this import N表示NewQCVS成功的加载了(jin)q些文gQƈ没有发现冲突。 上面的命令稍长了(jin)一些,而且昑־有些J琐Q相信我QCVS不Lq样的,q点"J琐"相对它给我们带来的便利是完全可以忽略不计的?br />  3.3从CVS中导出项目 
  好了(jin)Q我们把自己的netants的项目交l了(jin)CVSȝ理,现在Q我们完全可以删除原有的存储我们代码的netants目录(当然Q安全v见,你或许应该再做一ơ备份,q希望是最后一?。我们要q行开发工作了(jin)Q徏一个目录,叫什么呢Q就叫worktmp吧。我们进到此目录下,执行命o(h)cvs checkout netantsQ我们将?x)看到如下的信息Qcvs checkout: Updating netants U netants/Makefile U netants/http.c U netants/http.h U netants/netants.c U netants/netants.h CVS在当前目录下建立一个叫做netants的目录,我们原先的代码文仉在这个目录下出现?jin),而且q多?jin)一个名为CVS的目录。目录CVS下面存放的是一些文本文Ӟ记录?jin)CVSROOT的位|、此目对应源码库中那个目录{一些信息?br />  3.4保存?sh)改到CVS?br />   现在Q我们开始艰苦卓的~程工作。经q数十分钟、数时乃至数天的工作,我们对原有的代码做了(jin)较大的修改,现在要告一D落?jin)。我们将修改的内Ҏ(gu)交给C(j)VSQ于是,我们需要执行命令 cvs commit -m "Made some useful changes on some files" q时Q我们将?x)看到CVSl出一些提CZ息,它扫描ƈ比较此目录下的现有文件和它在源码库中保存的原有文Ӟ做了(jin)修改的文件将被更斎ͼq且有了(jin)新的版本P(x)1.2?m参数如同前面所_(d)是ؓ(f)?jin)不惛_启动一个文本编辑器来让自己输入。如果我们仅是修改了(jin)其中一两个文gQ我们可以在上面的命令的最后附上文件名Q这样CVS只会(x)比较、更新指定的文g。注意的是,和自己做备䆾不同QCVS只是保存?sh)(jin)不同版本之间的差异Qƈ没有完整的保存各个版本。现在,你是不是觉得CVS有点用处?jin)?br />  3.5d文g到项目中
  有一天,我们开始考虑l我们的|络蚂蚁加上从ftp站点下蝲文g的功能,于是Q我们需要在原有的项目里d两个文gQftp.c和ftp.h。首先,我们在工作目录下建立q编辑、修攏V生成了(jin)q两个文Ӟ然后我们使用命o(h)add命o(h)来添加。 cvs add ftp.c ftp.h 此时Q文件ƈ没有真正的被dQ只是相当于"注册"?jin)一下,要ɘq个q程生效Q我们仍焉要用commit命o(h)Q cvs commit ftp.c ftp.h -m "Add two files: ftp.c and ftp.h" 此时QCVS把q两个文件添加到目中去Q他们的版本均ؓ(f)初始?.1。  3.6从项目中删除文g
  除了(jin)d以外Q我们有的时候可能需要删除某个文Ӟ例如我们发现文gnetants.h其实没有什么用。于是,我们执行下面几个命o(h)来完成删除工作:(x) rm netants.h cvs remove netants.h cvs commit netants.h -m "Delete a file." 要注意的是,CVS只是删除?jin)当前版本的netants.hQ它以前的版本依然存在,除非它恰好仅?.1版本?br />  3.7讑֮特定版本受
  l过一D|间的工作Q程序已l初兯模,形成?jin)较E_的版本。这个时候,netants.c可能已经?.4版本Q而http.c可能?.5版本Q而我们希望将当前的代码作一个版本发布。此Ӟ我们需要用的是tag命o(h)。这个命令赋予指定的一个或多个文g一个给定的文本形式的版本号。版本号必须以字母开始,可以包含数字、下划线和连接符?-)。我们想l当前项目的所有文件赋予相同的版本hQ可以不指定文g或\径参敎ͼCVS默认选择当前目录下所有在CVS中注册的文g(循环q子目录)。下面既是一个例子:(x) 键入命o(h)Qcvs tag release0-1 提示信息Q    cvs tag: Tagging .    T Makefile    T ftp.c    T ftp.h    T http.c    T http.h    T netants.c q样当前版本的所有文仉有了(jin)一个叫做release0-1的版本代受当我们需要这个版本的时候,我们使用-r (版本代号)参数来得到指定的版本。例如命令:(x) cvs checkout -r release0-1 netants 在当前目录下徏立netants目录Qƈ导出所有版本代号ؓ(f)release0-1的文件?br />  3.8更新当前工作目录中的文g
   q里使用的命令ؓ(f)updateQ它?yu)比较指定的在CVS源码库中的文件和当前目录下的文gQ如果CVS源码库中有更高版本的源文Ӟ则更新当前目录下的文件。这个功能主要是多h协作开发项目时使用的,让你?qing)时分n同伴的工作成果。但它另外一个重要的用途,同样适用于单人开发的目。这个用途需要?j参数Q我们看下面的例子:(x) cvs update -j 1.5 -j 1.3 netants.c q个命o(h)的功能是Q在当前目录的netants.c文g中,忽略从版?.3到版?.5所作的修改。毫无疑问,对程序员来说Q这是一个非帔R要的功能。因为在某个阶段我们对程序所作的修改在现在可能会(x)被视为是无效乃至错误的,q个功能很好的解决了(jin)q个问题。 在更新的q程中,CVS执行一个自动合q的q程。例如我们的工作目录中的netants.c文g版本?.1Qƈ且我们已l对此文件作?jin)一番修改,而CVS源码库中的是版本2.2Q此时我们执行update命o(h)ӞCVSq不是简单的版?.2覆盖版本2.1Q而是试图自版本2.1到版?.2的修Ҏ(gu)加到当前目录中的文g中去Q如果它和我们刚刚所作的修改有冲H,则C(j)VS?x)以字符?>>>>"表示由冲H发生,期待用户M攏VCVS拒绝接受包含有上q特定字W串的文件。下面即是一个冲H的例子Qnetants.c:版本?.2Q保存在CVS中……getPartFile( ); showFinished(); return(A); }…?br />  netants:版本?.1l过我们的修改……getPartFile( ); return(B); }……我们执行命令cvs update netants.c后,会(x)包含如下内容的新的netants.cQ?br />  ……getPartFile( ); showFinished(); >>>>>> 2.2 }…… 除非我们做出修改q删?>>>>>>"Q否则在执行cvs commit的时候,netants.c不?x)更新原有?.2版本?br />  4.CVS的其他功?br />  CVS当然q不止上面所说的q些内容Q这些仅是CVS的基本功能,CVSq有许多重要的功能,如上面所说的|络工作方式、支持二q制文g{。下面我们对q些功能作简单的说明?br />  4.1 CVS的网l工作方式 
  CVS的网l功能采用client-serverl构Q两地均需安装CVS。CVS采用rsh方式或者口令校验方式进行工作。对client端,同前面讲q的讄环境变量CVSROOT一P用户需要设|新的环境变量CVS_SERVERQ指明CVS在server上的路径Q例如:(x)/usr/local/cvsroot1。CVS?d参数指定路径名,它后面可以用Q?local或server或ext)Q来指明是在本地q是在异地服务器上,默认当然是在本地Q正如我们在初始化CVS一节所使用的那栗下面的命o(h)假定我们的CVS服务器ؓ(f)cvs.rdcps.ac.cnQ用户名为crazyyaoQCVS源码库在服务器的/usr/local/cvsroot1目录下,我们的工作项目还是netantsQ我们用rsh方式导出目文gQ cvs -d : server : crazyyao@cvs.rdcps.ac.cn :/usr/local/cvsroot1 checkout netants 采用口o(h)校验方式Ӟ需要对修改pȝ文g/etc/inetd.confQ以便inetd知道如何分配、处理CVS Server的请求和响应。CVS?x)在源码库所在的目录中创Z个名为passwd的口令文Ӟ对用戯行校验。用口令校验时QCVS支持匿名登陆Q而且CVS目用户可以讄目中文件的存取权限。 关于如何配置CVS使之工作在网l方式下的详l信息请参考CVS的文档?br />  4.2 CVS的分支和融合功能
   CVS增强的目录工作方式得CVS提供分支和融合功能。有的时候,当项目进展到一定程度时Q可能需要暂时中断,d另外一些修改和发展。例如,我们的Y件原有版本ؓ(f)1.0Qƈ已提交用户用,现在正在开?.0。某一天,1.0的用户发C(jin)一个较大的bug或者需要添加某个短的功能Q这时我们不能让用户L?.0版本Q又必须l用h意的{复Q比较理想的解决方式是把现在的工作先攑ֈ一边,另开一个分支,L用L(fng)需要。当此分支完成后Q程序源q可以用CVS的融合功能将q一部分修改d到我们开?.0版本的主工作q程中去。 创徏分支可以使用tag -b命o(h)。例如下面的命o(h)   cvs tag -b netants-1-0-patch 在当前的工作目录的基上创Z个叫做netant-1-0-patch的分支。 融合的命令参数是-jQ我们在前面已经提及(qing)它了(jin)?br />  4.3 CVS处理二进制文件的功能 
  CVS可以保存?sh)进制文Ӟ但和文本文g相比Q它的许多功能׃(jin)。对于文本文ӞCVS可以辨别出文件的M一Ҏ(gu)动,但对于二q制文g它无能ؓ(f)力。但是,CVS可以区分出文件作?jin)改动,q会(x)提示用户自己修改、保存。与文本文g不同QCVS保存?sh)进制文件每个版本的完整信息。在操作二进制文件时Q需要添加参?KBQ以便告诉CVS不把它当作文本文件看待?br />  4.4 CVS比较文g的功能 
  执行的命令ؓ(f)diffQ这个功能和shell下的diff功能基本一栗例如下面的命o(h)比较CVS源码库中的最新的netants.c文g和当前目录下netants.c文g有什么不同:(x) cvs diff netatns.c
  5.l束?br />  通过上面的介l,希望能激起大家用CVS的兴,q掌握用CVS的一些基本方法。碰到困难时Q别忘(sh)(jin)阅CVS附带的手册,不过Q它有厚厚的172c(din)希望CVS能加速你的Y件开发?/p>


weibogao 2007-01-16 12:49 发表评论
]]>
WinCVS与CVSNT明用手??http://www.aygfsteel.com/weibogao/archive/2007/01/16/94192.htmlweibogaoweibogaoTue, 16 Jan 2007 04:43:00 GMThttp://www.aygfsteel.com/weibogao/archive/2007/01/16/94192.htmlhttp://www.aygfsteel.com/weibogao/comments/94192.htmlhttp://www.aygfsteel.com/weibogao/archive/2007/01/16/94192.html#Feedback0http://www.aygfsteel.com/weibogao/comments/commentRss/94192.htmlhttp://www.aygfsteel.com/weibogao/services/trackbacks/94192.html阅读全文

weibogao 2007-01-16 12:43 发表评论
]]>
WinCVS与CVSNT明用手?一)http://www.aygfsteel.com/weibogao/archive/2007/01/16/94191.htmlweibogaoweibogaoTue, 16 Jan 2007 04:42:00 GMThttp://www.aygfsteel.com/weibogao/archive/2007/01/16/94191.htmlhttp://www.aygfsteel.com/weibogao/comments/94191.htmlhttp://www.aygfsteel.com/weibogao/archive/2007/01/16/94191.html#Feedback0http://www.aygfsteel.com/weibogao/comments/commentRss/94191.htmlhttp://www.aygfsteel.com/weibogao/services/trackbacks/94191.html阅读全文

weibogao 2007-01-16 12:42 发表评论
]]>
《CVSNT用户理Ҏ(gu)》{?/title><link>http://www.aygfsteel.com/weibogao/archive/2007/01/16/94190.html</link><dc:creator>weibogao</dc:creator><author>weibogao</author><pubDate>Tue, 16 Jan 2007 04:38:00 GMT</pubDate><guid>http://www.aygfsteel.com/weibogao/archive/2007/01/16/94190.html</guid><wfw:comment>http://www.aygfsteel.com/weibogao/comments/94190.html</wfw:comment><comments>http://www.aygfsteel.com/weibogao/archive/2007/01/16/94190.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/weibogao/comments/commentRss/94190.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/weibogao/services/trackbacks/94190.html</trackback:ping><description><![CDATA[ <font color="#333333"> <font face="?hu)?> (tng) (tng) (tng)所有这些操作基于的环境和Y件版本:(x)WINDOWS2000 Pro、CVSNT2.0.4、WinCVS1.3.9.1Beta9 在前面的介绍CVSNT配合WinCVSq行用户理的文章中Q已l对CVSNT的用L(fng)理,权限分配q行?jin)比较详l的叙述Q但是还有一些概忉|有交待清楚,在这里,我会(x)Ҏ(gu)目的实际需要,以及(qing)自己的一些经验给Z套用L(fng)理、权限管理方案,在看q篇文章之前你最好已l阅M(jin)前面的一文章,对用L(fng)增加删除Q权限的修改Q等{这些操作能够了(jin)解,否则Q会(x)有一点困难?br /><b><span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: ?hu)? mso-bidi-font-family: ?hu)? mso-font-kerning: 0pt"> (tng) (tng)1?CVSNT的用户验证方?/span></b></font> </font> <b> <span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: ?hu)? mso-bidi-font-size: 10.5pt; mso-bidi-font-family: ?hu)? mso-font-kerning: 0pt"> <br /> </span> </b> <span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: ?hu)? mso-bidi-font-size: 10.5pt; mso-bidi-font-family: ?hu)? mso-font-kerning: 0pt"> (tng) (tng)我们q里所讨论的是工作在pserver方式下?br /> (tng) (tng)在CVSNT的文档中l出?jin)两U验证方式,我ȝ?jin)一下,可以q样U呼QWindow和CVSNT混合验证方式QCVSNT独立验证方式。在前面的文章中Q我们没有详l的l出q两U方式的内容Q所讲述的启C就是؜合验证方式?br /> (tng) (tng)军_CVSNT工作于何U验证方式是由CVS的管理文件来军_的,q些理文g处在库的目录下的CVSROOT目录中,q里可以得出l论Q对于不同的库,可以l不同的验证方式。所以,在每个库建立的时候要首先讑֮好这些前提?br /> (tng) (tng)下面的操作如果没有特D指出则都是在客L(fng)来进行管理的Q下面首先是对一些控制原理和相关的文件做一些说明,如果你正在进行相关的模拟操作Q请停下来暂时停止你的操作,因ؓ(f)q些操作的步骤是有先后的Q如果你序不对Q那么你可能权限失效,q行不了(jin)下面的操作了(jin)?br /></span> <b> <span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: ?hu)? mso-bidi-font-family: ?hu)? mso-font-kerning: 0pt"> (tng) (tng)1Q? config文g</span> </b> <b> <span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: ?hu)? mso-bidi-font-size: 10.5pt; mso-bidi-font-family: ?hu)? mso-font-kerning: 0pt"> <br /> </span> </b> <span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: ?hu)? mso-bidi-font-size: 10.5pt; mso-bidi-font-family: ?hu)? mso-font-kerning: 0pt"> (tng) (tng)在库建立好了(jin)以后Q你q没有对控制文gq行修改之前QCVSNT是工作在混合验证方式之下的,q个时候,CVS服务器的理员就是CVSNT的管理员Q你以一个管理员w䆾登陆Q检Z要操作的库的CVSROOT模块Q看一下文件列表,控制CVSNT的验证工作方式的是config文gQ你可以在文件列表中扑ֈ它,双击看看其中的内容,q里Ҏ(gu)们最重要的就是第一个设|内容,你会(x)看到下面的内容:(x)<br /> (tng) (tng)# Set this to `no' if pserver shouldn't check system users/passwords<br /> (tng) (tng)#SystemAuth=yes<br /> (tng) (tng)W二行就是我们要修改的内容,默认状态是被注释掉的,SystemAuth有两个值yes和no<br />yesQpserver用系l用h据库和passwd文gQ这个文件后面会(x)详细讲述Q来共同验证Q若passwd文g不存在或者文件中没有相应的资料,则用pȝ用户来进行验证)(j)默认为yes<br /> (tng) (tng)noQ所有的用户必须在passwd中存在,Ҏ(gu)passwd的内Ҏ(gu)q行用户的验证?br /> (tng) (tng)我这里所阐述的方案就是工作在no的下面的Q修改完之后提交到服务器Q提交完毕服务器处在CVSNT的独立验证模式下?jin)。在q个工作方式下,NT本地的用户和CVSNT用户没有M本质的联pd影响Q仅仅是要徏立一个别名)(j)?br /></span> <b> <span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: ?hu)? mso-bidi-font-family: ?hu)? mso-font-kerning: 0pt"> (tng) (tng)1Q? passwd文g</span> </b> <b> <span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: ?hu)? mso-bidi-font-size: 10.5pt; mso-bidi-font-family: ?hu)? mso-font-kerning: 0pt"> <br /> </span> </b> <span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: ?hu)? mso-bidi-font-size: 10.5pt; mso-bidi-font-family: ?hu)? mso-font-kerning: 0pt"> (tng) (tng)在讲qC面的时候提C(jin)q个文gQ在服务器工作在CVSNT验证模式下的时候,q个文g可以称之ؓ(f)CVSNT的用h据库Q这个里面存储着用户列表Q用L(fng)密码Q以?qing)别名的一些信息。默认状态下q个文g是不存在的,所以,如果我们要在CVSNT验证模式下工作,必须建立q个文g。注意:(x)q个文g是不能够在客L(fng)q行修改的。这个文件的内容是相当简单的Q就像下面:(x)<br /> (tng) (tng)bach:ULtgRLXo7NRxs<br /> (tng) (tng)spwang:1sOp854gDF3DY<br /> (tng) (tng)melissa:tGX1fS8sun6rY:pubcvs<br /> (tng) (tng)qproj:XR4EZcEs0szik:pubcvs<br /> (tng) (tng)q里分别拿第一个用户bach和第三个用户melissa来进行说明,每一行代表一个用Pd有三部分信息Q用户名、密码、本地用户三部分之间使用冒号?”来q行分割?br /> (tng) (tng)用户名:(x)是登陆CVS的用户名<br /> (tng) (tng)?码:(x)用户的密码,q里是经q加密的Q如果ؓ(f)I,那么是I密?br /> (tng) (tng)本地用户QCVS用户q个别名对应的本地用PQ跟本地用户没有M其他关系Q仅仅是别名的关p)(j)<br /> (tng) (tng)如果在本地系l中存在一个用户名bashQ那么要在CVS建立一个bachq样的用户就不需要在后面指出对应的系l用Pmelissa后面的pubcvs是pȝ用户Q在本地pȝ上面存在的用戗对于要用命令增加这两种用户的格式如下:(x)<br /> (tng) (tng)cvs passwd –a bach<br /> (tng) (tng)cvs passwd –r pubcvs –a melissa<br /> (tng) (tng)在库建立的时候可以在服务器上建立一个简单的passwd初始化文Ӟ加一?br /> (tng) (tng)cvsadmin:<br /> (tng) (tng)q样Q就l出?jin)一个cvsadminq个I密码用P本地pȝ中有q样的用P可以不加到后面去)(j)Q然后在客户端来q行修改和以后的用户增加工作。注意:(x)在客L(fng)q行其他之前请先首先修改q个密码Q以防止别hq行破坏?br /> (tng) (tng)在服务器端徏立了(jin)q个文g以后Q就不用再手动进行修改了(jin)Q当你在客户端进行密码或者用L(fng)增加删除的时候,pȝ?x)自动进行这个文件的更新。这个文件是理着CVSNTpȝ中的所有的用户Q所以,要特别重视,不了(jin)解这个文件格式的Q不要去随便修改Q更加不要尝试在客户端进行修改!<br /></span> <b> <span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: ?hu)? mso-bidi-font-family: ?hu)? mso-font-kerning: 0pt"> (tng) (tng)1Q? admin文g</span> </b> <b> <span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: ?hu)? mso-bidi-font-size: 10.5pt; mso-bidi-font-family: ?hu)? mso-font-kerning: 0pt"> <br /> </span> </b> <span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: ?hu)? mso-bidi-font-size: 10.5pt; mso-bidi-font-family: ?hu)? mso-font-kerning: 0pt"> (tng) (tng)q个文g是指定CVSNT的管理员列表的文ӞCVSNT?x)根据这个文件中的内?gu)判断一个用h否是理员。这个文件的内容很简单,是一个用户列表。类g?br /> (tng) (tng)user1<br /> (tng) (tng)user2<br /> (tng) (tng)user3<br /> (tng) (tng)q些代表user1,user2,user3都是理员,当然Q这些用户必要存在才能够正登陆系l来执行理?br /> (tng) (tng)q个文g默认状态下是没有的Q但是,可以在客L(fng)q行dQ在你的客户端进行新个文件然后add上去再commit一下,q个文g可以上传到服务器,但是q个时候还没有生效Q请修改checkoutlistq个文gQ加入adminq一行,checkoutlist也可以在客户端进行修改再提交Q这个时候admin可以被pȝ自动的build?jin)?br /> (tng) (tng)Checkoutlist是维护的一个文件列表,可以攑օpȝ自动build的用戯定义的系l文件列表,注意Q对passwd没有用!Q?br /></span> <b> <span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: ?hu)? mso-bidi-font-family: ?hu)? mso-font-kerning: 0pt"> (tng) (tng)1Q? group文g</span> </b> <b> <span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: ?hu)? mso-bidi-font-size: 10.5pt; mso-bidi-font-family: ?hu)? mso-font-kerning: 0pt"> <br /> </span> </b> <span lang="EN-US" style="COLOR: #333333; FONT-FAMILY: ?hu)? mso-bidi-font-size: 10.5pt; mso-bidi-font-family: ?hu)? mso-font-kerning: 0pt"> (tng) (tng)q个文g是定义系l的l,我们可以同h质的用户归入一个组Q然后用l用戯权限的方式给l赋权限Q这P一个组的用户就?x)具有同L(fng)权限。Group的内容如下:(x)<br /> (tng) (tng)group1:user1 user2 user3<br /> (tng) (tng)group2:me you he<br /> (tng) (tng)group3:tom honey<br /> (tng) (tng)有上面可以看出来Q这个文件的内容也是相当的简单,首先是组的名U然后是冒号Q接着是用户名Q多个用户名之间用空格来q行分割?br /> (tng) (tng)Group文g可以在客L(fng)q行新徏和修改,不用修改checkoutlistq个文gQ系l会(x)自动buildq个文gq且使之生效?br /> (tng) (tng)作ؓ(f)l里面的特定成员q可以赋l特定的权限Q权限分Zcc,w,r和nQ否定权限是有高的优先的?br /> (tng) (tng)好,上面已经介绍?jin)本?gu)所涉及(qing)到的几个重要的文件以?qing)修?gu)式。这里再一下,passwd只能够再服务器端q行建立和修改,不能够在客户端进行操作!<br />现在Ҏ(gu)上面介绍的内容,可以开始你的操作了(jin)Q下面给Z攚w序,库刚刚徏立v来的时候,使用一个服务器上的本地理员用戯行登陆检出CVSROOT模块?br /> (tng) (tng)1?现在服务器端加上passwd文gQ给一个初始的用户Q比如cvsadmin:<br /> (tng) (tng)2?在客L(fng)增加adminQ将cvsadmin加入admin文gQ作为出是管理员Qƈ提交加入到库中?br /> (tng) (tng)3?在修改checkoutlist文gQ加入adminQ其能够自动build?br /> (tng) (tng)4?最后修改config文g的SystemAuth=noQ在提交之前要确认一下你上面的修Ҏ(gu)否正,如果提交?jin)这个文ӞCVSNT验证模式开始生效了(jin)Q?br /> (tng) (tng)5?好,现在请修改你的参数再重新q行的登陆吧。因Z的系l已l切换了(jin)工作模式Q你当前的用户已l失效了(jin)?br /> (tng) (tng)完成?jin)上面的步骤Q整个服务器׃(x)有效的工作在CVSNT验证模式下了(jin)。而group文g在你需要的M时候可以加入?br /> (tng) (tng)在上面的文章关于CVSNT的用L(fng)理Ҏ(gu)的,在这里做一点补充,在后面的操作中全部是针对在客L(fng)使用WinCVS来进行的Q出?jin)增加passwdQ文Ӟ其实Q在我的实践当中configQpasswdQadminQcheckoutlistQ这些文件的起始修改Q初始化Q都可以在新Z(jin)库以后一起完成,然后再让相应的库的管理员来进行相关的操作?br /></span> <img src ="http://www.aygfsteel.com/weibogao/aggbug/94190.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/weibogao/" target="_blank">weibogao</a> 2007-01-16 12:38 <a href="http://www.aygfsteel.com/weibogao/archive/2007/01/16/94190.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ͷ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˫</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">¡</a>| <a href="http://" target="_blank">ɳ</a>| <a href="http://" target="_blank">е</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɣ</a>| <a href="http://" target="_blank">ԣ</a>| <a href="http://" target="_blank">ƴ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͨ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">³ľ</a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ľ</a>| <a href="http://" target="_blank">ľ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ʦ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ͻ</a>| <a href="http://" target="_blank">Ҵ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">߷</a>| <a href="http://" target="_blank">뽭</a>| <a href="http://" target="_blank">ӳ</a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>