     <<O/YENss CVS Ax|s(R)w(repository) - "IYENI FreeBSD -a-oCURe|!

  Stijn Hoop

   <stijn@win.tue.nl>

   $FreeBSD: doc/zh_TW.Big5/articles/cvs-freebsd/article.sgml,v 1.2
   2006/01/31 01:30:59 vanilla Exp $

   Copyright (c) 2001, 2002, 2003 Stijn Hoop

   FreeBSD NOTO FreeBSDDEGo-a-:.|-a-ouuYENUDEGO 1/4D-

   ^3\|h>>s^3yDEGO(c)M,g 3/4PDEGO"IYENICUR@"C,-oUNOTDEGDEGO
   1/4D--a-o^1I(R) *(c)ICURaa|r^3]p"O^1u:AAa|UCURv-a-o^2-L-<<~!C
   YEN>>CURaaCURCURYENX^2{-a-o^2^3|hDEGO 1/4D-!AYENHCURI FreeBSD
   Project YEN>>" 1/4s(c)OCURH-a 3/4-a-oDEGO 1/4D-!A<<a+-+-NYENH
   '(TM)' (c)I '(R)' ^2AA,^1"O 1/4D-uu!C

   ^3oYEN-:CURaaYENo'yzCURF"IYENI(c)M FreeBSD +-M(R)
   *NOTU|P-a-o(c)RYENO 1/2Z"O<<O/YENss CVS Ax|s(R)w-a-o"BAEJ
   !C^3o(c)M 1/4D-.C, CVS
   <<O/YENss-a-oAx|s(R)wNOTU,uCURS:CURU|^3^3\|hAuAI!AYEN]S:tCURFS:o|h^1i(c)o`i(c)l
   1/2X 3/4d--a-o granular access
   +-+-"i!AYENHCURINOTDEG"CCUR@|,-a-o'-L-YENae^2-L-YENI(c)o:AA-a-a-o^1qCURlP:lYENo!C

     --------------------------------------------------------------

1 A^2CURP:

   CURj|h 1/4AE-a-oP:}(c)n`i(c)l 1/2X^3nAAe+-M(R) *^3-L-"IYENI CVS
   S:@NOTDEG YENLI-a-o`i(c)l 1/2X+-+-"i"t^2I!C.i CVS |^3^3o
   1/4E-a-oAuAI|s|b
   (R)E!AYEN|CUR]|^3^3!YEN-:-a-o.aa^2<<(c)M-EAI!C"a:CURCURCURS:CUR@-a-o`i|]NOTO(c)M"a:YENL-a-oP:}uo-aICURA"E`i(c)l
   1/2X 3/4d--`a DEG-:S:O:^3t|a
   3/4EP"t^2I-oTH^2z-a-o'c^1U!A-SS:ONOTO|p-aG"a:CURCURCUR@CURHS:AE+-ae<<OAA@^3!YEN-:-a-o`i(c)l
   1/2X 3/4d-S:K"u: (c)oCUR@-e-a-o|s"u!C

   FreeBSD NOTO"a:CURCURCUR@O"IYENI CVS -a-o+-M(R) *!A|P(R)ECUR]
   NOTODEGo(c)oYEN|-a-oP:}uo-aI^1MS:G(c)oYENthYEN@NOTE!CYENLI 1/4P:
   1/4gCURFCUR@"C,(c)RYENO 1/2Z"I+-o-oTH^2zAx|s(R)wAAU:+-oS:oYEN[
   (R)e(c)o:!C^3I-an^3o"C,(c)RYENO 1/2ZYENN Josef Karthauser
   <joe@FreeBSD.org> <<.s 3/4a^2z^1LYENBS:o
   1/4D-.C,CURAE!A"I+-o|b"a:YENL-a-o+-M(R) *CURW|A
   |,"IYENI^3o"C,(c)RYENO
   1/2Z.|S:oYEN[(R)e(c)o:!CYEN>>CURaaYENo+-N'yz"IYENI^3o"C,.s-a-o(c)RYENO
   1/2Z-a-oCURe-ak!C

   NOTDEGCURF"IYEN>>CURaaYENoCURCUR-a-oDEGT(R)S:|^3YENI!AS:A>>Yn
   1/4o+-x CVS DEGoYEN>>-a-o 3/4THS:@CURe|!!C

     --------------------------------------------------------------

2 DEGoYEN>>^3](c)w

     Warning:
     ^3I|n-a-oCURe|!NOTO|bCUR@OYENth.s-a-oAx|s(R)wCURCURDEGo|ae^3o"C,"BAEJ!A"A
     1/2T(c)wS:ACURF,N(c)O|^3-a-o<<a -aG!C|P(R)E!A 1/2D-
     1/2T(c)wS:A|^3^3I.sYENBYENiAA-a-a-o,e(R)AE^3AEYEN-:!I

     --------------------------------------------------------------

  2.1 -a`i(c)lCURAEAx|s(R)w

   -oYENynDEGu-a-oNOTO<<O/YENssCUR@O.s-a-oAx|s(R)w!ADEGo|aeCURU|C(c)RYENOS:iP:D
   CVS <<O/YENss"A-a`i(c)lCURAE!G

 % cvs -d path-to-repository init

   ^3o(c)RYENOS:iP:D CVS <<O/YENss CVSROOT
   -a-oYENO/?y!A^3oOYENO/?y,I(c)n,mCURF(c)O|^3-a-o^2O-oAAE!C

     --------------------------------------------------------------

  2.2 ^3](c)wAx|s(R)w-a-o,s^2O

   ^2{|bS:UI+-N<<O/YENssCUR@O
   3/4O:|^3,OAx|s(R)w-a-o,s^2O!A(c)O|^3-a-oP:}uo-aIYEN^2P:.YEN[CURJ^3oO,s^2O
   !A^3o
   1/4EYENLICUR~-`aDEG-:|s"u,OAx|s(R)w!CS:UIDEG^2^3],s^2O|W-oUNOTOYENH
   FreeBSD CUR-o(c)w-a-o ncvs!C

 # pw groupadd ncvs

   +-u-aIS:A>>Yn"IYENI chown(8) +-NYENO/?y(c)O|^3-aI<<u:(c)wu^1ee.s
   1/4W-a-o,s^2O!G

 # chown -R :ncvs path-to-your-repository

   |p|^1CUR@"O"S|^3 3/4A.i-a-o,s^2O^3\YENi+-N"S|^3"a:YENLCURHYENiYENH
   1/4gCURJ,OAx|s(R)w!C

     --------------------------------------------------------------

  2.3 "u|^`i(c)lAE(R) *

   ^2{|bS:A>>Yn+-q FreeBSD Ax|s(R)wCURCUR"u|^ CVSROOT YENO/?y!A +-q
   FreeBSD DEGI|W-a-o CVS
   NOTM(R)g-,"O"u|^.|NOTO^3IA^2^3ae-a-oCURe-ak!C 1/2D-NOTd 3/4\ |b
   handbook CURCUR-a-oNOTUAo:^3^1,`"O
   Ao+-oS:o|h,eDEGT!CS:UIDEG^2^3]"u|^-a-oAE(R)
   *|s(c)n|bNOTU|PYENO/?yCURU-a-o CVSROOT-freebsd YENO/?yCURCUR!C

     --------------------------------------------------------------

  2.4  1/2AE>>s FreeBSD -a-o(c)RYENO 1/2Z

   +-uCURU"OS:UIn 1/2AE>>s FreeBSD CVSROOT ,I-a-oAE(R) *"`iS:A
   -a-oAx|s(R)wCURCUR!C|p-aGS:ANOTO+-E+-x(c)o CVS!AS:ACUR]^3\.|.QS:A
   YENiYENH-a 1/2+-uP: *CURJ^3o"C,(c)RYENO
   1/2Z!A,O^1IS:o(R)e(c)o:-a-o|P(R)E(c)MS:o.s-a-o-a(c)YEN>>|P"B!FCUR-L-^1L!A"AE^1eNOTO
   CVS |b^3oO^3!YEN-:|^3-EAI!G.iP: *CURJAE(R) *"`i CVSROOT
   (R)E!AYEN|"ACUR-L-.|S:o.s^2O-oAAE!CNOTDEGCURFn>>{YENX^3o"C,AE(R) *
   !AS:AAU>>Yn|bP:
   *CURJYEN|I<<aCUR@CUR@<<.s'-L-YENae!A^3o'NYEN-c-YENhCURF cvs import
   -a-o>>uE!C|]|^1!A<<O/A:^3-a-oCURe-akNOTOP:E 1/2AE>>s^3o"C,(c)RYENO
   1/2Z^1LYENh!C

   YCURWzCUR-o(R)e^1iS:A"S|^3.N,qNOTOCUR-L-<<n-a-o!X!X|]NOTDEG^3I<<a-a-ou^2-aG^3-L-NOTOCUR@
   1/4E-a-o!C -oYENyP: *YENXS:A-a-o CVSROOT!AuM<<a 1/2AE>>see"u|^-a-o
   FreeBSD AE(R) *"`iYEN>>|a-a-oYENO/?yCURCUR!](c)|YEN
   1/4AAU:DEGE^1L!^!G

 % cvs -d path-to-your-repository checkout CVSROOT
 % cd CVSROOT
 % cp ../CVSROOT-freebsd/* .
 % cvs add *

   -a`.N!GS:A<<U:YENi-`a.|+-o"`iCUR@NOTqAo:(c)oNOTY"C,YENO/?y"S|^3^3Q
   1/2AE>>s-a-oA:uS:i!A^3oNOTOYEN?+-`-a-o!A
   S:A"ACUR-L->>YnYENI"`i^3o"C,YENO/?y!C

     --------------------------------------------------------------

  2.5 (c)RYENO 1/2Z>>!(c)u

   ^2{|bS:A-a-oCURuS:@YENO/?yCURCUR|^3CURFS:^1 3/4a FreeBSD +-M(R)
   *|bYEN|I-a-oAx|s(R)wCURCUR"IYENI-a-o(c)RYENO 1/2Z -a-o
   1/2AEYEN>>!AYENHCURUNOTO"COAE(R) *A^2^3ae-a-oCURP:^2D-!C

     * access - |^1AE(R) *|b^1w^3]-a-o|w,ECURCUR"S|^3^3QYENI"`i!C
       ^3oNOTO"IYENI|bFreeBSD -a-o-S(R)i^3](c)wCURCUR
       !AYENI"O+-+-"iAx|s(R)w-a-o|s"u!C|p-aGS:ACUR-L-S:AE+-ae"IYENI^3oO^3](c)w-a-o,U:S:AYENiYENHS:RDEG-L-^3oOAE(R)
       *!C

     * avail - |^1AE(R) *+-+-"iAx|s(R)w-a-o|s"u!C|b|^1AE(R) *CURCUR
       S:AYENiYENH<<u:(c)wCUR^1^3\|s"uAx|s(R)w-a-o,s^2O!ACUR]YENiYENHDEGw^1iYENO/?y(c)IAE(R)
       *"O(c)Uu''-L-YENae!CS:AA^3,O  1/2O
       3/4aNOTDEG|bS:A-a-oAx|s(R)wCURCUR+-NYEN]S:t-a-o,s^2O(c)MYENO/?y!C

     * cfg.pm - |^1AE(R)
       *>>!(c)uCURF^3](c)wCUR-o(R)e!A"A'-L-"N^1w^3]-a-o^3](c)w!C
       S:ACUR-L-,O *S:i|^1AE(R) *!A|O,O+-N *S:i-a-o^3](c)w(c)n"`i
       cfg_local.pm!C

     * cfg_local.pm - |^1AE(R) *YEN]S:t(c)O|^3-a-o"t^2I^3](c)wE
       !CS:AA^3,O^3](c)w(c)O|^3|C|b|^1-a-o^3](c)w!A"O|p'-L-YENae-a-oP:lYENon+-H"`ith!B|bth"C,YEND
       3/4-:CURW
       -a-o"IYENI-aIYENiYENH'-L-YENaeuYENuYEN!CS:o|h-a-oNOTUAo:,eDEGT|buy<<a.|'-L-"`i!C

     * checkoutlist - |^1AE(R) *|CYENX(c)O|^3|b CVS
       +-+-"iCURU|^1YENO/?yCURCUR-a-oAE(R) *!ADEG-L-CURF 1/4D-.C,|b
       cvs init <<O/YENssYENX-a-oAE(R)
       *!CS:AYENiYENHS:RDEG-L-NOTY"C,CUR-L->>Yn-a-o FreeBSD
       -S(R)i-a-oAE(R) *!C

     * commit_prep.pl - |^1(c)RYENO
       1/2ZDEGo|ae|U-oO/'-L-YENae<<e-a-oAENOTd!A DEGo(c)oS:ANOTOS:_|b
       cfg_local.pm CURCUR+-OYENI!CS:ACUR-L-,OS:oDEGE|^1AE(R) *!C

     * commitcheck - |^1(c)RYENO 1/2Z.|-a 1/2+-u 1/4vAAT
       CVS!C-oYENyYEN|.|"IYENI cvs_acls.pl
       "OAENOTd'-L-YENae-aINOTOS:_YENiYENH|s"u<<u:(c)w-a-o`i(c)l 1/2X
       3/4d-!A uM<<aDEGo|ae commit_prep.pl "O
       1/2T>>{|U-oO/'-L-YENae<<e-a-oAENOTd!C
       |p-aGCUR@CURAYEN?+-`!ACVS
       +-NCUR^1^3\|^1|,'-L-YENaeA:~A:oDEGo|ae!C
       S:ACUR-L-,OS:oDEGE|^1AE(R) *!C

     * commitinfo - |^1AE(R) *NOTO CVS
       YENI"O(c)w,q|b'-L-YENae<<e(c)OnDEGo|ae-a-ou{|!!X!X|b
       |^1"OCURCURNOTO commitcheck!CS:ACUR-L-,OS:oDEGE|^1AE(R) *!C

     * config - Ax|s(R)w-a-o^3](c)w?iP:u!CS:AYENiYENH *S:iNOTDEGS:A
       .Qn-a-o!A|yCURj|h
       1/4AE-a-o-oTH^2z-aIYENi-`a.|<<O-d^1w^3]E!CS:o|hAo:(c)oYENiYENH|b|^1^3](c)w-a-o?iP:u
       ,eDEGTYENiYENHNOTd 3/4\ CVS CURaYENU!C

     * cvs_acls.pl - |^1(c)RYENO
       1/2Z(c)w,q'-L-YENae-aI-a-o"CURA!AYENH
       CURIYENL/|oNOTOS:_CUR^1^3\|s"u`i(c)l 1/2X
       3/4d-!AYEN|NOTODEGo(c)o avail CURCUR
       -a-o^3](c)w!CS:ACUR-L-,OS:oDEGE|^1AE(R) *!C

     * cvsignore - |^1AE(R) *|CYENXth"C,AE(R) * CVS
       CUR-L-YENI^3B^2z"`iAx|s(R)wCURCUR!AS:AYENiYENH *S:i|"S:A.Q
       n-a-o!CS:o|hAo:(c)oYENiYENH|^1AE(R) *-a-o>>!(c)uYENiYENHNOTd
       3/4\ CVS CURaYENU!C

     * cvswrappers - |^1AE(R) *NOTO CVS
       YENI"O+-OYENI(c)IDEG+-YENIAo:Aa:|r(R)iP:}!A(c)I-aINOTOS:_AE
       (R) *,O^3Quo/NOTDEGCURGP:i|`iAE!CS:AYENiYENH
       *S:i|"S:A.Qn-a-o!CS:o|hAo:(c)oYENiYENH|^1AE(R) *-a-o>>!(c)u
       YENiYENHNOTd 3/4\ CVS CURaYENU!C-a`.N -t (c)M -f ?iP:u|b CVS
       client/server "ACUR-L--`aDEG-:YEN? 1/2T-a-o^1BS:@!C

     * edithook - |^1AE(R) *CURw,g"S|^3|b"IYENICURF!A-duUYENu
       NOTONOTDEGCURFNOTY"C,|^3.N,q-a-o`i|]!CS:AYENiYENH|wYENth|aS:RDEG-L-|^1AE(R)
       *!C

     * editinfo - CVS "IYENI^3oOAE(R) *"O+-j-c-S:A"IYENI-S(c)w-a-o
       1/2s?e 3/4^1!CFreeBSD "S|^3"IYENI^3oOYEN\-`a!A|]
       NOTDEG?eCURJCURe>>xDEGT(R)S:CURw,gYENN verifymsg (c)M logcheck
       "OS:^1|"!C^3oNOTO|]NOTDEG editinfo
       YEN\-`a|b+-q>>.-oY'-L-YENae(c)INOTO"IYENI -m (c)I -F
       ?iP:u(R)ECUR-L-.|DEGo|ae!CS:ACUR-L- ,OS:oDEGE|^1AE(R) *!C

     * exclude - |^1AE(R) *|CYENX^3Q commit_prep.pl
       (c)w,qCUR-L--`aYEN]S:t *YEN?-a(c) 1/4D-AY-a-oAE(R) *!C |b
       FreeBSD -a(c)YEN>>-a-o^3](c)wCURCUR!A(c)O|^3|b
       *YEN?-a(c)+-+-"iCURU-a-oAE(R) *>>Y|^3CUR@O *YEN?-a(c) 1/4D-AY
       !A!]^1^3NOTO $FreeBSD$!^!C|b|^1AE(R)
       *CURCUR(c)O|^3^2AA|XCUR@|aeCUR@O-a-oAE (R)
       *|W-oU+-NCUR-L-.|^3QAENOTd!CS:AYENiYENH|b|^1AE(R)
       *CURCURNOTDEGCUR-L->>Yn *YEN?-a(c) 1/4D-AY-a-oAE(R) *.s
       1/4WCUR@ OYEN?^3W^1B-oa|!!CNOTDEGCURF|w,E^3o"C,(c)RYENO
       1/2Z!A^3I|n-a-oCURe-akNOTO+-AEDEG-L- CVSROOT/ .|"u:"`i
       1/4D-AY-a-oAENOTd!C

     * log_accum.pl - |^1(c)RYENO 1/2Z.|^3B^2zYENN logcheck
       (c)O'-L-"N-a-oCURe>>xDEGT(R)S:!A"AYENB+-NCURS:NOTDEG^3AEYEN-:YENO/-a-o
       -athYEN[(c)oAx|s(R)wCURCUR-a-oDEGO?yAE(R)
       *!C|P(R)ECUR]DEGo|aen+-NP:lYENo+-H"`iS:A'-L-"N-a-o<<H
       1/2cCURCUR-a-ou{ |!!]|b cfg_local.pm CURCUR!^!CYEN|(c)M CVS
       CURS:P:!NOTOYENN loginfo t^3d.
       3/4^3q!CS:ACUR-L-,OS:oDEGE|^1AE(R) *!C

     * logcheck - |^1AE(R)
       *CURA-aR'-L-YENae-aI'-L-"N-a-oCURe>>xDEGT(R)S:
       !A"A,O^1I^1i"a:S:@^2M^2zDEGES:@!CYEN|(c)M CVS CURS:P:!NOTO
       YENN verifymsg t^3d. 3/4^3q!CS:ACUR-L-,OS:oDEGE|^1AE(R) *!C

         Note: |^1(c)RYENO 1/2Z"I-ath(c)oYEN>>|a-a-o FreeBSD CVS
         ^3B^2z!GFreeBSD -a(c)YEN>>|b|^1(c)RYENO 1/2Z
         *S:i^1L<<aCUR~AA-a"uCURe>>xDEGT(R)S:!F 1/4D-.C,-a-o CVS
         -a(c)YEN>>Ao:uM-`aDEG-:AENOTd>>y-akCURWNOTOS:_YEN?
         1/2T!A|y"A CUR-L-.|^2M^2zCURe>>xDEGT(R)S:!CCVS 1.11.2
         YENiYENH^3z^1L|b config ^3](c)w RereadLogAfterVerify=always
         "O(c)M FreeBSD -a(c)YEN>>|^3NOTU|P-a-oS:@YENI!C

     * loginfo - |^1AE(R) *NOTO CVS
       YENI"O+-+-"iCURe>>xDEGT(R)S:n+-H"`ith,I!A|O log_accum.pl
       t^3d^3B^2z!CS:ACUR-L-,OS:oDEGE|^1AE(R) *!C

     * modules - |^1AE(R) *<<O-dCURF CVS
       `i(c)l-a-o.N,q!CS:AA^3,OS:RDEG-L-.s 1/4W-a-o FreeBSD 
       1/4O^2O!A"A
       *S:iNOTDEGS:A.Qn-a-oCUR-o(R)e!CS:o|hAo:(c)oYENiYENH|^1AE(R)
       *-a-o>>!(c)uYENiYENHNOTd 3/4\ CVS CURaYENU!C

     * notify - |^1AE(R) *NOTDEG CVS YENI"O+-+-"i-oENOTYNOTYOAE(R)
       *!C|b FreeBSD -a-o Ax|s(R)wCURCUR"S|^3"IYENI"`i|^1AE(R)
       *!AS:AYENiYENH *S:i|"S:A.Qn-a-o!CS:o|hAo:(c)oYENiYENH|^1AE(R)
       * -a-o>>!(c)uYENiYENHNOTd 3/4\ CVS CURaYENU!C

     * options - |^1AE(R) *P:E"IYENI(c)o FreeBSD (c)M Debian -a-o CVS
       -a(c)YEN>>!CYEN|YEN]S:tCURF>>Yn|b *YEN?-a(c) 1/4D-AYCURCUR
       (R)iP:}-a-oAo:Aa:|r!CS:AYENiYENH *S:iNOTDEG^2AA|XS:A<<u:(c)w|b
       cfg_local.pm -a-oAo:Aa:|r!C

     * rcsinfo - |^1AE(R) *(c)w,q'-L-YENae(R)EAx|s(R)w(c)On"IYENI-a-o
       CURe>>xDEGT(R)S: 1/4E|! 1/2dYEN>>!A|p rcstemplate!CFreeBSD
       ^1w^3] NOTDEG(c)O|^3-a-oAx|s(R)w"IYENI|PCUR@O 1/4E|!
       1/2dYEN>>!AS:AYENiYENHYEN[CURJ"a:YENLS:A.Qn-a-o!C

     * rcstemplate - |^1AE(R)
       *NOTO'-L-YENae-aI|b'-L-YENae(R)E.|NOTY"`i -a-oCURe>>xDEGT(R)S:
       1/4E|! 1/2dYEN>>!AS:AA^3,O *S:iNOTDEGS:A(c)w,q|b cfg_local.pm
       -a-o|U-oO/DEGN 1/4AE!C

     * tagcheck - |^1AE(R) *+-+-"i|bAx|s(R)wCURCURP:KCURW
       1/4D-AAO-a-o |s"u!C 1/4D-.C,-a-o FreeBSD
       -a(c)YEN>>(c)Uu'|WNOTDEG RELENG* -a-o
       1/4D-AAO!A|]NOTDEG^3oNOTO release engineering
       -a-oCURuS:@!CS:AYENiYENH(R)U 3/4U>>Yn"O *S:i|^1AE(R) *!C

     * taginfo - |^1AE(R) *+-+-"iDEGo|ae|bAx|s(R)wCURCURP:KCURW
       1/4D-AAO -a-o|s"u-a-o(c)RYENO 1/2Z!A|p
       tagcheck!CS:ACUR-L-,OS:oDEGE|^1AE(R) *!C

     * unwrap - |^1(c)RYENO 1/2ZYENiYENHYENI"O|bP:
       *YENX(R)E|UDEGE!S:,NP:}!" CURGP:i|`iAE!] 1/2D-"-L-
       cvswrappers!^!C^2{|b FreeBSD "A
       "S|^3"IYENI|^1^3](c)w!A|]NOTDEG|^1YEN\-`a|b>>.-oY'-L-YENae(R)E"ACUR-L-NOTODEGo|ae-a-o<<D+-`S:^1u
       1/2!CS:ACUR-L-,OS:oDEGE|^1AE(R) *!C

     * verifymsg - |^1AE(R)
       *YENI"ODEGo|ae(c)MCURe>>xDEGT(R)S:NOTUAo:-a-o (c)RYENO
       1/2Z!A|p logcheck!CS:ACUR-L-,OS:oDEGE|^1AE(R) *!C

     * wrap - |^1(c)RYENO
       1/2ZYENiYENHYENI"O|b'-L-YENae(R)E|UDEGE!S:YEN]>>q!"
       CURGP:i|`iAE!] 1/2D-"-L- cvswrappers!^!C^2{|b FreeBSD "A
       "S|^3"IYENI|^1^3](c)w!A|]NOTDEG|^1YEN\-`a|b>>.-oY'-L-YENae(R)E"ACUR-L-NOTODEGo|ae-a-o<<D+-`S:^1u
       1/2!CS:ACUR-L-,OS:oDEGE|^1AE(R) *!C

     --------------------------------------------------------------

  2.6 |Uq(c)RYENO 1/2Z

   +-uCURU"O-a-o"BAEJn^3](c)w^3o"C,(c)RYENO
   1/2Z"I+-oYEN|IYENiYENH|bS:A-a-oAo^1OCURCUR^1BS:@!CS:AA^3,OAE
   NOTd(c)O|^3|bYENO/?yCURCUR-a-oAE(R) *!A"A
   *S:iNOTDEG^2AA|XS:A-a-o^3](c)w!CCUR *"a:!AS:A.|.Qn
   *S:iCURU|C-a-oAE(R) *!G

    1. |p-aGS:ACUR-L-S:AE+-ae"IYENIFreeBSD -a-o-S(R)i^3](c)w!A
       S:AYENiYENH|wYENth|aS:RDEG-L- access!G

 % cvs rm -f access

    2. 1/2s?e avail "OYEN]S:tS:A.Q+-+-"i|s"u-a-o|U-oO/Ax|s(R)w
       YENO/?y!A 1/2D- 1/2T(c)wS:A|^3<<O-d avail||CVSROOT
       ^3oCUR@|ae!AS:_<<h
       S:A+-N.||bCURUCUR@"BS:aS:A|UCURvAe|bYEN~+-!C

       YENtYEN~S:AYENiYENH|b|^1AE(R) *CURCUR.s
       1/4WP:}uo-aI-a-o,s^2O!AFreeBSD ^1w^3]"IYENI access
       "O|CYENX(c)O|^3-a-oP:}uo-aI!A|yS:AYENiYENH"IYENIYENo|oS:A
       .QnYENI-a-oAE(R) *!C|p-aGS:A.Q-a-o,U:CUR]YENiYENH.s
       1/4W,s^2O!] 1/2D-"IYENI<<u:(c)w|b cvs_acls.pl CURW
       1/4h,I-a-o>>y-ak!^!C

    3. 1/2s?e cfg_local.pm "OYEN]S:tS:A>>Yn-a-o?iP:u!CCUR *"a:
       S:AA^3,OAEuo/CUR@CURUCURU|C-a-o^3](c)wP:uYENO/!G

          * %TEMPLATE_HEADERS - ^3oNOTOYENI"O"u+-oCURe>>xDEGT
            (R)S:CUR-o(R)e-a-ou{S:C,!A"AYEN[CURJ+-NS:e^2{-a-oP:lYENoP:uYENO/(c)M'-L-"N<<D-aAAE-a-oDEGT(R)S:!CS:AYENi
            YENHS:RDEG-L- PR (c)M MFC after
            +-Oz!A.iuMCUR]YENiYENHYEN[CURJS:A.Qn-a-o!C

          * $MAIL_BRANCH_HDR - |p-aGS:A.Qn|b"CCUR@<<E
            '-L-YENae-a-oP:lYENoCURCURYEN[CURJ'yzNOTO|bthCUR@OCURACURa:CURCUR'-L-YENae-a-o
            1/4D-AY!A"-o>>o 1/2D-(c)w,qNOTDEG
            ^2AA|XS:A-a-o^3](c)w!C|p-aGS:ACUR-L-.Q"IYENI^3o 1/4E-a-o
            1/4D-AY!A"-o>>o 1/2D-^3](c)wNOTDEG-aAAE!C

          * @COMMIT_HOSTS - (c)w,q"IYENI-aI-`aDEG-:'-L-YENae-a-oYEND
            3/4-:!C

          * $MAILADDRS - ^3](c)wA^3,O|NOT"`i'-L-YENaeP:lYENo-a-oP:l
            YENo|`iS:}!C

          * @LOG_FILE_MAP - YENHS:A(c)O>>Yn-a-o"O *S:i^3oO
            DEG}|C!A"CO^3](c)wEA^3,O^2AA|X^3Q'-L-YENae-a-oYENO/?y!A|O'-L-YENae-a-oCURe>>xDEGT(R)S:.|YENH
            commitlogs -a-o|W-oUAx|s|b"CO^3Q^3](c)w-a-oYENO/?yCURU!C

          * $COMMITCHECK_EXTRA - |p-aGS:ACUR-L-.Q"IYENI FreeBSD
            -S(R)i-a-o|s"u+-+-"i YEN\-`a!AS:AYENiYENH|b|^1AE(R)
            *CURCURS:RDEG-L-^1i $COMMITCHECK_EXTRA -a-o(c)w,q!C

         Note:  *S:i $IDHEADER -a-oYEN\-`aYENu|^3|b FreeBSD
         YENYENxCURWYENiYENH^1BS:@!AYEN|NOTONOTU"I|b FreeBSD
         -a-o-S(R)i CVS ^3](c)wCURW!C

       S:AYENiYENHAENOTd cfg.pm NOTOS:_|^3"a:YENL-a-oDEGN
       1/4AEYENiYENH *S:i !A|yNOTO *S:i^3I|nNOTO|^3`i|]-a-o!C

    4. S:RDEG-L- exclude CURCURAo:(c)oFreeBSD
       -a-o-S(R)i^3](c)w-a-o+-O z!]|pYENH ^ports/
       NOTDEGP:}AY-a-o"CCUR@|aeuYEN!^!C|^1YEN~!Auu,N +- 1/4YENH
       ^CVSROOT/ NOTDEGP:}AY-a-o|ae|C!AuM<<a.s 1/4WCUR@|aeYENu|^3
       ^CVSROOT/!CuYEN"`iAo:Aa:|r(R)iP:}-a-o(c)RYENO
       1/2Z|w,E|n<<a!AS:AYENi YENH|b CVSROOT YENO/?yCURCUR-a-oAE(R)
       *,IYEN[CURW 1/4D-AY!AuM<<a|A<<`i
       '_eeuu,N-a-o|ae|C!A|y|bS:AAU"S|^3'-L-YENae<<e<<hYENu<<O<<u^3o
       1/4E!C

    5. 1/2s?e modules!A"AS:RDEG-L-(c)O|^3 FreeBSD -a-o,s^2O!C
       YEN[CURJS:A>>Yn-a-o 1/4O^2O!C

    6. Note: |^1"BAEJYENu|^3|bS:A(c)o cfg_local.pm CURCUR<<u:(c)w
         CURF $IDHEADER CUR~|^3YEN^2n^3](c)w!]YENu|^3|b FreeBSD
         -a-o-S(R)i CVS ^3](c)wCURWCUR~-`aDEG-:DEGo|ae!^!C

       1/2s?e options YENH^2AA|XS:A|b cfg_local.pm CURCUR^3](c)w-a-o
       1/4D-AAO|W-oU!C"A|b(c)O|^3-a-oAE(R) * CURCUR.j'M FreeBSD
       "A'A'<<NOTDEGS:A^3](c)w-a-o 1/4D-AAO|W-oU!C

    7. *S:i rcstemplate NOTDEG(c)M|b cfg_local.pm
       CURCURNOTU|P-a-o^3](c)w!C

    8. ?i 3/4U:(c)E-a-oS:RDEG-L-|b tagcheck CURCURDEGw^1i FreeBSD AE
       NOTd-a-o^3](c)w!CS:AYENiYENHP:EP:E|bAE(R) *-a-o^3ICURW
       1/4hYEN[CURW exit 0 "O "u(R)o/(c)O|^3 1/4D-AAO-a-oAENOTd!C

    9. |bS:AS:^1|"<<e-a-o^3I<<aCUR@YENo"AENOTO 1/2T>>{ commitlogs
       YENiYENHYEN? 1/2TAx|s!C^1w^3].|Ax |s|bAx|s(R)wCURCUR-a-o
       commitlogs CURlYENO/?yCURCUR!A|O^3oOYENO/?y
       >>YnYENy<<O/YENss!G

 % mkdir commitlogs
 % cvs add commitlogs

   ^2{|b!A|b^2OCURss-a-oAEuo/^1L<<a!AS:AYENiYENH'-L-YENaeS:A-a-o
   *S:iCURF!C 1/2T(c)wS:AYENy<<e|^3|b avail
   CURCURCUR^1^3\S:A|UCURv|s"u CVSROOT YENO/?y!A|]NOTDEG|p-aG"S|^3^3o
   1/4EDEGu-a-o,U:S:A.|S:aS:A|UCURvAe|bYEN~+-!CS:^1 3/4a
   1/2T>>{^1L<<a 1/2D-DEGo|aeCURU |C(c)RYENO!G

 % cvs commit -m '- Initial FreeBSD scripts commit'

     --------------------------------------------------------------

  2.7 'u,O^3](c)w

   S:ACURw,g.C,^3AE|nDEGuDEGoYEN>>-a-o'u,OCURF!G+-j"i'-L-YENae avail
   YENH 1/2T>>{"CYENo"AE^3-L-|p^1w'A-a-o^1BS:@!C

 % cvs commit -f -m 'Forced commit to test the new CVSROOT scripts' avail

   |p-aGCUR@CURAYEN?+-`!A"-o>>o(R)YEN^3ssCURF!IS:A^2{|bCURw,gNOTDEGS:A-a-oAx|s(R)w<<O/YENss|n
   FreeBSD -a-o(c)R YENO 1/2ZCURF!C|p-aG CVS
   CUR'uM|^3A:uS:iCURDEG>>o!A|^AYAEuo/CURW z-a-o"BAEJNOTOS:_|^3YEN?
   1/2T-a-oDEGo|ae!C

     --------------------------------------------------------------

3 FreeBSD -a-o-S(R)i^3](c)w

   FreeBSD +-M(R)
   *|UCURv"IYENICUR@O|^3AICUR-L-|P-a-o^3](c)w!A"-o'NNOTO|P(R)ECUR]"IYENI
   FreeBSD CVSROOT CURCUR-a-o freebsd CURlYENO/?y!C|]
   NOTDEGCURjP:q-a-o'-L-YENae-aIYEN^2P:.|bNOTU|P-a-o,s^2OCURCUR!A|]|^1+-M(R)
   * 1/4gCURFCUR@OA^2^3ae-a-o wrapper "O 1/2T>>{'-L-
   YENae-aIYENiYENHYEN?
   1/2T-a-o'-L-YENae!A"A^3](c)wAx|s(R)w-a-o,s^2O|W-oU!C

   |p-aGS:A-a-oAx|s(R)wCUR]>>Yn^3o
   1/4E-a-oYEN\-`a!A"-o>>oCURU+-'N.|CURP:^2D-|p|o<<O/YENss!ACUR-L-^1L-oYENyn
   YENy"ONOTYCUR@NOTq 1/2AEAo/-a-o.S:z!C

     --------------------------------------------------------------

  3.1 FreeBSD ^3](c)wCURCUR"IYENI-a-oAE(R) *

     * access - |^1AE(R) *YENI"O+-+-"iAx|s(R)w-a-o|s"u!CS:A A^3,O
       1/2s?e"AYEN[CURJ(c)O|^3|b+-M(R) *CURCUR-a-o|"u!C

     * freebsd/commitmail.pl - |^1AE(R) *CURw,g"S|^3|b
       "IYENICURF!A-duUYENuNOTONOTDEGCURFNOTY"C,|^3.N,q-a-o`i|]!CS:ACUR-L-,OS:oDEGE|^1AE(R)
       *!C

     * freebsd/cvswrap.c - |^1 CVS wrapper `i(c)l 
       1/2XNOTOYENI"O<<O/YENssAENOTd(c)O|^3|s"u-a-oCURuS:@!CS:o|h-a-oDEGT(R)S:|buy<<a.|'-L-YENX!CS:AA^3,O
       1/2s ?e ACCESS (c)M REALCVS -a-o,o(R)|
       YENH^2AA|XS:A-a-o^3](c)w!C

     * freebsd/mailsend.c - |^1AE(R) *NOTO FreeBSD ^3] (c)w mailing
       lists >>Yn-a-o!AS:ACUR-L-,OS:oDEGE|^1AE(R) *!C

     --------------------------------------------------------------

  3.2 "BAEJ

    1. YENu|^3YEN[CURJS:A-a-o"IYENI-aI|W-oU"`i access CURCUR!C

    2. 1/2s?e cvswrap.c -a-o,o(R)|YENH^2AA|XS:A-a-o^3](c)w!A(c)w,q
       |bCURj 1/4g-a-o ACCESS
       CURCUR!C|P(R)E|p-aG^1w^3]ECUR-L-^2AA|XS:A-a-o+-!-ap
       -a-o,U:CUR]A^3,O *S:iYEN>>|a^1e>>U-a-o cvs
       u{|!(c)O|b|`i,m!C`i(c)l -a-o cvswrap.c
       S:AE+-ae'AYENN|o/-aA-oY-a-o CVS u{|!!A"O|pYENi -`a.|NOTO
       /usr/bin/ncvs!C

       S:U-a-o cvswrap.c NOTO^3o 1/4E!G

 #define ACCESS "/local/cvsroot/CVSROOT/access"
 #define REALCVS "/usr/bin/ncvs"

    3. +-uCURU"ONOTO<<O/YENss wrapper "O
       1/2T>>{S:A|b'-L-YENae(R)ENOTO|bYEN? 1/2T-a-o,s^2OCURCUR!C
       |bS:A-a-o CVSROOT CURCUR-a-o cvswrap.c n-`aDEG-:"IYENI!C

       |bS:AS:^1|" 1/2s?e"AYEN[CURJYEN? 1/2T-a-o,o(R)|<<aS:UIn"O
       1/2sA:P:`i(c)l 1/2X!G

 % cc -o cvs cvswrap.c

       uM<<aP:i|ae>>Yn^3](c)w!]|^1"BAEJ>>Yn root AAv!^!G

 # mv /usr/bin/cvs /usr/bin/ncvs
 # mv cvs /usr/bin/cvs
 # chown root:ncvs /usr/bin/cvs /usr/bin/ncvs
 # chmod o-rx /usr/bin/ncvs
 # chmod u-w,g+s /usr/bin/cvs

       ^3o.|+-N wrapper |w,E|"^1w^3]-a-o cvs u{|!!A 1/2D- 1/2T(c)w
       YENo|on"IYENIAx|s(R)w-a-oCURHA^3,O|^3YEN? 1/2T-a-o|s"uAAv!C

    4. ^2{|bS:AYENiYENHS:RDEG-L-(c)O|^3|bAx|s(R)w,s^2OCURCUR-a-o"IYENI-aI!A(c)O|^3-a-o|s"u+-+-"i.|,gYENN
       wrapper S:^1|"!A|P(R)E wrapper .|^3](c)w|s"u-a-oYEN?
       1/2T,s^2O!C

     --------------------------------------------------------------

  3.3 'u,O^3](c)w

   S:A-a-o wrapper
   ^2{|bA^3,OCURw,g|w,E|nCURF!AS:A.iuMCUR]YENiYENH+-j"i'-L-YENae
   access "O'u,ONOTOS:_YEN?+-`!G

 % cvs commit -f -m 'Forced commit to test the new CVSROOT scripts' access

   |P
   1/4E|a!A|p-aG|^3?u>>~!AAENOTdNOTOS:_CURWz(c)O|^3"BAEJ^3-L-|^3YEN?
   1/2T-a-oDEGo|ae!C

     --------------------------------------------------------------

YEN>>CURaaCURI"a:YENLCURaaYENo!AYENiYENN|^1CURU,u:!Gftp://ftp.FreeBSD.org/pub/FreeBSD/doc/!C

        Y|^3 FreeBSD CURe+--oADEGY!A 1/2D-YENy 3/4\AA-a FreeBSD
         NOTUAo:CURaaYENo!A|pCUR-L--`a,N"M-a-o,U:!A|ANOT-c-,ss
                       <questions@FreeBSD.org>!C
  Ao:(c)oYEN>>CURaaYENo-a-oDEGYAD!A 1/2D-NOT-c-,ss <doc@FreeBSD.org>!C
