﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Prayer-随笔分类-CVS</title><link>http://www.cppblog.com/prayer/category/9142.html</link><description>在一般中寻求卓越</description><language>zh-cn</language><lastBuildDate>Sat, 17 Jul 2010 09:03:48 GMT</lastBuildDate><pubDate>Sat, 17 Jul 2010 09:03:48 GMT</pubDate><ttl>60</ttl><item><title>cvs server: sticky tag `xxx’ for file ‘xxx’ is not a branch…</title><link>http://www.cppblog.com/prayer/archive/2010/07/16/120526.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Fri, 16 Jul 2010 02:46:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2010/07/16/120526.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/120526.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2010/07/16/120526.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/120526.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/120526.html</trackback:ping><description><![CDATA[貌似是cvs的一个经典问题，今天在修改的时候取了一个历史版本，好像就自动给加上了个版本号的tag，然后在commit的时候就出现了这个问题，提示修正后才能commit。<br>google一下果然是经典问题，很快找到了答案：对出这个错的文件执行update -A后清掉当前的tag就可以了
<img src ="http://www.cppblog.com/prayer/aggbug/120526.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2010-07-16 10:46 <a href="http://www.cppblog.com/prayer/archive/2010/07/16/120526.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cvs server: x.xxxx added independently by second party</title><link>http://www.cppblog.com/prayer/archive/2010/06/10/117582.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Thu, 10 Jun 2010 11:28:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2010/06/10/117582.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/117582.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2010/06/10/117582.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/117582.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/117582.html</trackback:ping><description><![CDATA[<h4 class=beTitle id=subjcns!C01EBDCBBCBE819!196>cvs server: x.xxxx added independently by second party</h4>
<div class=bvMsg id=msgcns!C01EBDCBBCBE819!196>
<div>Warning : 'add_record.php' has some escape characters in it (0x00-0x20, 0x80-0xFF), you should correct it first<br>cvs add add_record.php (in directory E:\workdir\bedu2\comwinadmin\bedu_service\)<br>cvs server: add_record.php added independently by second party</div>
<div>&nbsp;</div>
<div>出现这种错误表示，在cvs服务器上目录己有x.xxx文件，但你的本地cvs repository&nbsp; 中没有这个文件。</div>
<div>是跟服务器冲突。</div>
<div>telnet到cvs server ，删除x.xxx就OK了。或者整个目录重新更新一次。</div>
</div>
<img src ="http://www.cppblog.com/prayer/aggbug/117582.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2010-06-10 19:28 <a href="http://www.cppblog.com/prayer/archive/2010/06/10/117582.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cvs diff陷阱: 几乎人人会有的误解</title><link>http://www.cppblog.com/prayer/archive/2009/09/17/96513.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Thu, 17 Sep 2009 04:34:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/09/17/96513.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/96513.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/09/17/96513.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/96513.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/96513.html</trackback:ping><description><![CDATA[<div class=postText>
<p>假设有这样一种情形, 在CVS的repository中存储了一个文件file.c, 你在星期一update到<br>了该文件的最新版本1.1.1.4, 在星期三的时候, 你还没动这个文件一根毫毛, 而<br>你的同事已经把版本号升级到了1.1.1.6, 此时你用下面的命令对你本地的file.c<br>进行比较:<br>cvs diff file.c<br>在刚开始接触CVS时, 几乎人人都认为此时的动作是cvs把你本地的文件跟服务器上的最新<br>版本进行比较. 并期望根据这个命令的输出结果来判断你本地的文件是否是最新版本.</p>
<p>事实上, 这个命令执行的是:<br>1. 在你本地保存的CVS管理文件中(CVS/Entries)找到这个文件对应的版本号是什<br>么, 或是哪个时间得到的这个文件, 这类信息被称为sticky信息, 也就是说这些信<br>息跟你的文件本身是如影随形的, CVS考虑你的文件时, 同时会考虑最后一次取得<br>该文件时的条件.<br>2. 根据前述找到的sticky信息, 从服务器上下载一份该sticky信息对应的那个版<br>本, 在上述的情况中, 仍然下载的是1.1.1.4版本, 因为我本地保存的file.c是<br>1.1.1.4版本.<br>3. 用diff工具进行比较</p>
<p>这样比较的结果当然是: 没有不同.</p>
<p>当然, cvs diff的其它工作方式并不象此处这样隐晦, 比如<br>cvs diff -r1.1.1.4 -r1.1.1.5 file.c<br>明确地比较这两个版本, 两个版本的文件内容都取自服务器.</p>
<p>错误的信息源于错误的愿望: 不能指望cvs diff filename 来判断你本地的文件是<br>否是最新版本, 判断这个的命令应该用<br>cvs status file.c<br>此时它的输出是 Needs Patch<br>而接下来把本地文件更新到最新版本的操作当然是<br>cvs update file.c<br></p>
<br><br>
<p id=TBPingURL>Trackback: http://tb.donews.net/TrackBack.aspx?PostId=678715</p>
<br></div>
<img src ="http://www.cppblog.com/prayer/aggbug/96513.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-09-17 12:34 <a href="http://www.cppblog.com/prayer/archive/2009/09/17/96513.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CVS分支</title><link>http://www.cppblog.com/prayer/archive/2009/05/18/83256.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Mon, 18 May 2009 02:05:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/05/18/83256.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/83256.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/05/18/83256.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/83256.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/83256.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; CVS中为一个模块创建一个分支使用的命令是tag或rtag。这两个命令很相似，先用tag命令来做介绍。<br>&nbsp;&nbsp;&nbsp; 假设有一个模块foo_ware，一直在head主分支里工作，但是现在需要建立一个分支foo_tag用来做测试版本的开发，则方法如下：&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; 在foo_ware的一个工作目录下，执行：<br>cvs tag foo_tag //把服务器上的当前工作目录下的所有文件增加标记foo_tag<br>cvs update -r foo_tag //如果要在当前目录的foo_tag分支下继续工作，则要把当前目录下的文件状态都更新为foo_tag分支，这是因为tag命令只为服务器上的文件增加标记foo_tag，而不改变当前目录下文件的状态。<br>&nbsp;&nbsp;&nbsp; cvs commit //如果当前目录下的文件在做分支之前已经修改过了，而且又想把这些修改应用于foo_tag分支，则要commit。</p>
<p>&nbsp;&nbsp;&nbsp; 如果要从服务器上签出另外一个foo_tag分支的副本，则用如下命令：<br>cvs co -r foo_tag -d new_dir foo_ware //必须要指明要签出的分支是foo_tag，否则签出的版本还会是head主分支。<br>&nbsp;&nbsp;&nbsp; 这样签出之后，不论再update和commit，都是在foo_tag分支下进行了，不会更改head主分支里的状态。</p>
<p>&nbsp;&nbsp;&nbsp; tag和rtag的区别在于，rtag不需要有本地副本的存在，就可以增加或修改服务器模块上的tag，而tag必须有一个本地版本做参考，更新服务器上的对应于本地的那些文件，如上例所示。</p>
<p>&nbsp;&nbsp;&nbsp; 如果要把分支版本里的修改合并到主分支里，方法如下： <br>&nbsp;&nbsp;&nbsp; 在分之版本的本地副本做好commit之后，在主分支的本地副本下，执行:<br>cvs update -j foo_tag //把foo_tag分支的修改合并到本地的主版本下<br>... do some revision<br>cvs commit //把合并后的版本更新到服务器的主版本上，因为之前的update -j命令并不影响服务器上的主版本。</p>
<img src ="http://www.cppblog.com/prayer/aggbug/83256.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-05-18 10:05 <a href="http://www.cppblog.com/prayer/archive/2009/05/18/83256.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CVS的常用命令速查手册</title><link>http://www.cppblog.com/prayer/archive/2009/05/14/82951.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Thu, 14 May 2009 06:33:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/05/14/82951.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/82951.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/05/14/82951.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/82951.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/82951.html</trackback:ping><description><![CDATA[<table cellSpacing=1 cellPadding=4 width="100%" border=0>
    <tbody>
        <tr>
            <td vAlign=top>
            <div class=subhead><strong>CVS的常用命令速查手册</strong></div>
            </td>
        </tr>
        <tr>
            <td vAlign=top><!-- write by trotter 广告链接 --><!--write by trotter 广告链接 -->
            <div class=content>
            <p><font face="Verdana, Arial, Helvetica, sans-serif"><strong>转载说明</strong> 此转载基于原作者最后更新于2002-06-15 23:18:05的版本。原作可以在</font><a href="http://www.chedong.com/tech/cvs_card.html"><font face="Verdana, Arial, Helvetica, sans-serif">这里</font></a><font face="Verdana, Arial, Helvetica, sans-serif">找到，本文的版权归原作者所有。本文作者原为网易公司的资深开发人员。</font></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif"><strong>版权声明</strong> 可以任意转载，转载时请务必标明</font><a href="http://www.chedong.com/tech/cvs_card.html"><font face="Verdana, Arial, Helvetica, sans-serif">原始出处</font></a><font face="Verdana, Arial, Helvetica, sans-serif">和作者信息<br></font></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">概述：CVS是一个C/S系统，多个开发人员通过一个中心版本控制系统来记录文件版本，从而达到保证文件同步的目的。 </font></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CVS服务器（文件版本库）<br>&nbsp;&nbsp;&nbsp;&nbsp; /&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<br>（版 本 同 步）<br>&nbsp;&nbsp; /&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \&nbsp;&nbsp;<br>开发者1&nbsp; 开发者2&nbsp;&nbsp; 开发者3 </font></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">以下是本文主要内容：开发人员可以主要挑选2, 6看就可以了，CVS的管理员则更需要懂的更多一些</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" border=1>
                <tbody>
                    <tr>
                        <td width=110 bgColor=#008000><strong><font face="Verdana, Arial, Helvetica, sans-serif" color=#ffffff size=2>标题</font></strong></td>
                        <td width=362 bgColor=#008000><strong><font face="Verdana, Arial, Helvetica, sans-serif" color=#ffffff size=2>内容简介</font></strong></td>
                        <td width=201 bgColor=#008000><strong><font face="Verdana, Arial, Helvetica, sans-serif" color=#ffffff size=2>读者对象</font></strong></td>
                    </tr>
                    <tr>
                        <td width=110><a href="http://www.gbunix.com/htmldata/2005_01/15/27/article_1133_1.html#init"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>CVS环境初始化</font></a></td>
                        <td width=362><font face="Verdana, Arial, Helvetica, sans-serif" size=2>CVS环境的搭建</font></td>
                        <td width=201><font face="Verdana, Arial, Helvetica, sans-serif" size=2>管理员</font></td>
                    </tr>
                    <tr>
                        <td width=110 bgColor=#e0e0e0><a href="http://www.gbunix.com/htmldata/2005_01/15/27/article_1133_1.html#daily"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>CVS的日常使用</font></a></td>
                        <td width=362 bgColor=#e0e0e0><font face="Verdana, Arial, Helvetica, sans-serif" size=2>日常开发中最常用的CVS命令</font></td>
                        <td width=201 bgColor=#e0e0e0><font face="Verdana, Arial, Helvetica, sans-serif" size=2>开发人员、管理员</font></td>
                    </tr>
                    <tr>
                        <td width=110><a href="http://www.gbunix.com/htmldata/2005_01/15/27/article_1133_1.html#branch"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>CVS的分支开发</font></a></td>
                        <td width=362><font face="Verdana, Arial, Helvetica, sans-serif" size=2>项目按照不同进度和目标并发进行</font></td>
                        <td width=201><font face="Verdana, Arial, Helvetica, sans-serif" size=2>管理员</font></td>
                    </tr>
                    <tr>
                        <td width=110 bgColor=#e0e0e0><a href="http://www.gbunix.com/htmldata/2005_01/15/27/article_1133_1.html#ssh"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>CVS的用户认证</font></a></td>
                        <td width=362 bgColor=#e0e0e0><font face="Verdana, Arial, Helvetica, sans-serif" size=2>通过SSH的远程用户认证，安全，简单</font></td>
                        <td width=201 bgColor=#e0e0e0><font face="Verdana, Arial, Helvetica, sans-serif" size=2>管理员</font></td>
                    </tr>
                    <tr>
                        <td width=110><a href="http://www.gbunix.com/htmldata/2005_01/15/27/article_1133_1.html#cvsweb"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>CVSWEB</font></a></td>
                        <td width=362><font face="Verdana, Arial, Helvetica, sans-serif" size=2>CVS的WEB访问界面大大提高代码版本比较的效率</font></td>
                        <td width=201><font face="Verdana, Arial, Helvetica, sans-serif" size=2>管理员</font></td>
                    </tr>
                    <tr>
                        <td width=110 bgColor=#e0e0e0><a href="http://www.gbunix.com/htmldata/2005_01/15/27/article_1133_1.html#tag"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>CVS TAG</font></a></td>
                        <td width=362 bgColor=#e0e0e0><font face="Verdana, Arial, Helvetica, sans-serif" size=2>将$Id$加入代码注释中，方便开发过程的跟踪</font></td>
                        <td width=201 bgColor=#e0e0e0><font face="Verdana, Arial, Helvetica, sans-serif" size=2>开发人员</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">一个系统20%的功能往往能够满足80%的需求，CVS也不例外，以下是CVS最常用的功能，可能用到的还不到它全部命令选项的10%，更多的功能请在实际应用过程中体会，学习过程中应该是用多少，学多少，用到了再学也不迟。</font></p>
            <p><a id=init name=init><strong><font face="Verdana, Arial, Helvetica, sans-serif">CVS环境初始化<br></font></strong></a><strong><font face="Verdana, Arial, Helvetica, sans-serif">============</font></strong></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">环境设置：指定CVS库的路径CVSROOT</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>tcsh<br>setenv CVSROOT /path/to/cvsroot<br>bash<br>CVSROOT=/path/to/cvsroot ; export CVSROOT</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">后面还提到远程CVS服务器的设置：</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>CVSROOT=:ext:$USER@test.server.address#port:/path/to/cvsroot CVS_RSH=ssh; export CVSROOT CVS_RSH</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">初始化：中心库版本库的初始化，其实就是一个目录</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>cvs init</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">项目首次导入</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>cvs import -m "write some comments here" project_name vender_tag r_tag</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">项目导出：将代码从CVS库里导出</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>cvs checkout project_name</font></td>
                    </tr>
                </tbody>
            </table>
            <p><a id=daily name=daily><strong><font face="Verdana, Arial, Helvetica, sans-serif">CVS的日常使用</font></strong></a><font face="Verdana, Arial, Helvetica, sans-serif"><strong>&nbsp;&nbsp;</strong><br><strong>=============</strong></font></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">确认修改：确认自己的修改并写入到CVS库里</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>cvs commit -m "write some comments here" file_name</font></td>
                    </tr>
                </tbody>
            </table>
            <p><em><font face="Verdana, Arial, Helvetica, sans-serif">注意：CVS的很多动作都是通过cvs commit进行最后确认并修改的，在确认的前，还需要用户填写修改注释，以帮助其他开发人员了解修改的原因。如果不用写-m "comments"而直接确认`cvs commit file_name` 的话，cvs会自动调用系统缺省的文字编辑器(一般是vi)要求你写入注释。<br>注释的质量很重要：所以不仅必须要写，而且必须写一些比较有意义的内容：以方便其他开发人员能够很好的理解。不好的注释，很难让其他的开发人员快速的理解：比如： -m "bug fixed" 甚至 -m ""。好的注释，甚至可以用中文: -m "在用户注册过程中加入了Email地址校验"</font></em></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">同步最近修改：开始工作前和将自己的工作导入到CVS库里前都要做一次：先同步 后修改</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>cvs update -m "write some comments here" file_name</font></td>
                    </tr>
                </tbody>
            </table>
            <p><em><font face="Verdana, Arial, Helvetica, sans-serif">注意：不要使用项目首次导出后，以后就要用cvs update在导出的项目目录下进行同步了，而不是每次重新cvs checkout来同步文件了。如果导出后修改了文件，然后再次从导出的项目目录的上一级cvs checkout proj等于是删除了proj目录然后重新导出，上次导出后的修改就全丢了。</font></em></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">修改某个版本注释：每次只确认一个文件到CVS库里是一个很好的习惯，但难免有时候忘了指定文件名，把多个文件以同样注释commit到CVS库里了，以下命令可以允许你修改某个文件某个版本的注释：</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>cvs admin -m 1.3:"write some comments here" file_name</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">删除文件：<br>文件删除后，比如：</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>rm file_name<br>cvs rm file_name<br>cvs ci -m "write some comments here"</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">以上面前2步合并的方法为：</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>cvs rm -f file_name<br>cvs ci -m "why delete file"</font></td>
                    </tr>
                </tbody>
            </table>
            <p><em><font face="Verdana, Arial, Helvetica, sans-serif">注意：很多cvs命令都有缩写形式：commit=&gt;ci; update=&gt;up; checkout=&gt;co; remove=&gt;rm;</font></em></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">添加文件 文件添加后，比如：</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>touch new_file<br>cvs add new_file<br>cvs ci -m "write some comments here"</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">添加目录：</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>cvs add dir_name</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">查看修改历史：</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>cvs log file_name<br>cvs history file_name</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">查看当前文件不同版本的区别</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>cvs diff -r1.3 -r1.5 file_name</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">查看当前文件（可能已经修改了）和库中相应文件的区别</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>cvs diff file_name</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">cvs的web界面提供了更方便的定位文件修改和比较版本区别的方法，具体安装设置请看后面的cvsweb使用</font></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">正确的通过CVS恢复旧版本的方法：<br>如果用</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>cvs update -r1.2 file.name</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">这个命令是给file.name加一个STICK TAG： "1.2" ，虽然你的本意只是想将它恢复到1.2版本<br>正确的恢复版本的方法是</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>cvs update -p -r1.2 file_name &gt;file_name</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">如果不小心已经加成STICK TAG的话：用cvs update -A 解决</font></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">移动文件：文件重命名<br>cvs里没有cvs move或cvs rename，因为这两个操作是先cvs remove old_file_name，然后cvs add new_file_name实现的。</font></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">删除，移动目录：<br>最方便的方法是让管理员直接移动，删除CVSROOT里相应目录（因为CVS一个项目下的子目录都是独立的，移动到$CVSROOT目录下都可以作为新的独立项目：好比一颗树，其实砍下任意一枝都能独立存活），对目录进行了修改后，要求其开发人员重新导出项目cvs checkout project_name 或者用cvs update -dP同步。</font></p>
            <p><a id=branch name=branch><strong><font face="Verdana, Arial, Helvetica, sans-serif">CVS Branch：项目多分支同步开发<br></font></strong></a><strong><font face="Verdana, Arial, Helvetica, sans-serif">=============================</font></strong></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">确认版本里程碑：多个文件各自版本号不一样，项目到一定阶段，可以给所有文件统一指定一个阶段里程碑版本号，方便以后按照这个阶段里程碑版本号导出项目，同时也是项目的多个分支开发的基础。</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>cvs tag release_1_0</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">开始一个新的里程碑：</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>cvs commit -r 2</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">标记所有文件开始进入2.x的开发</font></p>
            <p><em><font face="Verdana, Arial, Helvetica, sans-serif">注意：CVS里的revsion和软件包的发布版本可以没有直接的关系。但所有文件使用和发布版本一致的版本号比较有助于维护。</font></em></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">在开发项目的2.x版本的时候发现1.x有问题，但2.x又不敢用，则从先前标记的里程碑：release_1_0导出一个分支release_1_0_patch</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>cvs rtag -b -r release_1_0 release_1_0_patch proj_dir</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">一些人先在另外一个目录下导出release_1_0_patch这个分支：解决1.0中的紧急问题，</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>cvs checkout -r release_1_0_patch</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">而其他人员仍旧在项目的主干分支2.x上开发</font></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">在release_1_0_patch上修正错误后，标记一个1.0的错误修正版本号</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>cvs tag release_1_0_patch_1</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">如果2.0认为这些错误修改在2.0里也需要，也可以在2.0的开发目录下合并release_1_0_patch_1中的修改到当前代码中：</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>cvs update -j release_1_0_patch_1</font></td>
                    </tr>
                </tbody>
            </table>
            <p><strong><font face="Verdana, Arial, Helvetica, sans-serif">CVS的远程认证：</font></strong><a id=ssh name=ssh><strong><font face="Verdana, Arial, Helvetica, sans-serif">通过SSH远程访问CVS<br></font></strong></a><strong><font face="Verdana, Arial, Helvetica, sans-serif">================================</font></strong></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">使用cvs本身的远程认证很麻烦,需要定义服务器和用户组，用户名，设置密码等，而且不安全，因此和系统本地帐号认证并通过SSH传输是比较好的办法，通过在客户机的/etc/profile里设置一下内容：</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>CVSROOT=:ext:$USER@test.server.address#port:/path/to/cvsroot CVS_RSH=ssh; export CVSROOT CVS_RSH</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">所有客户机所有本地用户都可以映射到CVS服务器相应同名帐号了。</font></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">如果CVS所在服务器的SSH端口不在缺省的22，或者和客户端与CVS服务器端SSH缺省端口不一致，有时候设置了：</font></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">:ext:$USER@test.server.address#port:/path/to/cvsroot</font></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">仍然不行，比如有以下错误信息：</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>ssh: test.server.address#port: Name or service not known<br>cvs [checkout aborted]: end of file from server (consult above messages if any)</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">解决的方法是做一个脚本指定端口转向（不能使用alias，会出找不到文件错误）：<br>创建一个/usr/bin/ssh_cvs文件：</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>#!/usr/bin/sh<br>/path/to/ssh -p 34567 "$@"</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">然后：chmod +x /usr/bin/ssh_cvs<br>并CVS_RSH=ssh_cvs; export CVS_RSH</font></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">注意：port是指相应服务器SSH的端口，不是cvs pserver的端口</font></p>
            <p><a id=cvsweb name=cvsweb><strong><font face="Verdana, Arial, Helvetica, sans-serif">CVSWEB：提高程序员比较文件修改效率<br></font></strong></a><strong><font face="Verdana, Arial, Helvetica, sans-serif">================================</font></strong></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">CVSWEB就是CVS的WEB界面，可以大大提高程序员定位修改的效率:<br>使用的样例可以看：</font><a href="http://www.freebsd.org/cgi/cvsweb.cgi"><font face="Verdana, Arial, Helvetica, sans-serif">http://www.freebsd.org/cgi/cvsweb.cgi</font></a></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">CVSWEB的下载：CVSWEB从最初的版本已经演化出很多功能界面更丰富的版本，这个是个人感觉觉得安装设置比较方便的：</font><a href="http://www.spaghetti-code.de/software/linux/cvsweb/"><font face="Verdana, Arial, Helvetica, sans-serif">http://www.spaghetti-code.de/software/linux/cvsweb/</font></a></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">下载解包：</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>tar zxf cvsweb.tgz</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">把配置文件cvsweb.conf放到安全的地方（比如和apache的配置放在同一个目录下），<br>修改：cvsweb.cgi让CGI找到配置文件：</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>$config = $ENV{'CVSWEB_CONFIG'} || '/path/to/apache/conf/cvsweb.conf';</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">转到/path/to/apache/conf下并修改cvsweb.conf：</font></p>
            <ol>
                <li><font face="Verdana, Arial, Helvetica, sans-serif">修改CVSROOT路径设置：<br>%CVSROOT = (<br>'Development' =&gt; '/path/to/cvsroot', #&lt;==修改指向本地的CVSROOT<br>); </font>
                <li><font face="Verdana, Arial, Helvetica, sans-serif">缺省不显示已经删除的文档：<br>"hideattic" =&gt; "1",#&lt;==缺省不显示已经删除的文档 </font>
                <li><font face="Verdana, Arial, Helvetica, sans-serif">在配置文件cvsweb.conf中还可以定制页头的描述信息，你可以修改$long_intro成你需要的文字</font></li>
            </ol>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">CVSWEB可不能随便开放给所有用户，因此需要使用WEB用户认证：<br>先生成 passwd:</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>/path/to/apache/bin/htpasswd -c cvsweb.passwd user</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">修改httpd.conf: 增加</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>&lt;Directory "/path/to/apache/cgi-bin/cvsweb/"&gt;<br>AuthName "CVS Authorization"<br>AuthType Basic<br>AuthUserFile /path/to/cvsweb.passwd<br>require valid-user<br>&lt;/Directory&gt;</font></td>
                    </tr>
                </tbody>
            </table>
            <p><a id=tag name=tag><strong><font face="Verdana, Arial, Helvetica, sans-serif">CVS TAGS: who? when?<br></font></strong></a><strong><font face="Verdana, Arial, Helvetica, sans-serif">====================</font></strong></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">将$Id$ 加在程序文件开头的注释里是一个很好的习惯，cvs能够自动更新其中的内容成：file_name version time user_name 的格式，比如：cvs_card.txt,v 1.1 2002/04/05 04:24:12 chedong Exp，可以这些信息了解文件的最后修改人和修改时间</font></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">几个常用的缺省文件：<br>default.php</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>&lt;?php<br>/*<br>* Copyright (c) 2002 Company Name.<br>* $Id$<br>*/<br><br>?&gt;</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">Default.java: 注意文件头一般注释用 /* 开始 JAVADOC注释用 /** 开始的区别</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>/*<br>* Copyright (c) 2002 Company Name.<br>* $Id$<br>*/<br><br>package com.netease;<br><br>import java.io;<br><br>/**<br>* comments here<br>*/<br>public class Default {<br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp; *<br>&nbsp;&nbsp;&nbsp; * @param<br>&nbsp;&nbsp;&nbsp; * @return<br>&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; public toString() {<br><br>&nbsp;&nbsp;&nbsp; }<br>}</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">default.pl:</font></p>
            <table class=code style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=1 width="100%" bgColor=#e0e0e0 border=0>
                <tbody>
                    <tr>
                        <td width="100%"><font face="Verdana, Arial, Helvetica, sans-serif" size=2>#!/usr/bin/perl -w<br># Copyright (c) 2002 Company Name.<br># $Id$<br><br># file comments here<br><br>use strict;</font></td>
                    </tr>
                </tbody>
            </table>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">相关资源：</font></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">CVS HOME：<br></font><a href="http://www.cvshome.org/"><font face="Verdana, Arial, Helvetica, sans-serif">http://www.cvshome.org/</font></a></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">CVS FAQ：<br></font><a href="http://www.loria.fr/~molli/cvs-index.html"><font face="Verdana, Arial, Helvetica, sans-serif">http://www.loria.fr/~molli/cvs-index.html</font></a></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">相关网站:<br></font><a href="http://directory.google.com/Top/Computers/Software/Configuration_Management/Tools/Concurrent_Versions_System/"><font face="Verdana, Arial, Helvetica, sans-serif">Google: CVS</font></a></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">CVS 免费书:<br></font><a href="http://cvsbook.red-bean.com/"><font face="Verdana, Arial, Helvetica, sans-serif">http://cvsbook.red-bean.com/</font></a></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif">CVS 命令的速查卡片：<br></font><a href="http://www.refcards.com/about/cvs.html"><font face="Verdana, Arial, Helvetica, sans-serif">http://www.refcards.com/about/cvs.html</font></a><br><br></p>
            </div>
            </td>
            </td>
        </tr>
        <!-- write by trotter 论坛链接 -->
        <tr>
            <td class=subhead vAlign=top>了解更多详情，参与讨论，请进入<strong>GBUNIX论坛</strong>：<br><br><a class=subhead href="http://www.gbunix.com/bbs/index.php">http://www.gbunix.com/bbs/index.php</a></td>
        </tr>
    </tbody>
</table>
<img src ="http://www.cppblog.com/prayer/aggbug/82951.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-05-14 14:33 <a href="http://www.cppblog.com/prayer/archive/2009/05/14/82951.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在commit之前恢复CVS remove</title><link>http://www.cppblog.com/prayer/archive/2009/05/14/82949.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Thu, 14 May 2009 06:29:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/05/14/82949.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/82949.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/05/14/82949.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/82949.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/82949.html</trackback:ping><description><![CDATA[<p>如果想恢复cvs remove过的文件(在commit之前)，只要进行简单的cvs add就好了。</p>
<p>重新考入该文件，然后cvs add是不好用的，会得到&#8221;should be removed and is still there (or is back again)&#8221;的错误信息。<br><code><br>cvs remove test.java (删除test.java)<br>cvs add test.java (不要试图加入一个新的test.java文件，add会找回之前删除的文件。如果想更新原来的test.java，在add之后，考入新的test.java)<br></code></p>
<img src ="http://www.cppblog.com/prayer/aggbug/82949.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-05-14 14:29 <a href="http://www.cppblog.com/prayer/archive/2009/05/14/82949.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CVS总结(使用)</title><link>http://www.cppblog.com/prayer/archive/2009/02/09/73286.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Mon, 09 Feb 2009 04:11:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/02/09/73286.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/73286.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/02/09/73286.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/73286.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/73286.html</trackback:ping><description><![CDATA[<p style="MARGIN: 0mm 0mm 0pt"><span style="FONT-SIZE: 12pt; COLOR: red"><font face=Century>cvs</font></span><span style="FONT-SIZE: 12pt; COLOR: red">基本命令</span><span style="FONT-SIZE: 12pt; COLOR: red"></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span style="COLOR: #00ccff"><font face=Century>checkout<span>&nbsp;&nbsp;</span>(co)</font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century>cvs checkout java_test</font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century></font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span style="COLOR: #00ccff"><font face=Century>diff</font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span>查看差异</span><span></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century>cvs diff test.c</font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century>cvs diff -c test.c</font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century></font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span>用编辑器查看</span><span></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century>Admin-</font></span><span>〉</span><span><font face=Century>Preferences-</font></span><span>〉</span><span><font face=Century>wincvs</font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century></font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span style="COLOR: #00ccff"><font face=Century>commit</font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span>提交</span><span></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century></font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span style="COLOR: #00ccff"><font face=Century>Log</font></span><span style="COLOR: #00ccff">　</span><span style="COLOR: #00ccff"></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span>查看日志</span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century></font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span style="COLOR: #00ccff">版本回退</span><span style="COLOR: #00ccff"></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span style="COLOR: #00ccff">方法</span><span style="COLOR: #00ccff"><font face=Century>1</font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century>cvs (-Q) update -p -r 1.2 test.c &gt; test.c</font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span style="COLOR: #00ccff"><font face=Century></font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span style="COLOR: #00ccff">方法</span><span style="COLOR: #00ccff"><font face=Century>2</font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century>cvs update -j 1.3 &#8211;j 1.2 test.c</font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><font face=Century><span>//</span><span>cvs up &#8211;A test.c</span></font></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century></font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span style="COLOR: red">模块设定</span><span style="COLOR: red"></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century>CVSROOT</font></span><span>文件夹下的</span><span><font face=Century>module</font></span><span>文件上写入</span><span></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span style="COLOR: #00ccff">代号</span><span style="COLOR: #00ccff"><span><font face=Century>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span style="COLOR: #00ccff">路径</span><span style="COLOR: #00ccff"></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span>如：</span><span><font face=Century>acctmgmt<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>project/acctmgmt</font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century></font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span style="COLOR: #00ccff">排除目录</span><span style="COLOR: #00ccff"></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span>如：</span><span><font face=Century>acctmgmt<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>!project/acctmgmt/doc project/acctmgmt</font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century></font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span style="COLOR: #00ccff">聚合多个目录</span><span style="COLOR: #00ccff"></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span>如：</span><span><font face=Century>linux_kernel &#8211;a init mm</font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>1<span>&nbsp;&nbsp;</span>2</font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span style="COLOR: red">版本标签</span><span style="COLOR: red"></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span style="COLOR: #3366ff">单个文件</span><span style="COLOR: #3366ff"></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span>cvs tag REL</span><span>_1_0_1 </span><span>test.c</span><span></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span style="COLOR: #3366ff">所有文件</span><span style="COLOR: #3366ff"></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span>cvs tag <st1:city><st1:place>BASEL</st1:place></st1:city>INE_1</span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span style="COLOR: #3366ff">删除标签</span><span style="COLOR: #3366ff"></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span>Cvs tag &#8211;d BASELINE</span><span>_1</span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span style="COLOR: #3366ff">修改标签名</span><span style="COLOR: #3366ff"></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span>先贴上新标签</span><span></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span>Cvs tag &#8211;r <st1:city><st1:place>BASEL</st1:place></st1:city>INE_1 BASELINE_2</span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span>然后删除旧标签名</span><span></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span>Cvs tag &#8211;d <st1:city><st1:place>BASEL</st1:place></st1:city>INE_1</span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span style="COLOR: #3366ff">标签的查看</span><span style="COLOR: #3366ff"></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span>Cvs status <span style="COLOR: red">&#8211;v</span> test.c</span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century></font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span>按日期贴标签</span><span></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span>Cvs rtag &#8211;D 20011010 REL_1_0_1 test</span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century></font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span>如果要取回老版本并进行修改，然后提交形成新版本的需求，有三种方法：</span><span></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century>1</font></span><span>、</span><span></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><font face=Century><span>Cvs update &#8211;p &#8211;D </span><span>&#8220;2001-05-08&#8221; test.c &gt; test.c</span></font></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century>2, </font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span>首先取消所有附着性标签、版本号、日期等</span><span></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><font face=Century><span>Cvs update &#8211;A</span><span></span></font></p>
<p style="MARGIN: 0mm 0mm 0pt"><span>在一个临时目录下导出代码</span><span></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><font face=Century><span>Cvs export &#8211;D &#8220;2001-05-08&#8221; test</span><span></span></font></p>
<p style="MARGIN: 0mm 0mm 0pt"><span>将所有代码拷贝到原有目录下覆盖所有原有文件</span><span></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><font face=Century><span>Cp &#8211;r test /home/src/test</span><span></span></font></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century>3</font></span><span>、</span><span></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century>cvs update -j 1.3 &#8211;j 1.2 test</font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century></font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span style="COLOR: #00ccff">版本分支</span><span style="COLOR: #00ccff"></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span>分支创建之后，分支标签是与分支树的头部版本关联的，而不是与分支基点关联的。如果需要载今后访问分支基点，需要在创建分支的时候，同时给主干代码树贴上一个便于识别的标签。</span><span></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span>1</span><span>、在工作拷贝中创建分支</span><span></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century>Cvs co &#8211;r BASELINE_1 test</font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century>Cvs tag &#8211;b BASELINE_1_PATCH test</font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century></font></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century>2</font></span><span>、直接在仓库中创建分支</span><span></span></p>
<p style="MARGIN: 0mm 0mm 0pt"><span><font face=Century>Cvs rtag &#8211;b &#8211;r BASELINE_1 BASELINE_1_PATCH</font></span></p>
<img src ="http://www.cppblog.com/prayer/aggbug/73286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-02-09 12:11 <a href="http://www.cppblog.com/prayer/archive/2009/02/09/73286.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于二进制文件的问题 cvs diff</title><link>http://www.cppblog.com/prayer/archive/2008/12/17/69645.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Wed, 17 Dec 2008 04:47:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2008/12/17/69645.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/69645.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2008/12/17/69645.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/69645.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/69645.html</trackback:ping><description><![CDATA[<p>什么时候需要对二进制文件进行管理是很明显的：你通常使用的是二进制文件，把它们放到版本控制时，要注意的一些额外的问题。
<p>版本控制的一个基本功能是显示两个修订版之间的差异。例如，如果某人检入了一个文件的新版本， 也许你想看看这个版本有什么变化并想确定这些改变的好坏。对于文本文件 <span class=sc>cvs</span> 是通过 <code>cvs diff</code> 命令来提供该功能。对于二进制文件，一种可能的做法是：首先抽取这两的修订版本，然后使用 <span class=sc>cvs</span> 外部工具（例如，字处理软件通常都具有这样的功能）来比较它们。如果没有这样的工具，那么必须通过其他的机制来跟踪改变，例如督促人们认真记录日志信息，并希望他们实际所作的改动就是他们想要改的。
<p>版本控制系统的另一个功能是合并两个修订版。对于 <span class=sc>cvs</span>，两种环境下发生这种情况。一是用户所作的改变是在不同的工作目录下(参阅 <a href="http://www.kuqin.com/cvsdocument/Multiple-developers.html#Multiple-developers"><u><font color=#0000ff>Multiple developers</font></u></a>)。第二是是某人用 `<samp><span class=samp>update -j</span></samp>' 命令显式合并时(参阅 <a href="http://www.kuqin.com/cvsdocument/Branching-and-merging.html#Branching-and-merging"><u><font color=#0000ff>Branching and merging</font></u></a>)。
<p>对于文本文件，<span class=sc>cvs</span> 可以独立地合并，如果有冲突还可以给出冲突信号。而对于二进制文件，<span class=sc>cvs</span> 的最好做法是提供两个文件的不同副本，让用户自己解决冲突。用户可以任选其中一个副本，或者通过能处理该格式文件的合并工具来解决这个问题。注意，让用户解决合并，主要靠用户不会偶然忽略一些改变，因此会有潜在的错误发生。
<p>如果不喜欢上述处理方式的话，最好的解决办法是避免合并。如何避免由于不同的工作目录引起的合并，参见 <a href="http://www.kuqin.com/cvsdocument/Multiple-developers.html#Multiple-developers"><u><font color=#0000ff>Multiple developers</font></u></a> 里关于保留的检出方法（文件加锁）的讨论。为了避免由于分支引起的合并，还要限制使用分支。 </p>
<img src ="http://www.cppblog.com/prayer/aggbug/69645.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2008-12-17 12:47 <a href="http://www.cppblog.com/prayer/archive/2008/12/17/69645.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>