<?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¥÷¤å¥ó´yz¤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´yz¨Ï¥Î³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¬°¤Fn»{¥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¤Wz¤º®e¹ï§A¨S¦³·N¸q¬O¤£«nªº—¦]¬°³Ì«áªºµ²ª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°õ¦æªºµ{¦¡—¦b ¦¹¨Ò¤¤¬O <filename>commitcheck</filename>¡C§A¤£¸Ó§ó°Ê¦¹ÀɮסC</para> </listitem> <listitem> <para><filename>config</filename> - Àx¦s®wªº³]©w¿ï¶µ¡C§A¥i¥Hקאּ§A ·Qnªº¡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·Qnªº¡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 $FreeBSD$¡^¡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·Qnªº¤º®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·Qnªº¡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·Qnªº¡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ÆJn³]©w³o¨Ç©R¥O½Z¨Ï±o¥¦Ì¥i¥H¦b§AªºÀô¹Ò¤¤¹B§@¡C§AÀ³¸ÓÀË ¬d©Ò¦³¦b¥Ø¿ý¤¤ªºÀɮסA¨Ãקאּ²Å¦X§Aªº³]©w¡C¤×¨ä¡A§A·|·Qn×§ï¤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 ·Qn¥ÎªºÀɮס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·Qnªº¡C</para> </listitem> <listitem> <para><literal>$MAIL_BRANCH_HDR</literal> - ¦pªG§A·Qn¦b¨C¤@«Ê ´£¥æªº¶l¥ó¤¤¥[¤J´yz¬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§_¤Wz©Ò¦³¨BÆJ³£¦³¥¿½Tªº°õ¦æ¡C</para> </sect2> </sect1> </article>