<?xml version="1.0" encoding="big5"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V4.5-Based Extension//EN"
	"../../../share/xml/freebsd45.dtd">

<!-- $FreeBSD$ -->
<!-- The FreeBSD Documentation Project -->
<!-- Setting up a CVS repository - the FreeBSD way -->
<!-- Translate into Chinese by jose@jose.idv.tw -->
<!-- English Version: 1.15 -->

<article lang='zh_tw'>
  <articleinfo>
    <title>«Ø¥ß CVS Àx¦s®w(repository) - ¨Ï¥Î FreeBSD ªº¤è¦¡</title>

    <author>
      <firstname>Stijn</firstname>
      <surname>Hoop</surname>
      <affiliation>
        <address><email>stijn@win.tue.nl</email></address>
      </affiliation>
    </author>

    <pubdate>$FreeBSD$</pubdate>

    <copyright>
      <year>2001</year>
      <year>2002</year>
      <year>2003</year>
      <holder role="mailto:stijn@win.tue.nl">Stijn Hoop</holder>
    </copyright>

    <releaseinfo>$FreeBSD$</releaseinfo>

    <legalnotice id="trademarks" role="trademarks">
      &tm-attrib.freebsd;
      &tm-attrib.general;
    </legalnotice>

    <abstract>
      <para>³o¥÷¤å¥ó´y­z¤F¨Ï¥Î©M FreeBSD ±M®×¬Û¦Pªº©R¥O½Z¨Ó«Ø¥ß CVS Àx¦s®wªº¨BÆJ
        ¡C³o©M¼Ð·Ç CVS «Ø¥ßªºÀx¦s®w¬Û¸û¤§¤U¦³³\¦hÀuÂI¡A¥]§t¤F§ó¦h¹ï©ó­ì©l½X¾ðªº
        granular access ±±¨î¡A¥H¤Î¬°¨C¤@¦¸ªº´£¥æ²£¥Í©öŪªº¹q¤l¶l¥ó¡C</para>
    </abstract>
  </articleinfo>

  <sect1 id="introduction">
    <title>²¤¶</title>

    <para>¤j¦h¼Æªº¶}©ñ­ì©l½X³nÅé±M®×³£¨Ï¥Î <application>CVS</application> §@¬°
      ¥L­Ìªº­ì©l½X±±¨î¨t²Î¡C·í <application>CVS</application> ¦³³o¼ËªºÀuÂI¦s¦b
      ®É¡A¥¦¤]¦³³¡¥÷ªº·å²«©M¯ÊÂI¡C¨ä¤¤¤§¤@ªº­ì¦]¬O©M¨ä¥Lªº¶}µoªÌ¤À¨É­ì©l½X¾ð¯à
      °÷§Ö³t¦a¾É­P¨t²ÎºÞ²zªº´c¹Ú¡A¯S§O¬O¦pªG¨ä¤¤¤@¤H§Æ±æ«OÅ@³¡¥÷ªº­ì©l½X¾ð§K¨ü
      ©ó¤@¯ëªº¦s¨ú¡C</para>

    <para>FreeBSD ¬O¨ä¤¤¤@­Ó¨Ï¥Î <application>CVS</application> ªº±M®×¡A¦P®É¤]
      ¬O°ò©ó¥¦ªº¶}µoªÌ¹M§G©ó¥þ¥@¬É¡C¥L­Ì¼¶¼g¤F¤@¨Ç©R¥O½Z¨Ï±oºÞ²zÀx¦s®wÅܱo§ó¥[
      ®e©ö¡C³Ìªñ³o¨Ç©R¥O½Z¥Ñ &a.joe; ­«·s¾ã²z¹L¥B§ó¼Ð·Ç¤Æ¡A¨Ï±o¦b¨ä¥Lªº±M®×¤W¦A
      ¦¸¨Ï¥Î³o¨Ç©R¥O½Z·|§ó¥[®e©ö¡C¥»¤å¥ó±N´y­z¨Ï¥Î³o¨Ç·sªº©R¥O½Zªº¤èªk¡C</para>

    <para>¬°¤F¨Ï¥»¤å¥ó¤¤ªº°T®§¦³¥Î¡A§A»Ý­n¼ô±x <application>CVS</application>
      °ò¥»ªº¾Þ§@¤è¦¡¡C</para>
  </sect1>

  <sect1 id="first-setup">
    <title>°ò¥»³]©w</title>

    <warning>
      <para>³Ì¦nªº¤è¦¡¬O¦b¤@­Ó¥þ·sªºÀx¦s®w¤¤°õ¦æ³o¨Ç¨BÆJ¡A¨Ã½T©w§A¤F¸Ñ©Ò¦³ªº«á
        ªG¡C¦P®É¡A½Ð½T©w§A¦³³Ì·s¥B¥iŪªº¸ê®Æ³Æ¥÷¡I</para>
    </warning>

    <sect2>
      <title>ªì©l¤ÆÀx¦s®w</title>

      <para>­º¥ý­n°µªº¬O«Ø¥ß¤@­Ó·sªºÀx¦s®w¡A°õ¦æ¤U¦C©R¥O§i¶D
        <application>CVS</application> «Ø¥ß¨Ãªì©l¤Æ¡G</para>

        <screen>&prompt.user; <userinput>cvs -d <replaceable>path-to-repository</replaceable> init</userinput></screen>

      <para>³o©R¥O§i¶D <application>CVS</application> «Ø¥ß
        <filename class="directory">CVSROOT</filename> ªº¥Ø¿ý¡A³o­Ó¥Ø¿ý¸Ì©ñ¸m¤F©Ò¦³ªº²ÕºAÀÉ¡C</para>
    </sect2>

    <sect2>
      <title>³]©wÀx¦s®wªº¸s²Õ</title>

      <para>²{¦b§Ú­Ì±N«Ø¥ß¤@­Ó¾Ö¦³¸ÓÀx¦s®wªº¸s²Õ¡A©Ò¦³ªº¶}µoªÌ¥²¶·¥[¤J³o­Ó¸s²Õ
        ¡A³o¼Ë¥L­Ì¤~¯à°÷¦s¨ú¸ÓÀx¦s®w¡C§Ú­Ì°²³]¸s²Õ¦WºÙ¬O¥H FreeBSD ¤º©wªº
        <literal>ncvs</literal>¡C</para>

        <screen>&prompt.root; <userinput>pw groupadd <replaceable>ncvs</replaceable></userinput></screen>

      <para>±µªÌ§A»Ý­n¨Ï¥Î &man.chown.8; ±N¥Ø¿ý©Ò¦³ªÌ«ü©wµ¹­è­è·s¼Wªº¸s²Õ¡G</para>

        <screen>&prompt.root; <userinput>chown -R :<replaceable>ncvs</replaceable> <replaceable>path-to-your-repository</replaceable></userinput></screen>

      <para>¦p¦¹¤@¨Ó¨S¦³¾A·íªº¸s²Õ³\¥i±N¨S¦³¨ä¥L¤H¥i¥H¼g¤J¸ÓÀx¦s®w¡C</para>
    </sect2>

    <sect2>
      <title>¨ú¦^­ì©lÀÉ®×</title>

      <para>²{¦b§A»Ý­n±q FreeBSD Àx¦s®w¤¤¨ú¦^ <filename class="directory">CVSROOT</filename> ¥Ø¿ý¡A
        ±q FreeBSD °Î¦Wªº CVS ¬M®g¯¸¨Ó¨ú¦^·|¬O³Ì²³æªº¤èªk¡C½Ð¬d¾\ <ulink
          url="&url.books.handbook;/anoncvs.html">¦b handbook ¤¤ªº¬ÛÃö³¹¸`</ulink>¨Ó
        Àò±o§ó¦h¸ê°T¡C§Ú­Ì°²³]¨ú¦^ªºÀɮצs©ñ¦b¬Û¦P¥Ø¿ý¤Uªº
        <filename class="directory">CVSROOT-freebsd</filename> ¥Ø¿ý¤¤¡C</para>
    </sect2>

    <sect2>
      <title>½Æ»s FreeBSD ªº©R¥O½Z</title>

      <para>±µ¤U¨Ó§Ú­Ì­n½Æ»s FreeBSD <filename class="directory">CVSROOT</filename> ¸ÌªºÀɮרì§A
        ªºÀx¦s®w¤¤¡C¦pªG§A¬O±E±x©ó <application>CVS</application>¡A§A¤]³\·|·Q§A
        ¥i¥Hª½±µ¶×¤J³o¨Ç©R¥O½Z¡A¸Õ¹Ï§ó®e©öªº¦P®É©M§ó·sªºª©¥»¦P¨B¡F¤£¹L¡A¨Æ¹ê¬O
        <application>CVS</application> ¦b³o­Ó³¡¥÷¦³¯ÊÂI¡G·í¶×¤JÀɮרì
        <filename class="directory">CVSROOT</filename> ®É¡A¥¦¨Ã¤£·|§ó·s²ÕºAÀÉ¡C¬°¤F­n»{¥X³o¨ÇÀÉ®×
        ¡A§AÁٻݭn¦b¶×¤J¥¦­Ì«á¤@¤@­«·s´£¥æ¡A³o´N¥¢¥h¤F
        <literal>cvs import</literal> ªº»ù­È¡C¦]¦¹¡A«ØÄ³ªº¤èªk¬O¶È½Æ»s³o¨Ç©R¥O
        ½Z¹L¥h¡C</para>

      <para>­Y¤W­z¤º®e¹ï§A¨S¦³·N¸q¬O¤£­«­nªº&mdash;¦]¬°³Ì«áªºµ²ªG³£¬O¤@¼Ëªº¡C
        ­º¥ý¶×¥X§Aªº <filename class="directory">CVSROOT</filename>¡AµM«á½Æ»s­è­è¨ú¦^ªº FreeBSD
        Àɮר쥻¦aªº¥Ø¿ý¤¤¡]©|¥¼ÅܰʹL¡^¡G</para>

        <screen>&prompt.user; <userinput>cvs -d <replaceable>path-to-your-repository</replaceable> checkout CVSROOT</userinput>
&prompt.user; <userinput>cd CVSROOT</userinput>
&prompt.user; <userinput>cp ../CVSROOT-freebsd/* .</userinput>
&prompt.user; <userinput>cvs add *</userinput></screen>

      <para>ª`·N¡G§A«Ü¥i¯à·|±o¨ì¤@¬qÃö©ó¬Y¨Ç¥Ø¿ý¨S¦³³Q½Æ»sªºÄµ§i¡A³o¬O¥¿±`ªº¡A
        §A¨Ã¤£»Ý­n¥Î¨ì³o¨Ç¥Ø¿ý¡C</para>
    </sect2>

    <sect2>
      <title>©R¥O½Z»¡©ú</title>

      <para>²{¦b§Aªº¤u§@¥Ø¿ý¤¤¦³¤F§¹¾ã FreeBSD ±M®×¦b¥¦­ÌªºÀx¦s®w¤¤¨Ï¥Îªº©R¥O½Z
        ªº½Æ¥»¡A¥H¤U¬O¨C­ÓÀɮײ³æªº¤¶²Ð¡C</para>

      <itemizedlist>
        <listitem>
          <para><filename>access</filename> - ¦¹Àɮצb¹w³]ªº¦w¸Ë¤¤¨S¦³³Q¥Î¨ì¡C
            ³o¬O¨Ï¥Î¦b<link linkend="freebsdspecific">FreeBSD ªº¯S®í³]©w</link>¤¤
            ¡A¥Î¨Ó±±¨îÀx¦s®wªº¦s¨ú¡C¦pªG§A¤£§Æ±æ¨Ï¥Î³o­Ó³]©wªº¸Ü§A¥i¥H§R°£³o­ÓÀɮסC</para>
        </listitem>

        <listitem>
          <para><filename>avail</filename> - ¦¹ÀÉ®×±±¨îÀx¦s®wªº¦s¨ú¡C¦b¦¹Àɮפ¤
            §A¥i¥H«ü©w¤¹³\¦s¨úÀx¦s®wªº¸s²Õ¡A¤]¥i¥H°w¹ï¥Ø¿ý©ÎÀɮרөڵ´´£¥æ¡C§AÀ³¸Ó
            ½Õ¾ã¬°¦b§AªºÀx¦s®w¤¤±N¥]§tªº¸s²Õ©M¥Ø¿ý¡C</para>
        </listitem>

        <listitem>
          <para><filename>cfg.pm</filename> - ¦¹ÀÉ®×»¡©ú¤F³]©w¤º®e¡A¨Ã´£¨Ñ¹w³]ªº³]©w¡C
            §A<emphasis>¤£</emphasis>¸Ó­×§ï¦¹ÀɮסA¦Ó¸Ó±N­×§ïªº³]©w©ñ¨ì
            <filename>cfg_local.pm</filename>¡C</para>
        </listitem>

        <listitem>
          <para><filename>cfg_local.pm</filename> - ¦¹ÀÉ®×¥]§t©Ò¦³ªº¨t²Î³]©w­È
            ¡C§AÀ³¸Ó³]©w©Ò¦³¦C¦b¦¹ªº³]©w¡A¨Ò¦p´£¥æªº¶l¥ó­n±H¨ì­þ¡B¦b­þ¨Ç¥D¾÷¤W
            ªº¨Ï¥ÎªÌ¥i¥H´£¥æµ¥µ¥¡C§ó¦hªº¬ÛÃö¸ê°T¦bµy«á·|´£¨ì¡C</para>
        </listitem>

        <listitem>
          <para><filename>checkoutlist</filename> - ¦¹ÀɮצC¥X©Ò¦³¦b
            <application>CVS</application> ±±¨î¤U¦¹¥Ø¿ý¤¤ªºÀɮסA°£¤F¼Ð·Ç¦b
            <literal>cvs init</literal> «Ø¥ß¥XªºÀɮסC§A¥i¥H§R°£¬Y¨Ç¤£»Ý­nªº
            FreeBSD ¯S®íªºÀɮסC</para>
        </listitem>

        <listitem>
          <para><filename>commit_prep.pl</filename> - ¦¹©R¥O½Z°õ¦æ¦UºØ´£¥æ«eªºÀˬd¡A
            °ò©ó§A¬O§_¦b <filename>cfg_local.pm</filename> ¤¤±Ò¥Î¡C§A¤£¸Ó§ó°Ê¦¹ÀɮסC</para>
        </listitem>

        <listitem>
          <para><filename>commitcheck</filename> - ¦¹©R¥O½Z·|ª½±µ¼vÅT
            <application>CVS</application>¡C­º¥ý¥¦·|¨Ï¥Î
            <filename>cvs_acls.pl</filename> ¨ÓÀˬd´£¥æªÌ¬O§_¥i¥H¦s¨ú«ü©wªº­ì©l½X¾ð¡A
            µM«á°õ¦æ <filename>commit_prep.pl</filename> ¨Ó½T»{¦UºØ´£¥æ«eªºÀˬd¡C
            ¦pªG¤@¤Á¥¿±`¡A<application>CVS</application> ±N¤¹³\¦¹¦¸´£¥æÄ~Äò°õ¦æ¡C
            §A¤£¸Ó§ó°Ê¦¹ÀɮסC</para>
        </listitem>

        <listitem>
          <para><filename>commitinfo</filename> - ¦¹Àɮ׬O
            <application>CVS</application> ¥Î¨Ó©w¸q¦b´£¥æ«e©Ò­n°õ¦æªºµ{¦¡&mdash;¦b
            ¦¹¨Ò¤¤¬O <filename>commitcheck</filename>¡C§A¤£¸Ó§ó°Ê¦¹ÀɮסC</para>
        </listitem>

        <listitem>
          <para><filename>config</filename> - Àx¦s®wªº³]©w¿ï¶µ¡C§A¥i¥H­×§ï¬°§A
            ·Q­nªº¡A¦ý¤j¦h¼ÆªººÞ²zªÌ¥i¯à·|«O¯d¹w³]­È¡C§ó¦hÃö©ó¥i¥H¦b¦¹³]©wªº¿ï¶µ
            ¸ê°T¥i¥H¬d¾\ <application>CVS</application> ¤â¥U¡C</para>
        </listitem>

        <listitem>
          <para><filename>cvs_acls.pl</filename> - ¦¹©R¥O½Z©w¸q´£¥æªÌªº¨­¤À¡A¥H
            ¤Î¥L/¦o¬O§_¤¹³\¦s¨ú­ì©l½X¾ð¡A¥¦¬O°ò©ó <filename>avail</filename> ¤¤
            ªº³]©w¡C§A¤£¸Ó§ó°Ê¦¹ÀɮסC</para>
        </listitem>

        <listitem>
          <para><filename>cvsignore</filename> - ¦¹ÀɮצC¥X­þ¨ÇÀÉ®×
            <application>CVS</application> ¤£¥Î³B²z¨ìÀx¦s®w¤¤¡A§A¥i¥H­×§ï¦¨§A·Q
            ­nªº¡C§ó¦hÃö©ó¥i¥H¦¹Àɮתº»¡©ú¥i¥H¬d¾\ <application>CVS</application>
            ¤â¥U¡C</para>
        </listitem>

        <listitem>
          <para><filename>cvswrappers</filename> - ¦¹Àɮ׬O
            <application>CVS</application> ¥Î¨Ó±Ò¥Î©Î°±¥ÎÃöÁä¦r®i¶}¡A©ÎªÌ¬O§_ÀÉ
            ®×¸Ó³Qµø¬°¤G¶i¦ìÀÉ¡C§A¥i¥H­×§ï¦¨§A·Q­nªº¡C§ó¦hÃö©ó¥i¥H¦¹Àɮתº»¡©ú
            ¥i¥H¬d¾\ <application>CVS</application> ¤â¥U¡Cª`·N <literal>-t</literal>
            ©M <literal>-f</literal> ¿ï¶µ¦b <application>CVS</application>
            client/server ¨Ã¤£¯à°÷¥¿½Tªº¹B§@¡C</para>
        </listitem>

        <listitem>
          <para><filename>edithook</filename> - ¦¹Àɮפw¸g¨S¦³¦b¨Ï¥Î¤F¡A¯dµÛ¥u
            ¬O¬°¤F¬Y¨Ç¦³·N¸qªº­ì¦]¡C§A¥i¥H¦w¥þ¦a§R°£¦¹ÀɮסC</para>
        </listitem>

        <listitem>
          <para><filename>editinfo</filename> - <application>CVS</application>
            ¨Ï¥Î³o­ÓÀɮרӱj­¢§A¨Ï¥Î¯S©wªº½s¿è¾¹¡CFreeBSD ¨S¦³¨Ï¥Î³o­Ó¥\¯à¡A¦]
            ¬°¿é¤J¤é»x°T®§¤w¸g¥Ñ <filename>verifymsg</filename> ©M
            <filename>logcheck</filename> ¨Ó§¹¦¨¡C³o¬O¦]¬°
            <filename>editinfo</filename> ¥\¯à¦b±q»·ºÝ´£¥æ©Î¬O¨Ï¥Î
            <literal>-m</literal> ©Î <literal>-F</literal> ¿ï¶µ®É¤£·|°õ¦æ¡C§A¤£
            ¸Ó§ó°Ê¦¹ÀɮסC</para>
        </listitem>

        <listitem>
          <para><filename>exclude</filename> - ¦¹ÀɮצC¥X³Q
            <filename>commit_prep.pl</filename> ©w¸q¤£¯à¥]§t­×¥¿ª©¼ÐÀYªºÀɮסC
            ¦b FreeBSD ª©¥»ªº³]©w¤¤¡A©Ò¦³¦b­×¥¿ª©±±¨î¤UªºÀɮ׻ݦ³¤@­Ó­×¥¿ª©¼ÐÀY
            ¡A¡]¹³¬O &dollar;FreeBSD&dollar;¡^¡C¦b¦¹Àɮפ¤©Ò¦³²Å¦X¤@¦æ¤@­ÓªºÀÉ
            ®×¦WºÙ±N¤£·|³QÀˬd¡C§A¥i¥H¦b¦¹Àɮפ¤¬°¤£»Ý­n­×¥¿ª©¼ÐÀYªºÀÉ®×·s¼W¤@
            ­Ó¥¿³W¹Bºâ¦¡¡C¬°¤F¦w¸Ë³o¨Ç©R¥O½Z¡A³Ì¦nªº¤èªk¬O±Æ°£
            <filename class="directory">CVSROOT/</filename> ·|¨ü¨ì¼ÐÀYªºÀˬd¡C</para>
        </listitem>

        <listitem>
          <para><filename>log_accum.pl</filename> - ¦¹©R¥O½Z·|³B²z¥Ñ
            <filename>logcheck</filename> ©Ò´£¨Ñªº¤é»x°T®§¡A¨Ã¥B±N¤§¬°³Æ¥÷¥Øªº
            ªþ¥[©óÀx¦s®w¤¤ªº°O¿ýÀɮסC¦P®É¤]°õ¦æ­n±N¶l¥ó±H¨ì§A´£¨Ñªº«H½c¤¤ªºµ{
            ¦¡¡]¦b <filename>cfg_local.pm</filename> ¤¤¡^¡C¥¦©M
            <application>CVS</application> ¤§¶¡¬O¥Ñ <filename>loginfo</filename>
            ­t³d·¾³q¡C§A¤£¸Ó§ó°Ê¦¹ÀɮסC</para>
        </listitem>

        <listitem>
          <para><filename>logcheck</filename> - ¦¹ÀɮפÀªR´£¥æªÌ´£¨Ñªº¤é»x°T®§
            ¡A¨Ã¸Õ¹Ï¹ï¨ä§@²M²z°Ê§@¡C¥¦©M <application>CVS</application> ¤§¶¡¬O
            ¥Ñ <filename>verifymsg</filename> ­t³d·¾³q¡C§A¤£¸Ó§ó°Ê¦¹ÀɮסC</para>

          <note><para>¦¹©R¥O½Z¨Ìªþ©ó¥»¦aªº FreeBSD <application>CVS</application>
            ³B²z¡GFreeBSD ª©¥»¦b¦¹©R¥O½Z­×§ï¹L«á¤~Ū¨ú¤é»x°T®§¡F¼Ð·Çªº
            <application>CVS</application> ª©¥»ÁöµM¯à°÷Àˬd»yªk¤W¬O§_¥¿½T¡A¦ý¨Ã
            ¤£·|²M²z¤é»x°T®§¡C<application>CVS</application> 1.11.2 ¥i¥H³z¹L¦b
            <filename>config</filename> ³]©w <literal>RereadLogAfterVerify=always</literal>
            ¨Ó©M FreeBSD ª©¥»¦³¬Û¦Pªº§@¥Î¡C</para></note>
        </listitem>

        <listitem>
          <para><filename>loginfo</filename> - ¦¹Àɮ׬O
            <application>CVS</application> ¥Î¨Ó±±¨î¤é»x°T®§­n±H¨ì­þ¸Ì¡A¦Ó
            <filename>log_accum.pl</filename> ­t³d³B²z¡C§A¤£¸Ó§ó°Ê¦¹ÀɮסC</para>
        </listitem>

        <listitem>
          <para><filename>modules</filename> - ¦¹Àɮ׫O¯d¤F
            <application>CVS</application> ­ì©lªº·N¸q¡C§AÀ³¸Ó§R°£·s¼Wªº FreeBSD
            ¼Ò²Õ¡A¨Ã­×§ï¬°§A·Q­nªº¤º®e¡C§ó¦hÃö©ó¥i¥H¦¹Àɮתº»¡©ú¥i¥H¬d¾\
            <application>CVS</application> ¤â¥U¡C</para>
        </listitem>

        <listitem>
          <para><filename>notify</filename> - ¦¹Àɮ׬°
            <application>CVS</application> ¥Î¨Ó±±¨îºÊ¬Ý¬Y­ÓÀɮסC¦b FreeBSD ªº
            Àx¦s®w¤¤¨S¦³¨Ï¥Î¨ì¦¹ÀɮסA§A¥i¥H­×§ï¦¨§A·Q­nªº¡C§ó¦hÃö©ó¥i¥H¦¹ÀÉ®×
            ªº»¡©ú¥i¥H¬d¾\ <application>CVS</application> ¤â¥U¡C</para>
        </listitem>

        <listitem>
          <para><filename>options</filename> - ¦¹ÀÉ®×¶È­­¨Ï¥Î©ó FreeBSD ©M Debian
            ªº <application>CVS</application> ª©¥»¡C¥¦¥]§t¤F»Ý­n¦b­×¥¿ª©¼ÐÀY¤¤
            ®i¶}ªºÃöÁä¦r¡C§A¥i¥H­×§ï¬°²Å¦X§A«ü©w¦b <filename>cfg_local.pm</filename>
            ªºÃöÁä¦r¡C</para>
        </listitem>

        <listitem>
          <para><filename>rcsinfo</filename> - ¦¹Àɮשw¸q´£¥æ®ÉÀx¦s®w©Ò­n¨Ï¥Îªº
            ¤é»x°T®§¼Ë¦¡½d¥»¡A¦p <filename>rcstemplate</filename>¡CFreeBSD ¹w³]
            ¬°©Ò¦³ªºÀx¦s®w¨Ï¥Î¦P¤@­Ó¼Ë¦¡½d¥»¡A§A¥i¥H¥[¤J¨ä¥L§A·Q­nªº¡C</para>
        </listitem>

        <listitem>
          <para><filename>rcstemplate</filename> - ¦¹Àɮ׬O´£¥æªÌ¦b´£¥æ®É·|¬Ý¨ì
            ªº¤é»x°T®§¼Ë¦¡½d¥»¡A§AÀ³¸Ó­×§ï¬°§A©w¸q¦b <filename>cfg_local.pm</filename>
            ªº¦UºØ°Ñ¼Æ¡C</para>
        </listitem>

        <listitem>
          <para><filename>tagcheck</filename> - ¦¹ÀÉ®×±±¨î¦bÀx¦s®w¤¤¶K¤W¼ÐÅÒªº
            ¦s¨ú¡C¼Ð·Çªº FreeBSD ª©¥»©Úµ´¦W¬° RELENG* ªº¼ÐÅÒ¡A¦]¬°³o¬O release
            engineering ªº¤u§@¡C§A¥i¥H®Ú¾Ú»Ý­n¨Ó­×§ï¦¹ÀɮסC</para>
        </listitem>

        <listitem>
          <para><filename>taginfo</filename> - ¦¹ÀÉ®×±±¨î°õ¦æ¦bÀx¦s®w¤¤¶K¤W¼ÐÅÒ
            ªº¦s¨úªº©R¥O½Z¡A¦p <filename>tagcheck</filename>¡C§A¤£¸Ó§ó°Ê¦¹ÀɮסC</para>
        </listitem>

        <listitem>
          <para><filename>unwrap</filename> - ¦¹©R¥O½Z¥i¥H¥Î¨Ó¦b¶×¥X®É¦Û°Ê<quote>¸Ñ¶}</quote>
            ¤G¶i¦ìÀÉ¡]½Ð¨£ <filename>cvswrappers</filename>¡^¡C²{¦b FreeBSD ¨Ã
            ¨S¦³¨Ï¥Î¦¹³]©w¡A¦]¬°¦¹¥\¯à¦b»·ºÝ´£¥æ®É¨Ã¤£¬O°õ¦æªº«D±`§¹µ½¡C§A¤£¸Ó§ó°Ê¦¹ÀɮסC</para>
        </listitem>

        <listitem>
          <para><filename>verifymsg</filename> - ¦¹ÀɮץΨӰõ¦æ©M¤é»x°T®§¬ÛÃöªº
           ©R¥O½Z¡A¦p <filename>logcheck</filename>¡C§A¤£¸Ó§ó°Ê¦¹ÀɮסC</para>
        </listitem>

        <listitem>
          <para><filename>wrap</filename> - ¦¹©R¥O½Z¥i¥H¥Î¨Ó¦b´£¥æ®É¦Û°Ê<quote>¥]»q</quote>
            ¤G¶i¦ìÀÉ¡]½Ð¨£ <filename>cvswrappers</filename>¡^¡C²{¦b FreeBSD ¨Ã
            ¨S¦³¨Ï¥Î¦¹³]©w¡A¦]¬°¦¹¥\¯à¦b»·ºÝ´£¥æ®É¨Ã¤£¬O°õ¦æªº«D±`§¹µ½¡C§A¤£¸Ó§ó°Ê¦¹ÀɮסC</para>
        </listitem>
      </itemizedlist>
    </sect2>

    <sect2>
      <title>¦Û­q©R¥O½Z</title>

      <para>±µ¤U¨Óªº¨BÆJ­n³]©w³o¨Ç©R¥O½Z¨Ï±o¥¦­Ì¥i¥H¦b§AªºÀô¹Ò¤¤¹B§@¡C§AÀ³¸ÓÀË
        ¬d©Ò¦³¦b¥Ø¿ý¤¤ªºÀɮסA¨Ã­×§ï¬°²Å¦X§Aªº³]©w¡C¤×¨ä¡A§A·|·Q­n­×§ï¤U¦CªºÀɮסG</para>

      <procedure>
        <step>
          <para>¦pªG§A¤£§Æ±æ¨Ï¥Î<link linkend="freebsdspecific">FreeBSD ªº¯S®í³]©w</link>¡A
            §A¥i¥H¦w¥þ¦a§R°£ <filename>access</filename>¡G</para>

          <screen>&prompt.user; <userinput>cvs rm -f access</userinput></screen>
        </step>

        <step>
          <para>½s¿è <filename>avail</filename> ¨Ó¥]§t§A·Q±±¨î¦s¨úªº¦UºØÀx¦s®w
            ¥Ø¿ý¡A½Ð½T©w§A¦³«O¯d <literal>avail||CVSROOT</literal> ³o¤@¦æ¡A§_«h
            §A±N·|¦b¤U¤@¨B§â§A¦Û¤vÂê¦b¥~­±¡C</para>

          <para>¥t¥~§A¥i¥H¦b¦¹Àɮפ¤·s¼W¶}µoªÌªº¸s²Õ¡AFreeBSD ¹w³]¨Ï¥Î
            <filename>access</filename> ¨Ó¦C¥X©Ò¦³ªº¶}µoªÌ¡A¦ý§A¥i¥H¨Ï¥Î¥ô¦ó§A
            ·Q­n¥ÎªºÀɮסC¦pªG§A·Qªº¸Ü¤]¥i¥H·s¼W¸s²Õ¡]½Ð¨Ï¥Î«ü©w¦b
            <filename>cvs_acls.pl</filename> ¤W¼h¸Ìªº»yªk¡^¡C</para>
        </step>

        <step>
          <para>½s¿è <filename>cfg_local.pm</filename> ¨Ó¥]§t§A»Ý­nªº¿ï¶µ¡C¤×¨ä
            §AÀ³¸ÓÀ˵ø¤@¤U¤U¦Cªº³]©w¶µ¥Ø¡G</para>

            <itemizedlist>
              <listitem>
                <para><literal>%TEMPLATE_HEADERS</literal> - ³o¬O¥Î¨Ó¨ú±o¤é»x°T
                  ®§¤º®eªºµ{§Ç¡A¨Ã¥[¤J±N§e²{ªº¶l¥ó¶µ¥Ø©M´£¨Ñ«DªÅ­Èªº°T®§¡C§A¥i
                  ¥H§R°£ <literal>PR</literal> ©M <literal>MFC after</literal>
                  ±Ô­z¡A·íµM¤]¥i¥H¥[¤J§A·Q­nªº¡C</para>
              </listitem>

              <listitem>
                <para><literal>$MAIL_BRANCH_HDR</literal> - ¦pªG§A·Q­n¦b¨C¤@«Ê
                  ´£¥æªº¶l¥ó¤¤¥[¤J´y­z¬O¦b­þ¤@­Ó¤À¤ä¤¤´£¥æªº¼ÐÀY¡A¨º»ò½Ð©w¸q¬°
                  ²Å¦X§Aªº³]©w¡C¦pªG§A¤£·Q¨Ï¥Î³o¼Ëªº¼ÐÀY¡A¨º»ò½Ð³]©w¬°ªÅ­È¡C</para>
              </listitem>

              <listitem>
                <para><literal>@COMMIT_HOSTS</literal> - ©w¸q¨Ï¥ÎªÌ¯à°÷´£¥æªº¥D¾÷¡C</para>
              </listitem>

              <listitem>
                <para><literal>$MAILADDRS</literal> - ³]©wÀ³¸Ó¦¬¨ì´£¥æ¶l¥óªº¶l
                  ¥ó¦ì§}¡C</para>
              </listitem>

              <listitem>
                <para><literal>@LOG_FILE_MAP</literal> - ¥H§A©Ò»Ý­nªº¨Ó­×§ï³o­Ó
                  °}¦C¡A¨C­Ó³]©w­ÈÀ³¸Ó²Å¦X³Q´£¥æªº¥Ø¿ý¡A¦Ó´£¥æªº¤é»x°T®§·|¥H
                  <filename class="directory">commitlogs</filename> ªº¦WºÙÀx¦s¦b¨C­Ó³Q³]©wªº¥Ø¿ý¤U¡C</para>
              </listitem>

              <listitem>
                <para><literal>$COMMITCHECK_EXTRA</literal> - ¦pªG§A¤£·Q¨Ï¥Î
                  <link linkend="freebsdspecific">FreeBSD ¯S®íªº¦s¨ú±±¨î</link>
                  ¥\¯à¡A§A¥i¥H¦b¦¹Àɮפ¤§R°£¹ï <literal>$COMMITCHECK_EXTRA</literal>
                  ªº©w¸q¡C</para>
              </listitem>
            </itemizedlist>

          <note><para>­×§ï <literal>$IDHEADER</literal> ªº¥\¯à¥u¦³¦b FreeBSD
            ¥­¥x¤W¥i¥H¹B§@¡A¥¦¬O¬Û¨Ì¦b FreeBSD ªº¯S®í <application>CVS</application>
            ³]©w¤W¡C</para></note>

          <para>§A¥i¥HÀˬd <filename>cfg.pm</filename> ¬O§_¦³¨ä¥Lªº°Ñ¼Æ¥i¥H­×§ï
            ¡A¦ý¬O­×§ï³Ì¦n¬O¦³­ì¦]ªº¡C</para>
        </step>

        <step>
          <para>§R°£ <filename>exclude</filename> ¤¤Ãö©óFreeBSD ªº¯S®í³]©wªº±Ô
            ­z¡]¦p¥H <literal>^ports/</literal> ¬°¶}ÀYªº¨C¤@¦æµ¥¡^¡C¦¹¥~¡Aµù¸Ñ
            ±¼¥H <literal>^CVSROOT/</literal> ¬°¶}ÀYªº¦æ¦C¡AµM«á·s¼W¤@¦æ¥u¦³
            <literal>^CVSROOT/</literal>¡Cµ¥¨ìÃöÁä¦r®i¶}ªº©R¥O½Z¦w¸Ë¦n«á¡A§A¥i
            ¥H¦b <filename class="directory">CVSROOT</filename> ¥Ø¿ý¤¤ªºÀɮ׸̥[¤W¼ÐÀY¡AµM«á¦A«ì
            ´_­è­èµù¸Ñªº¦æ¦C¡A¦ý¦b§AÁÙ¨S¦³´£¥æ«e«h¥u«O«ù³o¼Ë¡C</para>
        </step>

        <step>
          <para>½s¿è <filename>modules</filename>¡A¨Ã§R°£©Ò¦³ FreeBSD ªº¸s²Õ¡C
            ¥[¤J§A»Ý­nªº¼Ò²Õ¡C</para>
        </step>

        <step>
          <note><para>¦¹¨BÆJ¥u¦³¦b§A©ó <filename>cfg_local.pm</filename> ¤¤«ü©w
            ¤F <literal>$IDHEADER</literal> ¤~¦³¥²­n³]©w¡]¥u¦³¦b FreeBSD ªº¯S®í
            <application>CVS</application> ³]©w¤W¤~¯à°÷°õ¦æ¡^¡C</para></note>

          <para>½s¿è <filename>options</filename> ¥H²Å¦X§A¦b
            <filename>cfg_local.pm</filename> ¤¤³]©wªº¼ÐÅÒ¦WºÙ¡C¨Ã¦b©Ò¦³ªºÀÉ®×
            ¤¤·j´M <literal>FreeBSD</literal> ¨Ã´À´«¬°§A³]©wªº¼ÐÅÒ¦WºÙ¡C</para>
        </step>

        <step>
          <para>­×§ï <filename>rcstemplate</filename> ¬°©M¦b
            <filename>cfg_local.pm</filename> ¤¤¬Û¦Pªº³]©w¡C</para>
        </step>

        <step>
          <para>¿ï¾Ü©Êªº§R°£¦b <filename>tagcheck</filename> ¤¤°w¹ï FreeBSD ÀË
            ¬dªº³]©w¡C§A¥i¥H¶È¶È¦bÀɮתº³Ì¤W¼h¥[¤W <literal>exit 0</literal> ¨Ó
            ¨ú®ø©Ò¦³¼ÐÅÒªºÀˬd¡C</para>
        </step>

        <step>
          <para>¦b§A§¹¦¨«eªº³Ì«á¤@¥ó¨Æ¬O½T»{ commitlogs ¥i¥H¥¿½TÀx¦s¡C¹w³]·|Àx
            ¦s¦bÀx¦s®w¤¤ªº <filename>commitlogs</filename> ¤l¥Ø¿ý¤¤¡A¦Ó³o­Ó¥Ø¿ý
            »Ý­n¥ý«Ø¥ß¡G</para>

            <screen>&prompt.user; <userinput>mkdir commitlogs</userinput>
&prompt.user; <userinput>cvs add commitlogs</userinput></screen>
        </step>
      </procedure>

      <para>²{¦b¡A¦b²Ó¤ßªºÀ˵ø¹L«á¡A§A¥i¥H´£¥æ§Aªº­×§ï¤F¡C½T©w§A¥ý«e¦³¦b
        <filename>avail</filename> ¤¤¤¹³\§A¦Û¤v¦s¨ú <filename class="directory">CVSROOT</filename>
        ¥Ø¿ý¡A¦]¬°¦pªG¨S¦³³o¼Ë°µªº¸Ü§A·|§â§A¦Û¤vÂê¦b¥~­±¡C§¹¾ã½T»{¹L«á½Ð°õ¦æ¤U
        ¦C©R¥O¡G</para>

        <screen>&prompt.user; <userinput>cvs commit -m '<replaceable>- Initial FreeBSD scripts commit</replaceable>'</userinput></screen>
    </sect2>

    <sect2>
      <title>´ú¸Õ³]©w</title>

      <para>§A¤w¸g·Ç³Æ¦n°µ°ò¥»ªº´ú¸Õ¤F¡G±j¨î´£¥æ <filename>avail</filename>
        ¥H½T»{¨C¥ó¨Æ³£¦p¹w´Áªº¹B§@¡C</para>

        <screen>&prompt.user; <userinput>cvs commit -f -m '<replaceable>Forced commit to test the new CVSROOT scripts</replaceable>' avail</userinput></screen>

      <para>¦pªG¤@¤Á¥¿±`¡A¨º»ò®¥³ß¤F¡I§A²{¦b¤w¸g¬°§AªºÀx¦s®w«Ø¥ß¦n FreeBSD ªº©R
        ¥O½Z¤F¡C¦pªG <application>CVS</application> ¤´µM¦³Äµ§i¤°»ò¡A¦^ÀYÀ˵ø¤W
        ­zªº¨BÆJ¬O§_¦³¥¿½Tªº°õ¦æ¡C</para>
    </sect2>
  </sect1>

  <sect1 id="freebsdspecific">
    <title>FreeBSD ªº¯S®í³]©w</title>

    <para>FreeBSD ±M®×¦Û¤v¨Ï¥Î¤@­Ó¦³ÂI¤£¦Pªº³]©w¡A¨º´N¬O¦P®É¤]¨Ï¥Î FreeBSD
      <filename class="directory">CVSROOT</filename> ¤¤ªº <filename>freebsd</filename> ¤l¥Ø¿ý¡C¦]
      ¬°¤j¶qªº´£¥æªÌ¥²¶·¦b¬Û¦Pªº¸s²Õ¤¤¡A¦]¦¹±M®×¼g¤F¤@­Ó²³æªº wrapper ¨Ó½T»{´£
      ¥æªÌ¥i¥H¥¿½Tªº´£¥æ¡A¨Ã³]©wÀx¦s®wªº¸s²Õ¦WºÙ¡C</para>

    <para>¦pªG§AªºÀx¦s®w¤]»Ý­n³o¼Ëªº¥\¯à¡A¨º»ò¤U­±´N·|¤¶²Ð¦p¦ó«Ø¥ß¡A¤£¹L­º¥ý­n
      ¥ý¨Ó¬Ý¤@¬q½ÆÂøªº·§­z¡C</para>

    <sect2>
      <title>FreeBSD ³]©w¤¤¨Ï¥ÎªºÀÉ®×</title>

        <itemizedlist>
          <listitem>
            <para><filename>access</filename> - ¦¹ÀɮץΨӱ±¨îÀx¦s®wªº¦s¨ú¡C§A
              À³¸Ó½s¿è¨Ã¥[¤J©Ò¦³¦b±M®×¤¤ªº¦¨­û¡C</para>
          </listitem>

          <listitem>
            <para><filename>freebsd/commitmail.pl</filename> - ¦¹Àɮפw¸g¨S¦³¦b
              ¨Ï¥Î¤F¡A¯dµÛ¥u¬O¬°¤F¬Y¨Ç¦³·N¸qªº­ì¦]¡C§A¤£¸Ó§ó°Ê¦¹ÀɮסC</para>
          </listitem>

          <listitem>
            <para><filename>freebsd/cvswrap.c</filename> - ¦¹ CVS wrapper ­ì©l
              ½X¬O¥Î¨Ó«Ø¥ßÀˬd©Ò¦³¦s¨úªº¤u§@¡C§ó¦hªº°T®§¦bµy«á·|´£¥X¡C§AÀ³¸Ó½s
              ¿è <literal>ACCESS</literal> ©M <literal>REALCVS</literal> ªº¸ô®|
              ¥H²Å¦X§Aªº³]©w¡C</para>
          </listitem>

          <listitem>
            <para><filename>freebsd/mailsend.c</filename> - ¦¹Àɮ׬O FreeBSD ³]
              ©w mailing lists »Ý­nªº¡A§A¤£¸Ó§ó°Ê¦¹ÀɮסC</para>
          </listitem>
        </itemizedlist>
    </sect2>

    <sect2>
      <title>¨BÆJ</title>

      <procedure>
        <step>
          <para>¥u¦³¥[¤J§Aªº¨Ï¥ÎªÌ¦WºÙ¨ì <filename>access</filename> ¤¤¡C</para>
        </step>

        <step>
          <para>½s¿è <filename>cvswrap.c</filename> ªº¸ô®|¥H²Å¦X§Aªº³]©w¡A©w¸q
            ¦b¤j¼gªº <literal>ACCESS</literal> ¤¤¡C¦P®É¦pªG¹w³]­È¤£²Å¦X§Aªº±¡ªp
            ªº¸Ü¤]À³¸Ó­×§ï¥»¦a¹ê»Úªº <command>cvs</command> µ{¦¡©Ò¦b¦ì¸m¡C­ì©l
            ªº <filename>cvswrap.c</filename> §Æ±æ´À¥N¦øªAºÝªº CVS µ{¦¡¡A¨Ò¦p¥i
            ¯à·|¬O <filename>/usr/bin/ncvs</filename>¡C</para>

          <para>§Úªº <filename>cvswrap.c</filename> ¬O³o¼Ë¡G</para>

          <programlisting>#define ACCESS "/local/cvsroot/CVSROOT/access"
#define REALCVS "/usr/bin/ncvs"</programlisting>
        </step>

        <step>
          <para>±µ¤U¨Ó¬O«Ø¥ß wrapper ¨Ó½T»{§A¦b´£¥æ®É¬O¦b¥¿½Tªº¸s²Õ¤¤¡C
            ¦b§Aªº <filename class="directory">CVSROOT</filename> ¤¤ªº
            <filename>cvswrap.c</filename> ­n¯à°÷¨Ï¥Î¡C</para>

          <para>¦b§A§¹¦¨½s¿è¨Ã¥[¤J¥¿½Tªº¸ô®|«á§Ú­Ì­n¨Ó½sĶ­ì©l½X¡G</para>

            <screen>&prompt.user; <userinput>cc -o cvs cvswrap.c</userinput></screen>

	      <para>µM«á¶i¦æ»Ý­n³]©w¡]¦¹¨BÆJ»Ý­n root Åv­­¡^¡G</para>

            <screen>&prompt.root; <userinput>mv /usr/bin/cvs /usr/bin/ncvs</userinput>
&prompt.root; <userinput>mv cvs /usr/bin/cvs</userinput>
&prompt.root; <userinput>chown root:<replaceable>ncvs</replaceable> /usr/bin/cvs /usr/bin/ncvs</userinput>
&prompt.root; <userinput>chmod o-rx /usr/bin/ncvs</userinput>
&prompt.root; <userinput>chmod u-w,g+s /usr/bin/cvs</userinput></screen>

	      <para>³o·|±N wrapper ¦w¸Ë¦¨¹w³]ªº <command>cvs</command> µ{¦¡¡A½Ð½T©w
	        ¥ô¦ó­n¨Ï¥ÎÀx¦s®wªº¤HÀ³¸Ó¦³¥¿½Tªº¦s¨úÅv­­¡C</para>
        </step>

        <step>
          <para>²{¦b§A¥i¥H§R°£©Ò¦³¦bÀx¦s®w¸s²Õ¤¤ªº¨Ï¥ÎªÌ¡A©Ò¦³ªº¦s¨ú±±¨î·|¸g¥Ñ
            wrapper §¹¦¨¡A¦P®É wrapper ·|³]©w¦s¨úªº¥¿½T¸s²Õ¡C</para>
        </step>
      </procedure>
    </sect2>

    <sect2>
      <title>´ú¸Õ³]©w</title>

      <para>§Aªº wrapper ²{¦bÀ³¸Ó¤w¸g¦w¸Ë¦n¤F¡A§A·íµM¤]¥i¥H±j¨î´£¥æ
        <filename>access</filename> ¨Ó´ú¸Õ¬O§_¥¿±`¡G</para>

        <screen>&prompt.user; <userinput>cvs commit -f -m '<replaceable>Forced commit to test the new CVSROOT scripts</replaceable>' access</userinput></screen>

      <para>¦P¼Ë¦a¡A¦pªG¦³¿ù»~¡AÀˬd¬O§_¤W­z©Ò¦³¨BÆJ³£¦³¥¿½Tªº°õ¦æ¡C</para>
    </sect2>
  </sect1>
</article>