📄 1489.html
字号:
<Directory "/path/to/apache/cgi-bin/cvsweb/"><br>
AuthName "CVS Authorization"<br>
AuthType Basic<br>
AuthUserFile /path/to/cvsweb.passwd<br>
require valid-user<br>
</Directory><br>
<br>
CVS TAGS: who? when?<br>
====================<br>
<br>
将$Id$ 加在程序文件开头的注释里是一个很好的习惯,cvs能够自动解释更新其中的内容成:file_name version time user_name 的格式,比如:cvs_card.txt,v 1.1 2002/04/05 04:24:12 chedong Exp,可以这些信息了解文件的最后修改人和修改时间<br>
<br>
几个常用的缺省文件:<br>
default.php<br>
<?php<br>
/*<br>
* Copyright (c) 2002 Company Name.<br>
* $Header$<br>
*/<br>
<br>
?><br>
====================================<br>
Default.java: 注意文件头一般注释用 /* 开始 JAVADOC注释用 /** 开始的区别<br>
/*<br>
* Copyright (c) 2002 MyCompany Name.<br>
* $Header$<br>
*/<br>
<br>
package com.mycompany;<br>
<br>
import java.;<br>
<br>
/**<br>
* comments here<br>
*/<br>
public class Default {<br>
/**<br>
* Comments here<br>
* @param<br>
* @return<br>
*/<br>
public toString() {<br>
<br>
}<br>
}<br>
====================================<br>
default.pl:<br>
#!/usr/bin/perl -w<br>
# Copyright (c) 2002 Company Name.<br>
# $Header$<br>
<br>
# file comments here<br>
<br>
use strict;<br>
<br>
<br>
CVS vs VSS <br>
===========<br>
<br>
CVS没有文件锁定模式,VSS在check out同时,同时记录了文件被导出者锁定。<br>
<br>
CVS的update和commit, VSS是get_lastest_version和check in<br>
<br>
对应VSS的check out/undo check out的CVS里是edit和unedit<br>
<br>
在CVS中,标记自动更新功能缺省是打开的,这样也带来一个潜在的问题,就是不用-kb方式添加binary文件的话在cvs自动更新时可能会导致文件失效。<br>
<br>
Virsual SourceSafe中这个功能称之为Keyword Explaination,缺省是关闭的,需要通过OPITION打开,并指定需要进行源文件关键词扫描的类型:*.txt,*.java,*.html...<br>
<br>
对于Virsual SourceSafe和CVS都通用的TAG有:<br>
$Header$<br>
$Author$<br>
$Date$<br>
$Revision$<br>
<br>
尽量使用通用的关键词保证代码在CVS和VSS都能方便的跟踪。<br>
<br>
WinCVS<br>
======<br>
<br>
下载:<br>
cvs Windows客户端:目前稳定版本为1.2<br>
http://www.wincvs.org/<br>
ssh Windows客户端<br>
http://www.networksimplicity.com/openssh/<br>
<br>
安装好以上2个软件以后:<br>
WinCVS客户端的admin==>preference设置<br>
1 在general选单里<br>
设置CVSROOT: username@192.168.0.123:/home/cvsroot<br>
设置Authorization: 选择SSH server<br>
<br>
2 Port选单里<br>
钩上:check for alternate rsh name<br>
并设置ssh.exe的路径,缺省是装在 C:Program FilesNetworkSimplicitysshssh.exe<br>
<br>
然后就可以使用WinCVS进行cvs操作了,所有操作都会跳出命令行窗口要求你输入服务器端的认证密码。<br>
<br>
当然,如果你觉得这样很烦的话,还有一个办法就是生成一个没有密码的公钥/私钥对,并设置CVS使用基于公钥/私钥的SSH认证(在general选单里)。<br>
<br>
可以选择的diff工具:examdiff<br>
下载:<br>
http://www.prestosoft.com/examdiff/examdiff.htm<br>
还是在WinCVS菜单admin==>preference的WinCVS选单里<br>
选上:Externel diff program<br>
并设置diff工具的路径,比如:C:Program Filesed16iExamDiff.exe<br>
在对文件进行版本diff时,第一次需要将窗口右下角的use externel diff选上。<br>
<br>
基于CVS的小组开发环境搭建<br>
========================<br>
<br>
作为一个小组级的开发环境,版本控制系统和BUG跟踪系统等都涉及到用户认证部分。如何方便的将这些系统集成起来是一个非常有趣的事情,毕竟我们不能指望linux下有像Source Offsite那样集成度很高的版本控制/BUG跟踪集成系统。<br>
<br>
我个人是很反对使用pserver模式的远程用户认证的,但如果大部分组员使用WINDOWS客户端进行开发的话,总体来说使用CVSROOT/passwd认证还是很难避免的,但CVS用户的管理比较麻烦。本来我打算自己用perl写一个管理界面的,直到我发现了CVSTrac, 一个基于WEB界面的BUG跟踪系统,它外挂在CVS系统上,而且就包括了WEB界面的CVSROOT/passwd文件的管理,甚至还集成了WIKIWIKI功能。<br>
<br>
这里首先说一下CVS的pserver模式下的用户认证,CVS的用户认证服务是基于inetd中的:<br>
cvspserver stream tcp nowait nobody /usr/bin/cvs cvs --allow-root=/home/cvsroot pserver<br>
一般在2401端口<br>
<br>
CVS用户数据库是基于CVSROOT/passwd文件,文件格式:<br>
[username]:[crypt_password]:[mapping_system_user]<br>
由于密码都用的是UNIX标准的CRYPT加密,这个passwd文件的格式基本上是apache的htpasswd格式的扩展(比APACHE的PASSWD文件多一个系统用户映射字段),所以这个文件最简单的方法可以用<br>
apache/bin/htpasswd -b myname mypassword <br>
创建。注意:通过htpasswd创建出来的文件会没有映射系统用户的字段<br>
例如:<br>
new:geBvosup/zKl2<br>
setup:aISQuNAAoY3qw<br>
test:hwEpz/BX.rEDU<br>
<br>
映射系统用户的目的在于:你可以创建一个专门的CVS服务帐号,比如叫cvs,并将/home/cvsroot目录下的所有权限赋予这个用户,然后在passwd文件里创建不同的开发用户帐号,但开发用户帐号最后的文件读写权限都映射为cvs用户,避免了在SSH模式下多个开发用户新建文件后的对于其他用户的文件读写权限问题。<br>
<br>
进一步的,你可以将用户分别映射到2组用户上,利用2个用户的权限设置,避免2个项目组的文件互相访问。<br>
new:geBvosup/zKl2:proj1<br>
setup:aISQuNAAoY3qw:proj2<br>
test:hwEpz/BX.rEDU:proj1<br>
<br>
CVSTrac很好的解决了CVSROOT/passwd的管理问题,而且包含了BUG跟踪报告系统和集成WIKIWIKI交流功能等,使用的CGI方式的安装,并且基于GNU Public License:<br>
<br>
安装过程<br>
<br>
1. 下载:http://www.cvstrac.org 解包,复制成/usr/bin/cvstrac<br>
2. 在已经装好的CVS服务器上(假设CVS库已经使用cvs init初始化过在/home/cvsroot里),运行一下<br>
cvstrac init /home/cvsroot myproj<br>
运行后,/home/cvsroot里会有一个缺省的myproj.db库<br>
3. 在apche/cgi-bin目录中创建如下脚本cvstrac:<br>
#!/bin/sh<br>
/usr/bin/cvstrac cgi /home/cvsroot<br>
设置cvstrac可执行。<br>
4. 从http://cvs.server.address/cgi-bin/cvstrac/myproj进入管理界面,缺省登录名:setup 密码 setup<br>
5. 在inetd里加入cvspserver服务:<br>
cvspserver stream tcp nowait nobody /usr/bin/cvs cvs --allow-root=/home/cvsroot pserver<br>
注意:这里的用户设置成nobody目的是和apache的运行用户一致,并且必须让这个这个用户对/home/cvsroot/下的CVSROOT/passwd和cvstrac初始化生成的myproj.db有读写权限。<br>
<br>
一般用户还可以从:<br>
http://cvs.server.address/cgi-bin/cvstrac/myproj<br>
修改登录密码,记录BUG报告等,更多使用细节可以在使用中慢慢了解。<br>
<br>
对于前面提到的WinCVS改用passwd file on server side模式登录就可以了。<br>
<br>
总结:<br>
<br>
利用cvs + (WinCVS/cvsweb/cvstrac),构成了一个相对完善的跨平台工作组开发环境。<br>
<br>
相关资源:<br>
<br>
CVS HOME:<br>
http://www.cvshome.org<br>
<br>
CVS FAQ:<br>
http://www.loria.fr/~molli/cvs-index.html<br>
<br>
相关网站:<br>
http://directory.google.com/Top/Computers/Software/Configuration_Management/Tools/Concurrent_Versions_System/<br>
<br>
CVS 免费书:<br>
http://cvsbook.red-bean.com/<br>
<br>
CVS 命令的速查卡片:<br>
http://www.refcards.com/about/cvs.html<br>
<br>
WinCVS:<br>
http://www.wincvs.org<br>
<br>
CVSTrac: A Web-Based Bug And Patch-Set Tracking System For CVS<br>
http://www.cvstrac.org<br>
<br>
<<返回<br>
</FONT><br>
</TD>
</TR>
<TR>
<TD colSpan=2><FONT
class=middlefont></FONT><BR>
<FONT
class=normalfont>全文结束</FONT> </TD>
</TR>
<TR>
<TD background="images/dot.gif" tppabs="http://www.linuxhero.com/docs/images/dot.gif" colSpan=2
height=10></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></DIV></TD>
<TD vAlign=top width="20%"
background="images/line.gif" tppabs="http://www.linuxhero.com/docs/images/line.gif" rowSpan=2>
<DIV align=center>
<table class=tableoutline cellspacing=1 cellpadding=4
width="100%" align=center border=0>
<tr class=firstalt>
<td noWrap background="images/bgline.gif" tppabs="http://www.linuxhero.com/docs/images/bgline.gif" colspan=2 height=21>
<font class=normalfont><b>所有分类</b></font></td>
</tr>
<tr class=secondalt> <td noWrap width=27%> <font class=normalfont>1:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type1.html" tppabs="http://www.linuxhero.com/docs/type1.html">非技术类</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>2:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type2.html" tppabs="http://www.linuxhero.com/docs/type2.html">基础知识</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>3:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type3.html" tppabs="http://www.linuxhero.com/docs/type3.html">指令大全</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>4:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type4.html" tppabs="http://www.linuxhero.com/docs/type4.html">shell</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>5:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type5.html" tppabs="http://www.linuxhero.com/docs/type5.html">安装启动</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>6:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type6.html" tppabs="http://www.linuxhero.com/docs/type6.html">xwindow</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>7:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type7.html" tppabs="http://www.linuxhero.com/docs/type7.html">kde</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>8:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type8.html" tppabs="http://www.linuxhero.com/docs/type8.html">gnome</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>9:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type9.html" tppabs="http://www.linuxhero.com/docs/type9.html">输入法类</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>10:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type10.html" tppabs="http://www.linuxhero.com/docs/type10.html">美化汉化</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>11:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type11.html" tppabs="http://www.linuxhero.com/docs/type11.html">网络配置</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>12:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type12.html" tppabs="http://www.linuxhero.com/docs/type12.html">存储备份</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>13:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type13.html" tppabs="http://www.linuxhero.com/docs/type13.html">杂项工具</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>14:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type14.html" tppabs="http://www.linuxhero.com/docs/type14.html">编程技术</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>15:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type15.html" tppabs="http://www.linuxhero.com/docs/type15.html">网络安全</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>16:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type16.html" tppabs="http://www.linuxhero.com/docs/type16.html">内核技术</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>17:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type17.html" tppabs="http://www.linuxhero.com/docs/type17.html">速度优化</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>18:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type18.html" tppabs="http://www.linuxhero.com/docs/type18.html">apache</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>19:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type19.html" tppabs="http://www.linuxhero.com/docs/type19.html">email</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>20:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type20.html" tppabs="http://www.linuxhero.com/docs/type20.html">ftp服务</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>21:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type21.html" tppabs="http://www.linuxhero.com/docs/type21.html">cvs服务</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>22:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type22.html" tppabs="http://www.linuxhero.com/docs/type22.html">代理服务</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>23:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type23.html" tppabs="http://www.linuxhero.com/docs/type23.html">samba</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>24:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type24.html" tppabs="http://www.linuxhero.com/docs/type24.html">域名服务</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>25:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type25.html" tppabs="http://www.linuxhero.com/docs/type25.html">网络过滤</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>26:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type26.html" tppabs="http://www.linuxhero.com/docs/type26.html">其他服务</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>27:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type27.html" tppabs="http://www.linuxhero.com/docs/type27.html">nfs</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>28:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type28.html" tppabs="http://www.linuxhero.com/docs/type28.html">oracle</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>29:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type29.html" tppabs="http://www.linuxhero.com/docs/type29.html">dhcp</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>30:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type30.html" tppabs="http://www.linuxhero.com/docs/type30.html">mysql</a></font></td> </tr> </table></td></tr><tr class=secondalt> <td noWrap width=27%> <font class=normalfont>31:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type31.html" tppabs="http://www.linuxhero.com/docs/type31.html">php</a></font></td> </tr> </table></td></tr><tr class=firstalt> <td noWrap width=27%> <font class=normalfont>32:</font> </td><td noWrap width=73%> <table width=100% border=0> <tr> <td><font class=normalfont><a href="type32.html" tppabs="http://www.linuxhero.com/docs/type32.html">ldap</a></font></td> </tr> </table></td></tr> </table>
</DIV></TD></TR>
<TR vAlign=top>
<TD width="80%">
<DIV align=center><BR>
</DIV>
</TD></TR></TBODY></TABLE></TD></TR>
</TABLE></TD></TR>
</TABLE>
<TABLE cellSpacing=0 cellPadding=4 width="100%" bgColor=#eeeeee
border=0><TBODY>
<TR>
<TD width="50%">
<P><FONT class=middlefont>版权所有 © 2004 <A
href="mailto:bjchenxu@sina.com">linux知识宝库</A><BR>
违者必究. </FONT></P>
</TD>
<TD width="50%">
<DIV align=right><FONT class=middlefont>Powered by: <A
href="mailto:bjchenxu@sina.com">Linux知识宝库</A> Version 0.9.0 </FONT></DIV>
</TD></TR></TBODY></TABLE>
<CENTER></CENTER></TD></TR>
</TABLE></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -