📄 cvsup.html
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta name="generator" content="HTML Tidy, see www.w3.org" /><title>使用 CVSup</title><meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.7" /><link rel="HOME" title="FreeBSD 使用手册" href="index.html" /><link rel="UP" title="获取 FreeBSD" href="mirrors.html" /><link rel="PREVIOUS" title="使用 CTM" href="ctm.html" /><link rel="NEXT" title="CVS 标签" href="cvs-tags.html" /><link rel="STYLESHEET" type="text/css" href="docbook.css" /><meta http-equiv="Content-Type" content="text/html; charset=GB2312" /></head><body class="SECT1" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#840084"alink="#0000FF"><div class="NAVHEADER"><table summary="Header navigation table" width="100%" border="0" cellpadding="0"cellspacing="0"><tr><th colspan="3" align="center">FreeBSD 使用手册</th></tr><tr><td width="10%" align="left" valign="bottom"><a href="ctm.html"accesskey="P">后退</a></td><td width="80%" align="center" valign="bottom">附录 A. 获取 FreeBSD</td><td width="10%" align="right" valign="bottom"><a href="cvs-tags.html"accesskey="N">前进</a></td></tr></table><hr align="LEFT" width="100%" /></div><div class="SECT1"><h1 class="SECT1"><a id="CVSUP" name="CVSUP">A.5. 使用 CVSup</a></h1><div class="SECT2"><h2 class="SECT2"><a id="CVSUP-INTRO" name="CVSUP-INTRO">A.5.1. 概述</a></h2><p><b class="APPLICATION">CVSup</b> 是一个用于从远程服务器主机上的主 CVS仓库发布和升级源代码树的软件包。 FreeBSD 的源代码维护在加利福尼亚州一台主开发服务器的 CVS仓库里。 有了 <b class="APPLICATION">CVSup</b>,FreeBSD用户可以很容易的保持他们自己的源代码树更新。</p><p><b class="APPLICATION">CVSup</b> 使用所谓的升级 <span class="emphasis"><iclass="EMPHASIS">pull</i></span> 模式。在 pull模式下,客户端在需要的时候向服务器端请求更新。 服务器被动的等待客户端的升级请求。因此所有的升级都是客户端发起的。 服务器决不会发送未请求的升级。用户必须手动运行 <bclass="APPLICATION">CVSup</b> 客户端获取更新, 或者设置一个 <tt class="COMMAND">cron</tt>作业来让它以固定的规律自动运行。</p><p>术语 <b class="APPLICATION">CVSup</b>用大写字母写正是表示, 代表了完整的软件包。它的主要组件是运行在每个用户机器上的客户端 <tt class="COMMAND">cvsup</tt>, 和运行在每个FreeBSD 镜像站点上的服务器端 <tt class="COMMAND">cvsupd</tt>。</p><p>当您阅读 FreeBSD 文档和邮件列表时,您可能会看见 <b class="APPLICATION">sup</b>。 <bclass="APPLICATION">Sup</b> 是 <b class="APPLICATION">CVSup</b> 的前身,有着相似的目的。<b class="APPLICATION">CVSup</b> 使用很多和 sup 相同的方式, 而且, 它还是用使用和 <ttclass="COMMAND">sup</tt> 的兼容的配置文件。 <b class="APPLICATION">Sup</b> 已经不再被FreeBSD 项目使用了, 因为 <b class="APPLICATION">CVSup</b> 既快又有更好的灵活性。</p></div><div class="SECT2"><h2 class="SECT2"><a id="CVSUP-INSTALL" name="CVSUP-INSTALL">A.5.2. 安装</a></h2><p>安装 <b class="APPLICATION">CVSup</b> 最简单的方式就是使用 FreeBSD <ahref="ports.html">packages collection</a> 中预编译的 <ahref="http://www.FreeBSD.org/cgi/url.cgi?ports/net/cvsup/pkg-descr"><ttclass="FILENAME">net/cvsup</tt></a> 包。 如果您想从源代码构建 <bclass="APPLICATION">CVSup</b>, 您可以使用 <ahref="http://www.FreeBSD.org/cgi/url.cgi?ports/net/cvsup/pkg-descr"><ttclass="FILENAME">net/cvsup</tt></a> port。但是预先警告一下: <ahref="http://www.FreeBSD.org/cgi/url.cgi?ports/net/cvsup/pkg-descr"><ttclass="FILENAME">net/cvsup</tt></a> port 依赖于 Modula-3系统,会花费相当的时间和磁盘空间来下载编译。</p><div class="NOTE"><blockquote class="NOTE"><p><b>注:</b> 如果您想在没有安装 <b class="APPLICATION"><spanclass="TRADEMARK">XFree86</span>™</b> 的机器上使用 <bclass="APPLICATION">CVSup</b>, 比如服务器系统,请确保使用不包含 <bclass="APPLICATION">CVSup</b> <acronym class="ACRONYM">GUI</acronym> 的 port, <ahref="http://www.FreeBSD.org/cgi/url.cgi?ports/net/cvsup-without-gui/pkg-descr"><ttclass="FILENAME">net/cvsup-without-gui</tt></a>。</p></blockquote></div></div><div class="SECT2"><h2 class="SECT2"><a id="CVSUP-CONFIG" name="CVSUP-CONFIG">A.5.3. CVSup 配置</a></h2><p><b class="APPLICATION">CVSup</b> 的操作被一个叫做 <tt class="FILENAME">supfile</tt>的配置文件所控制。 在目录 <a href="file://localhost/usr/share/examples/cvsup/"target="_top"><tt class="FILENAME">/usr/share/examples/cvsup/</tt></a> 下面有一些示例的<tt class="FILENAME">supfiles</tt>。</p><p><tt class="FILENAME">supfile</tt> 中的信息解答了 <b class="APPLICATION">CVSup</b>下面的几个问题:</p><ul><li><p><a href="cvsup.html#CVSUP-CONFIG-FILES">您想接收 哪些文件?</a></p></li><li><p><a href="cvsup.html#CVSUP-CONFIG-VERS">您想要它们的 哪个版本?</a></p></li><li><p><a href="cvsup.html#CVSUP-CONFIG-WHERE">您想从哪里 获取它们?</a></p></li><li><p><a href="cvsup.html#CVSUP-CONFIG-DEST">您想把它们 放在您自己机器的什么地方?</a></p></li><li><p><a href="cvsup.html#CVSUP-CONFIG-STATUS">您想把 您的状态文件放在哪?</a></p></li></ul><p>在下面的章节里,我们通过依次回答这些问题来创建一个典型的 <ttclass="FILENAME">supfile</tt> 文件。首先,我们描述一下 <tt class="FILENAME">supfile</tt>的整体构成。</p><p><tt class="FILENAME">supfile</tt> 是个文本文件。注释用 <var class="LITERAL">#</var>开头,至行尾有效。 空行和只包含注释的行会被忽略。</p><p>每个保留行描述一批用户希望接收的文件。 每行以 ``collection'',由服务器端定义的合理的文件分组,的名字开头。 collection 的名字告诉服务器你想要的文件。collection 名字结束或者有更多的字段,用空格分隔。 这些字段回答了上面列出的问题。字段类型有两种:标记字段和值字段。 标记字段由独立的关键字组成,比如, <varclass="LITERAL">delete</var> 或者 <varclass="LITERAL">compress</var>。值字段也用关键字开头, 关键字后面跟 <varclass="LITERAL">=</var> 和第二个词而没有空格。 例如,<varclass="LITERAL">release=cvs</var> 是一个值字段。</p><p>一个典型的 <tt class="FILENAME">supfile</tt> 往往接收多于一个的 collection。创建 <ttclass="FILENAME">supfile</tt> 的一种方式是明确的为每一个 collection指定相关的字段。然而,这样使得 <tt class="FILENAME">supfile</tt>的行变得特别长,很不方便, 因为 <tt class="FILENAME">supfile</tt> 中的所有 collection的大部分 字段都是相同的。 <b class="APPLICATION">CVSup</b> 提供了一个默认机制来避免这些问题。用特定的伪 collection 名 <var class="LITERAL">*default</var>开头的行可以被用来设置标记和值为 <tt class="FILENAME">supfile</tt> 中随后的 collection中的默认值。 默认值可以通过为这个 collection 自身指定不同的值来对单个的 collection覆盖设置, 也可以在 mid-supfile 中通过附加的 <var class="LITERAL">*default</var>行改变或扩充。</p><p>知道了这些,我们现在就可以开始创建一个 用于接收和升级 <ahref="current-stable.html#CURRENT">FreeBSD-CURRENT</a> 主源代码树的 <ttclass="FILENAME">supfile</tt> 文件了。</p><ul><li><p><a id="CVSUP-CONFIG-FILES" name="CVSUP-CONFIG-FILES"></a>您想接收 哪些文件?</p><p>通过 <b class="APPLICATION">CVSup</b> 可用的文件组织成叫做 ``collections'' 的名称组。这些可用的 collection 在 <a href="cvsup.html#CVSUP-COLLEC">随后的章节</a> 中描述。在这个例子里, 我们希望接收 FreeBSD 系统的完整的主代码树。 有一个单独的大的 collection<var class="LITERAL">src-all</var> 让我们完成这个。 创建我们的 <ttclass="FILENAME">supfile</tt> 的第一步, 我们简单的列出这些collection,每个一行(在这个例子里, 只有一行):</p><pre class="PROGRAMLISTING">src-all</pre></li><li><p><a id="CVSUP-CONFIG-VERS" name="CVSUP-CONFIG-VERS"></a>您想要他们的 哪个版本?</p><p>通过 <b class="APPLICATION">CVSup</b>,您实际上可以接收 曾经存在的源代码的任何版本。这是有可能的,因为 <b class="APPLICATION">cvsupd</b> 服务器直接通过 CVS仓库工作,那包含了所有的版本。您可以 用 <var class="LITERAL">tag=</var> 和 <varclass="OPTION">date=</var> 值字段 指定一个您想要的版本。</p><div class="WARNING"><blockquote class="WARNING"><p><b>警告</b>仔细的正确指定任何 <var class="LITERAL">tag=</var> 字段。有一些 tag只对特定的 collection 文件合法。 如果您指定了一个不正确的或者 拼写错误的 tag,<bclass="APPLICATION">CVSup</b> 会删除您可能不想删除的文件。 特别地,对 <varclass="LITERAL">ports-*</var> collection <span class="emphasis"><iclass="EMPHASIS">只</i></span>使用 <var class="LITERAL">tag=.</var>。</p></blockquote></div><p><var class="LITERAL">tag=</var> 字段在仓库中表示为一个符号标签。有两种标签,修订标签和分支标签。 修订标签代表一个特定的修订版本。 它的含义是一成不变的。分支标签,另一方面,代表给定开发线上给定时间的最新修订。因为分支标签不代表一个特定的修订版本, 它明天的含义就可能和今天的有所不同。</p><p><a href="cvs-tags.html">µÚ A.6 节</a> 包含了用户可能感兴趣的分支标签。 当在<b class="APPLICATION">CVSup</b> 的配置文件中指定标签的时候,必须用 <varclass="LITERAL">tag=</var> 开头 (<var class="LITERAL">RELENG_4</var> 会变成 <varclass="LITERAL">tag=RELENG_4</var>)。 记住只有 <var class="LITERAL">tag=.</var> 是 portscollection 相适应的。</p><div class="WARNING"><blockquote class="WARNING"><p><b>警告</b>注意像看到的那样正确的输入标签名。 <b class="APPLICATION">CVSup</b>不能辨别合法和不合法标签。 如果您拼写错了标签名, <b class="APPLICATION">CVSup</b>会像您指定了一个没有任何文件的合法标签一样工作, 那会删除您已经存在的代码。</p></blockquote></div><p>当您指定一个分支标签的时候,您通常会收到开发线上文件的最新版本。如果您希望接收一些过时的版本,您可以通过用 <var class="OPTION">date=</var>值字段指定一个日期来做到。 <span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">cvsup</span>(1)</span> 手册页解释了如何来做。</p><p>对于我们的示例来说,我们希望接收 FreeBSD-CURRENT。 我们在我们的 <ttclass="FILENAME">supfile</tt> 的开头添加这行:</p><pre class="PROGRAMLISTING">*default tag=.</pre><p>有一个重要的特例, 如果您既没指定 <var class="LITERAL">tag=</var> 字段也没指定 <varclass="LITERAL">date=</var> 字段的情况。这种情况下, 您会收到直接来自于服务器 CVS仓库的真实的 RCS 文件, 而不是某一特定版本。 开发人员一般喜欢这种操作模式。通过在他们的系统上维护一份仓库自身的副本, 他们可以浏览修订历史以及检查文件过去的版本。然而,这个好处是以大量的磁盘空间为代价的。</p></li><li><p><a id="CVSUP-CONFIG-WHERE" name="CVSUP-CONFIG-WHERE"></a>您想从哪里获取他们?</p><p>我们使用 <var class="LITERAL">host=</var> 字段来告诉 <tt class="COMMAND">cvsup</tt>从哪里获取更新。 任何一个 <a href="cvsup.html#CVSUP-MIRRORS">CVSup 镜像站点</a>都可以,虽然您应该选择一个离您比较近的站点。 在这个例子里我们将使用一个虚拟的 FreeBSD 发布站点,<tt class="HOSTID">cvsup666.FreeBSD.org</tt>:</p><pre class="PROGRAMLISTING">*default host=cvsup666.FreeBSD.org</pre><p>您需要在运行 <b class="APPLICATION">CVSup</b> 之前把这个改成一个实际存在的站点。在任何 <tt class="COMMAND">cvsup</tt> 运行的特定时刻, 您都可以在命令行上使用 <varclass="OPTION">-h <var class="REPLACEABLE">hostname</var></var> 选项来覆盖主机设置。</p></li><li><p><a id="CVSUP-CONFIG-DEST" name="CVSUP-CONFIG-DEST"></a>您想把它们放在您自己机器的什么地方?</p><p><var class="LITERAL">prefix=</var> 字段告诉 <tt class="COMMAND">cvsup</tt>把接收的文件放在哪里。 在这个例子里,我们把源代码文件直接放进我们的主源代码树, <ttclass="FILENAME">/usr/src</tt>。 <tt class="FILENAME">src</tt>目录已经隐含在我们选择接收的 collection 里了, 所以正确的写法是:</p><pre class="PROGRAMLISTING">*default prefix=/usr</pre></li><li><p><a id="CVSUP-CONFIG-STATUS" name="CVSUP-CONFIG-STATUS"></a> <ttclass="COMMAND">cvsup</tt> 在哪里维护它的状态文件?</p><p><b class="APPLICATION">CVSup</b> 客户端在被叫做 ``base'' 的目录里维护了几个状态文件。这些文件帮助 <b class="APPLICATION">CVSup</b> 更有效的工作,通过跟踪您已经接收到哪些更新的方式。 我们将使用标准的 base 目录, <ttclass="FILENAME">/usr/local/etc/cvsup</tt>:</p><pre class="PROGRAMLISTING">*default base=/usr/local/etc/cvsup</pre><p>这个设置如果没有在 <tt class="FILENAME">supfile</tt> 中指定的话就会被使用,所以实际上我们不需要上面这行。</p><p>如果您的 base 目录还不存在,现在最好创建它。 如果 base 目录不存在,<ttclass="COMMAND">cvsup</tt> 客户端会拒绝工作。</p></li><li><p>其他的 <tt class="FILENAME">supfile</tt> 设置:</p><p>在 <tt class="FILENAME">supfile</tt> 中有一些其他选项需要介绍一下:</p><pre class="PROGRAMLISTING">*default release=cvs delete use-rel-suffix compress</pre><p><var class="LITERAL">release=cvs</var> 显示服务器应该从 FreeBSD 的主 CVS仓库中获取信息。 事实上总是这样的,但是也有可能会超出这个讨论的范围。</p><p><var class="LITERAL">delete</var> 给 <b class="APPLICATION">CVSup</b> 权限删除文件。您应该总是指定这个,这样 <b class="APPLICATION">CVSup</b>可以保证您的源代码树完全更新。<b class="APPLICATION">CVSup</b>很小心的只删除那些不再依赖的文件。 您拥有的任何额外的文件会被严格的保留。</p><p><var class="LITERAL">use-rel-suffix</var> 是 ... 不可思议的。 如果您真的想了解它,查看<span class="CITEREFENTRY"><span class="REFENTRYTITLE">cvsup</span>(1)</span> 手册页。否则,就指定而不用担心这个。</p><p><var class="LITERAL">compress</var> 启用 gzip 风格的信道压缩。 如果您的网络连接是 T1或者更快, 您可能不想使用压缩。 否则,它非常有帮助。</p></li><li><p>把它们放在一起:</p><p>这是我们的示例的完整 <tt class="FILENAME">supfile</tt> 文件:</p><pre class="PROGRAMLISTING">*default tag=.*default host=cvsup666.FreeBSD.org*default prefix=/usr*default base=/usr/local/etc/cvsup*default release=cvs delete use-rel-suffix compresssrc-all</pre></li></ul><div class="SECT3"><h3 class="SECT3"><a id="AEN39469" name="AEN39469">A.5.3.1. <ttclass="FILENAME">refuse</tt> 文件</a></h3><p>像上面提到的,<b class="APPLICATION">CVSup</b> 使用一种 <span class="emphasis"><iclass="EMPHASIS">pull 方法</i></span>。基本上,这意味着您要连接到 <bclass="APPLICATION">CVSup</b> 服务器,服务器说, ``这有些您能下载的东西...'',然后您的客户端反应``好,我要这个, 这个,这个,还有这个。''在默认的配置中, <bclass="APPLICATION">CVSup</b> 客户端会取回您在配置文件中选定的 collection和标签的每个文件。 然而,并不总是您想要的, 尤其是您在同步 <ttclass="FILENAME">doc</tt>,<tt class="FILENAME">ports</tt>,或者 <ttclass="FILENAME">www</tt> 树 -- 大部分人都不能阅读四种或者五种语言,因此他们不需要下载特定语言的文件。 如果您在 <b class="APPLICATION">CVSup</b> portscollection,您 可以通过单独指定每个 collection 来避免这个 (比如,<spanclass="emphasis"><i class="EMPHASIS">ports-astrology</i></span>, <spanclass="emphasis"><i class="EMPHASIS">ports-biology</i></span>,等等取代简单的说明 <spanclass="emphasis"><i class="EMPHASIS">ports-all</i></span>)。然而,因为 <ttclass="FILENAME">doc</tt> 和 <tt class="FILENAME">www</tt> 树没有特定语言的collection,您必须 使用 <b class="APPLICATION">CVSup</b> 许多极好的特性之一: <ttclass="FILENAME">refuse</tt> 文件。</p><p><tt class="FILENAME">refuse</tt> 文件本质上是告诉 <b class="APPLICATION">CVSup</b>它不应该从 collection 中取得某些文件;换句话说,它告诉客户端 <span class="emphasis"><iclass="EMPHASIS">拒绝</i></span> 来自服务器的特定的文件。 <ttclass="FILENAME">refuse</tt> 文件可以在 <tt class="FILENAME"><varclass="REPLACEABLE">base</var>/sup/</tt> 中找到(或者,如果您没有,应该创建一个)。 <varclass="REPLACEABLE">base</var> 在您的 <tt class="FILENAME">supfile</tt> 中定义;默认情况下,<var class="REPLACEABLE">base</var> 就是 <ttclass="FILENAME">/usr/local/etc/cvsup</tt>, 这意味着默认的 <ttclass="FILENAME">refuse</tt> 文件就是 <ttclass="FILENAME">/usr/local/etc/cvsup/sup/refuse</tt>。</p><p><tt class="FILENAME">refuse</tt> 文件的格式很简单;它仅仅包含您不希望下载的文件和目录名。 例如,如果您除了英语和一些德语之外不会讲其他语言,而且感觉不需要使用德语应用程序(或者除了英语之外任何语言的应用程序),您可以把下面这些放在您的 <tt class="FILENAME">refuse</tt> 文件里:</p><pre class="SCREEN">ports/arabicports/chineseports/frenchports/germanports/hebrewports/hungarianports/japaneseports/koreanports/polishports/portugueseports/russianports/ukrainianports/vietnamesedoc/da_*doc/de_*doc/el_*doc/es_*doc/fr_*doc/it_*doc/ja_*doc/nl_*doc/no_*doc/pl_*doc/pt_*doc/ru_*doc/sr_*doc/zh_*</pre><p>等等其他语言(您可以通过浏览 <a href="http://www.FreeBSD.org/cgi/cvsweb.cgi/"target="_top">FreeBSD CVS 仓库</a>找到完整的列表)。</p><p>有这个非常有用的特性,那些慢速连接或者要为他们的 Internet连接按时付费的用户就可以节省宝贵的时间因为他们不再需要 下载那些从来不用的文件。要了解 <ttclass="FILENAME">refuse</tt> 文件的更多信息以及其它 <b class="APPLICATION">CVSup</b>的优雅的特性,请浏览它的 手册页。</p></div></div><div class="SECT2"><h2 class="SECT2"><a id="AEN39512" name="AEN39512">A.5.4. 运行 <bclass="APPLICATION">CVSup</b></a></h2><p>您现在准备尝试升级了。命令很简单:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">cvsup <varclass="REPLACEABLE">supfile</var></kbd></pre><p><tt class="FILENAME"><var class="REPLACEABLE">supfile</var></tt>的位置当然就是您刚刚创建的 <tt class="FILENAME">supfile</tt> 文件名啦。 如果您在 X11下面运行,<tt class="COMMAND">cvsup</tt> 会显示一个有一些可以做平常事情的按钮的 GUI窗口。 按 <span class="GUIBUTTON">go</span> 按钮,然后看着它运行。</p><p>在这个例子里您将要升级您目前的 <tt class="FILENAME">/usr/src</tt> 树,您将需要 用 <ttclass="USERNAME">root</tt> 来运行程序,这样 <tt class="COMMAND">cvsup</tt>有需要的权限来更新您的文件。 刚刚创建了您的配置文件,又从来没有使用过这个程序,紧张不安是可以理解的。有一个简单的方法不改变您当前的文件来做一次试验性的运行。只要在方便的地方创建一个空目录,并在命令行上作为一个额外的参数说明:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">mkdir /var/tmp/dest</kbd><samp class="PROMPT">#</samp> <kbd class="USERINPUT">cvsup supfile /var/tmp/dest</kbd></pre><p>您指定的目录会作为所有文件更新的目的路径。 <b class="APPLICATION">CVSup</b> 会检查您在<tt class="FILENAME">/usr/src</tt> 中的文件,但是不会修改或 删除。任何文件更新都会被放到<tt class="FILENAME">/var/tmp/dest/usr/src</tt> 里了。 在这种方式下运行 <bclass="APPLICATION">CVSup</b> 也会把它的 base 目录状态文件保持原样。这些文件的新版本会被写到指定的目录。 因为您有 <tt class="FILENAME">/usr/src</tt>目录的读权限,所以执行这种试验性的运行 甚至不需要使用 <tt class="USERNAME">root</tt>用户。</p><p>如果您没有运行 X11 或者不喜欢 GUI, 当您运行 <tt class="COMMAND">cvsup</tt>的时候需要在命令行添加 两个选项:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">cvsup -g -L 2 <varclass="REPLACEABLE">supfile</var></kbd></pre><p><var class="OPTION">-g</var> 告诉 <b class="APPLICATION">CVSup</b> 不要使用GUI。如果您 没在运行 X11 这个是自动的,否则您必须指定它。</p><p><var class="OPTION">-L 2</var> 告诉 <b class="APPLICATION">CVSup</b>输出所有正在升级的文件的细节。 有三个等级可以选择,从 <var class="OPTION">-L 0</var> 到<var class="OPTION">-L 2</var>。默认是 0,意味着除了错误消息 什么都不输出。</p><p>还有许多其它的选项可用。想要一个简短的列表, 输入 <tt class="COMMAND">cvsup-H</tt>。要查看更详细的描述, 请查看手册页。</p><p>一旦您对升级工作的方式满意了,您就 可以使用 <span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">cron</span>(8)</span> 来安排规则的运行 <bclass="APPLICATION">CVSup</b>。 很显然的,您不应该让 <b class="APPLICATION">CVSup</b>通过 <span class="CITEREFENTRY"><span class="REFENTRYTITLE">cron</span>(8)</span>运行的时候使用它的 GUI。</p></div><div class="SECT2"><h2 class="SECT2"><a id="CVSUP-COLLEC" name="CVSUP-COLLEC">A.5.5. <bclass="APPLICATION">CVSup</b> 文件 collection</a></h2><p><b class="APPLICATION">CVSup</b> 可用的文件 collection 是分级组织的。 有几个大的collection,然后它们有分成更小的子 collection。接收一个大的 collection 等同于接收它的每一个子 collection。 collection 的等级关系在下面列表中通过缩进的使用反映出来。</p><p>最常用的 collection 是 <var class="LITERAL">src-all</var>,和 <varclass="LITERAL">ports-all</var>。其它的 collection 只被有着特定 目的的小部分人使用,有些站点可能不全部支持。</p><div class="VARIABLELIST"><dl><dt><var class="LITERAL">cvs-all release=cvs</var></dt><dd><p>FreeBSD 主 CVS 仓库,包含 密码系统的代码。</p><div class="VARIABLELIST"><dl><dt><var class="LITERAL">distrib release=cvs</var></dt><dd><p>FreeBSD 发行版本和镜像相关的 文件。</p></dd><dt><var class="LITERAL">doc-all release=cvs</var></dt><dd><p>FreeBSD 使用手册和其它文档的源代码。 其中不包含 FreeBSD web 站点的文件。</p></dd><dt><var class="LITERAL">ports-all release=cvs</var></dt><dd><p>FreeBSD Ports Collection。</p><div class="IMPORTANT"><blockquote class="IMPORTANT"><a id="CVSUP-COLLEC-PBASE-WARN"name="CVSUP-COLLEC-PBASE-WARN"></a><p><b>重要:</b> 如果您不想升级全部的 <var class="LITERAL">ports-all</var>(整个 ports树), 而只是使用下面列出的一个子集, 请确保您<span class="emphasis"><iclass="EMPHASIS">总是</i></span>升级了 <var class="LITERAL">ports-base</var> 子collection! 无论何时在 ports 构建下层构造有所改变的时候都会通过 <varclass="LITERAL">ports-base</var> 表现出来,事实上某些 改变会很快的被``实际的'' ports使用,因此,如果您只升级了 ``实际的'' ports 而他们使用了一些新的特性,就有极大的可能编译会因一些神秘的错误信息而失败。 这种情况下<span class="emphasis"><iclass="EMPHASIS">非常快速的</i></span>要做的事情 就是确保您的 <varclass="LITERAL">ports-base</var> 子 collection 更新到 最新。</p></blockquote></div><div class="VARIABLELIST"><dl><dt><var class="LITERAL">ports-archivers release=cvs</var></dt><dd><p>存档工具。</p></dd><dt><var class="LITERAL">ports-astro release=cvs</var></dt><dd><p>天文相关的 ports。</p></dd><dt><var class="LITERAL">ports-audio release=cvs</var></dt>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -