Èí¼þÅäÖùÜÀí HOWTO

VSS, Starteam, CVS, or Others?

½¯ öÎ

ÐÞ¶©ÀúÊ·
ÐÞ¶© 2.4 2005/02/24 jiangxin
²¹³ä acl ¶ÔCVS½øÐо«È·µÄȨÏÞ¿ØÖÆ£»
ÐÞ¶© 2.3 2003/11/17 jiangxin
¶¨ÆÚÇåÀíCVSROOT½Å±¾²úÉúµÄÁÙʱÎļþ£»
ÐÞ¶© 2.2 2003/8/15 jiangxin
ÐÞÕýÁ˵±Ä¿Â¼»òÕßÎļþÃûÖаüº¬¿Õ¸ñ£¬CVSROOT½Å±¾¹¤×÷²»Õý³££¬²»ÄÜ·¢ËÍÓʼþµÄ BUG£»
ÐÞ¶© 2.1 2003/4/9 jiangxin
Ôö¼Ó°æ±¾¹ÜÀíϵͳµÄÇ¨ÒÆ¡£
ÐÞ¶© 2.0 2003/2/19 jiangxin
Ôö¼ÓÓÃCVS¹ÜÀíÎļþ½øÐй¦ÄÜÀ©³ä¡£
ÐÞ¶© 1.9 2003/1/21 jiangxin
ÓÉÓÚ1.11.2°æµÄCVS´æÔÚ×ŵķþÎñÆ÷¶Ë repository soft-link µÄBUG£¬Òò´ËÖØÐ¹滮·þÎñÆ÷¶Ë´æ´¢£¬Ôö¼ÓÁËCVSĿ¼Ŀ¼ȨÏÞÉèÖá£
ÐÞ¶© 1.8 2002/11/19 jiangxin
Ôö¼ÓCVSʹÓÃFAQ¡£
ÐÞ¶© 1.7 2002/09/10 jiangxin
Ôö¼Óͨ¹ý modules Îļþ£¬½¨Á¢Ä£¿éʵÏÖĿ¼¹²Ïí
ÐÞ¶© 1.6 2002/09/08 jiangxin
Ôö¼Ó Starteam, CVS ÃüÁî¶ÔÕÕ
ÐÞ¶© 1.5 2002/08/02 jiangxin
²¹³ä Starteam ºÍ Microsoft Visual C++ µÄ¼¯³É
ÐÞ¶© 1.4 2002/05/27 jiangxin
²¹³äÃüÁîÐвο¼£¬²¢ÐÞ¶©ÆäËüÕ½Ú
ÐÞ¶© 1.3 2002/03/04 jiangxin
¿Í»§¶ËÉèÖÃ
ÐÞ¶© 1.2 2002/03/01 jiangxin
ÐÞ¸ÄFAQ£¬¸ü¾ß¿É¶ÁÐÔ¡£È磺 ¹ØÓÚstatus Unknown µÄFAQ
ÐÞ¶© 1.1 2002/01/10 jiangxin
ת»»ÎªDocbook¸ñʽ
ÐÞ¶© 1.0 2001/12 jiangxin
Ôö¼ÓFAQ£¬ÐÞ¸Äɾ³ý·´É¾³ý
ÐÞ¶© 0.9 2001/11/23 jiangxin
CWAP×éStarteamʹÓþ­Ñ鱨¸æ

ÕªÒª

±¾ÍøÕ¾»¹¿ÉÒÔÌṩ °æ±¾¿ØÖÆÏµÍ³£¨CVS£©µÈµÄÓû§Åàѵ ÒÔ¼° CVS ·þÎñÆ÷ÅäÖà µÈÊÕ·Ñ·þÎñ£¬×Éѯµç»°²Î¼û ±¾ÍøÕ¾ÁªÏµ·½Ê½¡£

£¨±àÒë×Ô°æ±¾: 65£¬×îºó¸üÐÂʱ¼ä: 2007-06-19 17:40:06£©


Ŀ¼

1. Overview
2. CVS vs. STARTEAM——·þÎñÆ÷ÉèÖÃ
2.1. CVS·þÎñÆ÷ÉèÖÃ
2.1.1. ÔËÐÐ CVS
2.1.2. Ìí¼ÓÕʺźÍÉèÖÃȨÏÞ
2.1.3. ´´½¨¹¤³Ì
2.1.4. ÓÃCVS¹ÜÀíÎļþ½øÐй¦ÄÜÀ©³ä
2.1.5. »ùÓÚ Linux ACL µÄȨÏÞ¿ØÖÆ
2.2. Starteam·þÎñÆ÷ȨÏÞÉèÖÃ
2.2.1. Óû§¹ÜÀí
2.2.2. ·þÎñÆ÷ÅäÖõݲȫÉèÖÃ
2.2.3. ¹¤³ÌµÄȨÏÞÉèÖÃ
2.2.4. ÊÓͼµÄȨÏÞÉèÖÃ
2.2.5. Îļþ¼ÐµÄȨÏÞÉèÖÃ
2.2.6. Starteam·þÎñÆ÷ÓÅ»¯
3. CVS vs. STARTEAM——·þÎñÆ÷¶Ë´æ´¢
3.1. CVS ·þÎñÆ÷¶Ë´æ´¢
3.2. Starteam ·þÎñÆ÷¶Ë´æ´¢
4. CVS vs. STARTEAM——¿Í»§¶ËÉèÖÃ
4.1. CVS ¿Í»§¶ËÉèÖÃ
4.2. Starteam ¿Í»§¶ËÉèÖÃ
5. CVS vs. STARTEAM——³£Óð汾¿ØÖƲÙ×÷
6. CVS vs. STARTEAM——Ä£¿é¼ä¹²Ïí
6.1. CVS ÖеÄÎļþºÍĿ¼µÄ¹²Ïí
6.2. Starteam ÖеÄÎļþºÍĿ¼µÄ¹²Ïí
7. Starteam Howto
7.1. Server Configuration
7.1.1. Óû§½Ç¶È
7.1.2. ¹ÜÀíÔ±½Ç¶È
7.2. Project
7.2.1. Óû§½Ç¶È
7.2.2. ¹ÜÀíÔ±½Ç¶È
7.3. View
7.4. Branch
7.4.1. STARTEAMºÍCVSµÄ·ÖÖ§²»Í¬µã
7.4.2. ½¨Á¢·ÖÖ§×¢ÒâÊÂÏî
7.5. Label
7.5.1. View Label
7.5.2. Build label
7.5.3. Promotion state
7.5.4. Revision label
7.6. Ŀ¼»®·Ö
7.6.1. Ô´ÂëµÄ°æ±¾¿ØÖÆ
7.6.2. ÎĵµµÄ°æ±¾¿ØÖÆ
7.6.3. ȱÏÝ¿ØÖÆ
7.6.4. ProjectManagementĿ¼
7.7. ɾ³ýºÍ·´É¾³ý
7.7.1. StarteamÎļþ´æ·Å»úÀí
7.7.2. ɾ³ý
7.7.3. ÒÆ¶¯
7.7.4. ·´É¾³ýµÄ²½Öè
7.8. Îļþ·þÎñÆ÷ºÍ¸öÈ˰汾¿ØÖÆ
7.9. ¿Í»§¶ËÉèÖÃ
7.10. Nightly BuildºÍ²âÊÔ
7.11. Starteam CLI Wrapper
7.12. StarTeam Óë ³£Óÿª·¢¹¤¾ßÕûºÏ
8. °æ±¾¹ÜÀí¹¤¾ßÇ¨ÒÆ
8.1. ÓÃͬһÌ×±¾µØÄ¿Â¼£¬¶ÔÓ¦ÓÚÏàÓ¦µÄ STARTEAM ºÍ CVS ¹¤³Ì
8.2. µ¼³ö Starteam ÿ¸öÎļþµÄCommit Log
8.3. ÆÊÎöSTARTEAMÈÕÖ¾£¬Éú³É½Å±¾
8.4. ÔËÐÐÉú³ÉµÄ½Å±¾£¬Íê³É´úÂë Checkin
8.5. ȱº¶
A. CVS FAQ
B. Starteam FAQ

1. Overview

CVS ÊÇ¿ª·ÅÔ´ÂëµÄÒ»¸öÆæ¼££¬ÒàÊÇ¿ª·ÅÔ´ÂëµÃÒÔÑÓÐøºÍ·¢Õ¹µÄÍÆ¶¯Õߣ¬Êǰ汾¿ØÖƵľ­µä¡£CVS Êdz£Óõİ汾¿ØÖƹ¤¾ß¡£

Starteam ÊÇÒ»¸ö¼¯ºÏÁ˰汾¿ØÖƺÍȱÏÝ¿ØÖÆÁ½ÖÖ¹¦ÄܵÄÈí¼þ£¬²¢ÇÒ¾ßÓÐ CVS ûÓеÄÇ¿´óµÄͼÐνçÃæ£¬Ò×ѧÒ×Óá£2002Äêµ×±»Borland¹«Ë¾ÊÕ¹º£¬·¢Õ¹Ç°¾°Î´Öª£¬ËüÊÇÎÒÊÇÓõĵÚÒ»¸ö´óÐÍÉÌÓð汾¿ØÖÆÈí¼þ£¨ÕæµÄ¸¶ÁËMoneyµÄßÏ£©¡£

[Ìáʾ]

ÆÀ¼Û CVS¡¢STARTEAM ÊëÓÅÊëÁÓ£¬ÊÇÒ»¸öÈÊÕß¼ûÈÊ£¬ÖÇÕß¼ûÖǵÄÎÊÌâ¡£

Starteam µÄͼÐλ¯½çÃæ£¬Äܹ»Ê¹³õѧÕßÒ×ÓÚ½ÓÊÕ£¬¶øÇÒÆäȱÏÝ¿ØÖƹ¦ÄܵŦÄÜ£¨»ùÓÚÊý¾Ý¿âµÄChange Request£©£¬ÊÇCVS ²»¾ßÓе쬏üÊÇÏàÓ¦¹¤¾ßÖжÀÊ÷Ò»Öĵġ£

CVSµÄÓÅÐã¿çƽ̨ÄÜÁ¦¡¢Ç¿´óµÄÃüÁîÐС¢ÇåÎúµÄ·þÎñÆ÷¶ËÊý¾Ý½á¹¹¸ü±ãÓÚÊý¾ÝµÄ±¸·Ý¡¢ÔÖÄѻָ´ºÍ¿É¿¿ÐÔ¡£Simple is Butiful Ë͸ø CVS Ò»¶¨Ã»´í¡£

  1. ²àÖØ²»Í¬

    CVSרעÓÚÅäÖùÜÀíÈí¼þ·¶³ëÖеİ汾¹ÜÀíϵͳ¡£¶øÅäÖùÜÀíϵͳ³ýÁ˰üÀ¨°æ±¾¹ÜÀíÍ⣬»¹°üÀ¨¹¹½¨¹ÜÀí£¨Build Management£©ºÍȱÏݸú×Ùϵͳ¡£¶øStarteam°üÀ¨ÁËÕâÈýÏî¡£±¾ÎĵµÒ²¾ÍÖ»±È½ÏÆä°æ±¾¹ÜÀíϵͳµÄÒìͬ¡£

  2. ȨÏÞ¿ØÖÆ

    Ò»°ãÀ´Ëµ£¬CVSµÄȨÏÞÉèÖõ¥Ò»£¬Í¨³£Ö»ÄÜͨ¹ýCVSROOT/passwd, CVSROOT/readers, CVSROOT/writers Îļþ£¬Í¬Ê±»¹ÒªÉèÖÃCVS REPOSµÄÎïÀíĿ¼ȨÏÞÀ´Íê³ÉȨÏÞÉèÖã¬ÎÞ·¨Íê³É¸´ÔÓµÄȨÏÞ¿ØÖÆ£»¶øSTARTEAMÎÞÐèͨ¹ýÎïÀí·¾¶µÄȨÏÞÉèÖ㬶øÊÇͨ¹ý×Ô¼ºµÄÊý¾Ý¿â¹ÜÀí£¬ÊµÏÖÁËÀàËÆWINDOWS NTµÄÓòÓû§¹ÜÀíºÍĿ¼ÎļþACL¿ØÖÆ¡£

    µ«ÊÇCVSͨ¹ýCVSROOTĿ¼ÏµĽű¾£¬ÌṩÁËÏàÓ¦¹¦ÄÜÀ©³äµÄ½Ó¿Ú£¬²»µ«¿ÉÒÔÍê³É¾«Ï¸µÄȨÏÞ¿ØÖÆ£¬»¹ÄÜÍê³É¸ü¼Ó¸öÐÔ»¯µÄ¹¦ÄÜ¡£

  3. Ò×ÓÃÐÔ

    StarteamµÄͼÐνçÃæ¹¦ÄÜÇ¿´ó£¬µ«ÆäÃüÁîÐй¦ÄܽÏCVSÈõ£¬ÐèÒª×Ô¼º±àдshell½Å±¾¼ÓÇ¿¡£¶øËæ×ÅWINCVS×÷ΪͼÐοͻ§¶ËµÄ¿ÉÓÃÐÔµÄÔöÇ¿£¬StarteamµÄÇ¿ÏîÕýÔÚ±»Ï÷Èõ¡£

  4. LabelµÄ¹ÜÀí

    CVS µÄ label ½¨Á¢ÔÚÎļþÉÏ£¬ÄÑÒÔÈ·¶¨µ½µ×ÓжàÉÙ´æÔÚµÄ label £¬¶øSTARTEAM£¨Í¼ÐνçÃæ£©¿ÉÒԺܷ½±ãÖªµÀÓÐÄÄЩ View Label¼°Revision Label¡£

    CVSµÄ°æ±¾·ÖÖ§£¬ labelÊǽ¨Á¢ÔÚÎļþÉÏ£¬¹¤×÷ÔÚÆäËû·ÖÖ§µÄ³ÌÐòͬÑù»á¿´µ½ÆäËü·ÖÖ§µÄlabel£»¶øStarteamµÄlabelÖ»ÔÚͬһ¸öÊÓͼÄÚÓÐЧ£¬ÓжÀÁ¢µÄÃüÃû¿Õ¼ä¡£

    STARTEAM¾ßÓÐPromotion states£¬¿ÉÒÔ¿´×÷ÊÇlabelµÄ±êÇ©¡£ÔÚlabelÉÏÓÖ·â×°Ò»²ãµÄ Promotion State ±ãÓڼǼ°æ±¾µÄÌáÉý£¬ºÍ½¨Á¢×Ô¶¯±àÒ룻¶øCVS ûÓи¡¶¯ label µÄ¸ÅÄֻÄÜͨ¹ýÎļþ¼Ç¼·½Ê½ÊµÏÖ£¨ÈçÎÒÃÇʹÓà .promotion Îļþ¼Ç¼µ±Ç°Îȶ¨µÄ label£©¡£

  5. Îļþ»º´æ

    Starteam ´æÔÚCACHEĿ¼£¬»º´æÁËËùÓÐ CheckoutµÄ°æ±¾µÄÎļþ£¬Òò´Ë CheckoutËٶȿ졣¶øCVSûÓлº´æ£¬check out¹ý³Ì½ÏÂý£¬ÓÈÆäÊÇ·ÖÖ§µÄ Checkout¡£

    [×¢Òâ]

    µ«ÎҶԴ˱íʾ»³ÒÉ¡£ÓÈÆäÊÇStarteam Unix¿Í»§¶Ë»ùÓÚJAVA¼¼Êõ£¬ËÙ¶ÈÃ÷ÏÔ±ÈCVSÒªÂý¡£

  6. ²Ù×÷ÎļþÃûºÍĿ¼Ãû

    CVSµÄREPOSITORYµÄÎïÀí´æ´¢½á¹¹¼´ÎªÏîÄ¿µÄ×éÖ¯½á¹¹£¬Ê¹µÃÎļþÃûÐ޸ĺÍĿ¼µÄÖØÐÂ×éÖ¯³ÉΪÄÑÌ⣬ÍùÍùÐèÒª¹ÜÀíԱȨÏÞÈ¥ÊÖ¶¯²Ù×÷Repository£»¶øSTARTEAMµÄRepositoryµÄÎļþ½á¹¹ºÍÊÓͼµÄÎļþ½á¹¹¿ÉÒÔÍêÈ«²»Í¬£¬Ä¿Â¼¡¢ÎļþÃûÐ޸ĺÍÒÆ¶¯·Ç³£·½±ã£¬»ùÓÚÊý¾Ý¿âµÄÎļþÃû¹ÜÀí»¹¿ÉÒÔ·½±ãµØÔÚ²»Í¬¹¤³ÌÖ®¼ä¹²ÏíÎļþ£¬Ð­Í¬¹¤×÷¡£

  7. CVSÊdzÌÐòÔ±µÄ¹¤¾ß£¬STARTEAM»¹ÊǹÜÀíÏîÄ¿µÄ¹¤¾ß

    ¸öÈËÎļþ¹ÜÀí»òСÏîÄ¿µÄ×éÖ¯£¬ÐèÒªÇáÁ¿¼¶µÄ¹ÜÀí£¬ºÍÁé»îµÄÎļþµ¼Èë¡¢µ¼³ö£¬ÒÔ¼°ºÍ×ÔÓÉ´úÂëµÄ½»»¥£¬ÔòCVS£¬Perforce£¬PVCS£¬SourceSafeµÈÃæÏòÎļþµÄ°æ±¾¿ØÖÆÕ¼ÓÅÊÆ¡£¶ÔÓÚ¹«Ë¾¡¢´óÏîÄ¿£¬ÐèÒª¶ÀÁ¢µÄ²âÊÔ¡¢QAµÈ·Ö¹¤£¬»¹Òª¸ü¶àµÄ¿¼ÂǶàÑùµÄÓû§È¨ÏÞ¿ØÖÆ£¬Ò×ÓÃÐÔ£¨Í¼ÐνçÃæ£©£¬È±ÏÝ¿ØÖÆ£¬ÔòÐèÒªÃæÏò¹¤³ÌµÄSTARTEAMÀ´½øÐа汾¿ØÖƺͿª·¢¡£

  8. CVSµÄÓÅÊÆ

    CVSµÄÓÅÊÆ£ºÏîÄ¿Îļþ¿ÉÒÔ·½±ãµÄ×éºÏºÍÒÆÖ²£¬ÕâÊÇÒòΪCVSÒÔÎļþΪºËÐÄ£¬¼´ÃæÏòÎļþµÄ¹ÜÀí·½Ê½¡£¶øÇÒÄ¿Ç°ÍøÂçÉϺܶ࿪·ÅÔ´Âë¶¼²ÉÓÃCVS£¬¿ÉÒԺܺùµÍ¨¡£

    CVSÅäÖüòµ¥¡¢½¡×³¡¢¿ÉÒÔºÜÈÝÒ×µØÒÆÖ²£»STARTEAM¼¯³É¶È½Ï¸ß£¬ÒÆÖ²¹ý³Ì¸´ÔÓ£¬ÐèÒªµÄ¹ÜÀí¸ºµ£´ó£¬ÐèÒªÍêÉÆµÄ±¸·Ý¼Æ»®¡£

    CVSÊÇ¿ª·¢Ô´Â룬·þÎñÆ÷¶Ë´æ´¢Ò×ÓÚÀí½â£¬±ãÓÚ¿ØÖÆ£»¶øStarteamΪÉÌÒµÈí¼þ£¬·þÎñÆ÷¶Ë´æ´¢·½Ê½·â±Õ£¬ÄÑÒÔ¹ÜÀí¡£µ«ÊÇ CVS ²»ÌṩͼÐνçÃæ£¬Óнϳ¤µÄѧϰÇúÏß¡£

  9. Starteam µÄÁÓÊÆ

    ²»Ö§³Ö·ÖÖ§µÄºÏ²¢£¬ÐèÒª¹ý¶àµÄÊÖ¶¯¸ÉÔ¤¡£¶øCVS¿ÉÒÔ×Ô¶¯Íê³É¡£

    ËÙ¶ÈÂý£¬Ò»¶¨³Ì¶ÈÉÏÓ°Ï쿪·¢Ð§ÂÊ¡£

    ²»Ö§³Ö²¢Ðпª·¢£¬²»Äܺܺýâ¾öMergeµÄÎÊÌâ¡£¶øCVS¿ÉÒÔÖÇÄÜ Merge¡£

    ¹ÊÕϻָ´À§ÄÑ£¬ÐèÒªÓÐרְ¹ÜÀíԱά»¤¡£¶øCVSÒ×ÓÚά»¤¡£

  10. ÆÀ¼ÛÓÅÁÓ£¬²»ÈçÏÈÓÃÏȵÃ

    ²»ÓÿÌÒâȥȡÉáÄÄÒ»¸ö£¬Ö»ÒªÓú㬼´¿É¡£¿öÇÒ£¬ÒѾ­ÓÐÁËÍêÃÀµÄCVS¡¢STARTEAM»¥Ïàת»»µÄ·½·¨¡££¨²Î¼û£º¡¶CVS, Starteam»¥Ïàת»»¡·£©

ÏÂÃæÍ¨¹ý¶Ô CVS¡¢STARTEAM µÄ·þÎñÆ÷¶ËºÍ¿Í»§¶Ë¶ÔÕÕ£¬Á˽ⱳºóµÄÕæÏà¡£

2. CVS vs. STARTEAM——·þÎñÆ÷ÉèÖÃ

2.1. CVS·þÎñÆ÷ÉèÖÃ

2.1.1. ÔËÐÐ CVS

  • /etc/services

    ...
    cvspserver      2401/tcp
    cvspserver      2401/udp
    ...
    
  • ÓÃxinetdÔËÐÐ: /etc/xinetd.d/cvs

    
    service cvspserver
    {
            socket_type     = stream        
            protocol        = tcp
            wait            = no
            user            = root
            server          = /usr/bin/cvs
            server_args     = -f --allow-root=/repos/root1 --allow-root=/repos/root2 pserver
            disable         = no
    }
    
    
  • ÓÃinetdÔËÐÐ: /etc/inetd.conf

    
    ...
    cvspserver stream tcp nowait root /usr/bin/cvs cvs -f --allow-root=/repos/project --allow-root=/repos/user pserver
    ...
    
    

2.1.2. Ìí¼ÓÕʺźÍÉèÖÃȨÏÞ

  • ´´½¨ÏµÍ³ÕʺÅ

    ¼ÙÉèĿ¼ /repos/project ×÷Ϊ¶àÈ˹²ÏíÏîÄ¿µÄ°æ±¾¿ØÖƸùĿ¼£¬ÐèÒªÓÃ×éȨÏÞ¿ØÖÆ£»/repos/user×÷Ϊ´æ·Å¸öÈ˶ÀÕ¼µØ°æ±¾¿ØÖƸùĿ¼¡£¹ÜÀíÔ±ÕʺÅΪcvsroot£¬ÏîÄ¿°æ±¾¿ØÖƵĹ«¹²ÕʺÅΪ cvsproject£¬Óû§°æ±¾¿ØÖƵĹ«¹²ÕʺÅΪ cvsuser£¬ÏàÓ¦µÄÓû§×éΪ cvsroot, cvsproject, cvsuser¡£

    $ groupadd cvsproject
    $ groupadd cvsuser
    $ groupadd cvsroot
    $ useradd  -g cvsproject -s /sbin/nologin         cvsproject
    $ useradd  -g cvsuser    -s /sbin/nologin         cvsuser
    $ useradd  -g cvsroot    -G cvsproject,cvsuser    cvsroot               1
    $ useradd  -g cvsuser    -s /sbin/nologin         cvs_jiangxin          2
    $ useradd  -g cvsuser    -s /sbin/nologin         cvs_johnson           
    
    1

    ÉèÖà cvsroot ÊôÓÚ¶à¸ö×飬ÕâÑù cvsroot Óû§³ýÁ˽øÐÐϵͳά»¤Í⣨ÈçÌí¼ÓÐµĹ¤³Ì£©£¬»¹¿ÉÒÔºÍÆäËü×éÓû§Ò»Ñù¾ßÓйÜÀí´úÂëµÄȨÏÞ¡£

    2

    ÓÃÀ´ºÍCVSÓû§ÕʺÅÒ»Ò»¶ÔÓ¦µÄϵͳÕʺš£ÏµÍ³ÕʺŽûÖ¹µÇ¼£¬ÃÜÂëÉèÖÃÔÚÏàÓ¦µÄ CVS ¶ÔÓ¦ÕʺÅÎļþÖÐÉèÖá£

  • ´´½¨CVS¸ùĿ¼

    
    $ mkdir -p /repos/project
    $ mkdir -p /repos/user
    $ chown cvsroot:cvsroot /repos/project
    $ chown cvsroot:cvsroot /repos/user
    $ chmod  775 /repos
    $ chmod 2775 /repos/project
    $ chmod 2775 /repos/user
    $ su - cvsroot
    $ cvs -d /repos/project init
    $ cvs -d /repos/user init
    
    

    ÔËÐÐÍê±Ï cvs init Ö®ºó£¬ÔÚCVS¸ùĿ¼Ï´´½¨ÁËÅäÖÃĿ¼CVSROOT£¬È¨ÏÞÈçÏ£º

    $ ls -l /repos/project/CVSROOT/
    
    -r--r--r--    1 cvsroot  cvsroot       493 Jan 21 10:37 checkoutlist
    -r--r--r--    1 cvsroot  cvsroot       696 Jan 21 10:37 checkoutlist,v
    -r--r--r--    1 cvsroot  cvsroot       760 Jan 21 10:37 commitinfo
    -r--r--r--    1 cvsroot  cvsroot       963 Jan 21 10:37 commitinfo,v
    -r--r--r--    1 cvsroot  cvsroot       527 Jan 21 10:37 config
    -r--r--r--    1 cvsroot  cvsroot       730 Jan 21 10:37 config,v
    -r--r--r--    1 cvsroot  cvsroot       753 Jan 21 10:37 cvswrappers
    -r--r--r--    1 cvsroot  cvsroot       956 Jan 21 10:37 cvswrappers,v
    -r--r--r--    1 cvsroot  cvsroot      1025 Jan 21 10:37 editinfo
    -r--r--r--    1 cvsroot  cvsroot      1228 Jan 21 10:37 editinfo,v
    drwxrwxr-x    2 cvsroot  cvsroot      4096 Jan 21 10:37 Emptydir
    -rw-rw-rw-    1 cvsroot  cvsroot         0 Jan 21 10:37 history
    -r--r--r--    1 cvsroot  cvsroot      1141 Jan 21 10:37 loginfo
    -r--r--r--    1 cvsroot  cvsroot      1344 Jan 21 10:37 loginfo,v
    -r--r--r--    1 cvsroot  cvsroot      1151 Jan 21 10:37 modules
    -r--r--r--    1 cvsroot  cvsroot      1354 Jan 21 10:37 modules,v
    -r--r--r--    1 cvsroot  cvsroot       564 Jan 21 10:37 notify
    -r--r--r--    1 cvsroot  cvsroot       767 Jan 21 10:37 notify,v
    -r--r--r--    1 cvsroot  cvsroot       649 Jan 21 10:37 rcsinfo
    -r--r--r--    1 cvsroot  cvsroot       852 Jan 21 10:37 rcsinfo,v
    -r--r--r--    1 cvsroot  cvsroot       879 Jan 21 10:37 taginfo
    -r--r--r--    1 cvsroot  cvsroot      1082 Jan 21 10:37 taginfo,v
    -rw-rw-rw-    1 cvsroot  cvsroot         0 Jan 21 10:37 val-tags
    -r--r--r--    1 cvsroot  cvsroot      1026 Jan 21 10:37 verifymsg
    -r--r--r--    1 cvsroot  cvsroot      1229 Jan 21 10:37 verifymsg,v
    

    ¿ÉÒÔ¿´³öÎļþ history, val-tags µÄȨÏÞÊÇÈκÎÈ˿ɶÁд£¬ÆäËüÎļþµÄȨÏÞÊÇÈκÎÕʺÅÖ»¶Á¡£

    Îļþ CVSROOT/val-tags ÓÃÀ´È·¶¨ÊÇ·ñÒ»¸öTAGÊÇ¿ÉÓõģ»Îļþ CVSROOT/history ÓÃÀ´¼Ç¼CVSµÄ·ÃÎʼǼ¡£

  • ´´½¨ CVS Óû§ÕʺÅ

    ʹÓÃϵͳÕʺŲ»°²È«£¬¶øCVSÌṩÁ˶ÀÁ¢ÓÚϵͳµÄÓû§ÕʺŹÜÀí¡£

    ʹÓÃÅäÖÃÎļþ CVSROOT/passwd, CVSROOT/passwd, CVSROOT/passwd £¬À´¹ÜÀíÕʺš£

    $ cat /repos/project/CVSROOT/passwd
    jiangxinroot:_passwd_here_:cvsroot	1
    jiangxin:_passwd_here_:cvsproject
    johnson:_passwd_here_:cvsproject	2
    anonymous::cvsproject			3
    
    $ cat /repos/project/CVSROOT/readers
    anonymous				4
    
    
    1

    Óû§ÕʺŠjiangxinroot£¬¾ßÓкÍϵͳÕʺŠcvsroot ͬÑùȨÏÞ¡£

    2

    Óû§ÕʺŠjiangxin, johnson£¬¶¼¾ßÓÐϵͳÕʺŠcvsproject ͬÑùµÄȨÏÞ£¬

    3

    ÄäÃûÕʺŠanonymous µÄÃÜÂëΪ¿Õ¡£

    4

    readers ÎļþÖгöÏÖµÄÓû§Õʺţ¬Ö»¾ßÓÐÖ»¶ÁȨÏÞ¡£

  • CVS Óû§Ð޸ĿÚÁî

    ÎÒдÁËÒ»¸ö³ÌÐò£¬×÷ΪÓû§µÇ¼µÄ shell£¬ÔÊÐíÓû§Ô¶³Ì SSH µÇ¼£¬ÐÞ¸Ä×Ô¼ºµÄ Unix ϵͳ¿ÚÁîÒÔ¼° CVS Õ˺ſÚÁ²Î¼û£º¸½¼þ¡£Èç¹ûÄúÓиüºÃµÄ·½·¨£¬²»Áߴͽ̡£

2.1.3. ´´½¨¹¤³Ì

Ö»ÄÜÒÔ cvsroot Óû§´´½¨¹¤³Ì¡£ÒòΪ cvs ¸ùĿ¼µÄȨÏÞÉèÖÃΪ cvsroot ÕÊ»§¿Éд¡£

  • ÔÚ¿Í»§¶Ë´´½¨¹¤³Ì

    client$ cvs -d :pserver:jiangxinroot@10.0.0.7:/repos/project login
    client$ cvs -d :pserver:jiangxinroot@10.0.0.7:/repos/project import -m "add module test, vendor jiangxin, init_tag start." test jiangxin start
    
    $ ls -l /repos/project
    drwxrwxr-x    3 cvsroot  cvsroot      4096 Jan 21 10:54 CVSROOT
    drwxrwsr-x    2 cvsroot  cvsroot      4096 Jan 21 11:00 test	 1
    
    $ chown -R cvsproject:cvsproject test
    $ chmod -R 770 test		
    $ chmod -R g+s test		2
    
    client$ cvs -d :pserver:jiangxin@10.0.0.7:/repos/project co test		3
    client$ cvs -d :pserver:johnson@10.0.0.7:/repos/project  co -d test2 test
    
    1

    ÉèÖù¤³Ì/Ä£¿é test µÄĿ¼ȨÏÞ£¬Ê¹Ö»ÓÐ cvsproject×éÓû§²ÅÓжÁдȨÏÞ£¬ÆäËûÕʺžܾø·ÃÎÊ¡£

    3

    Óû§ÕʺŠjiangxin, johnson Ó³ÉäΪϵͳÕʺŠcvsproject£¬Òò´Ë¿ÉÒÔ·ÃÎʹ¤³Ì test¡£

    2

    Ö®ËùÒÔΪģ¿é test ÉèÖà g+s£¬ÊÇΪÁ˵±ÉèÖÃÒ»¸öÓû§ÊôÓÚ¶à¸öʱ£¬²Ù×÷²»Í¬¹¤³Ìʱ£¬Äܹ»±£ÕÏÎļþµÄ×éidά³Ö²»±ä¡£·ñÔò¿ÉÄÜÓ°ÏìÆäËüÓû§µÄȨÏÞ¡£¿ÉÒÔÓøü¼òµ¥µÄÃüÁîÖ´ÐÐ chmod -R 2770 test ½øÐÐÉèÖá£

    ÓÚÊÇ´´½¨Á˶àÓû§¹²ÏíµÄ¹¤³Ì test¡£

  • ÁíÒ»ÖÖ´´½¨¹¤³ÌµÄ·½·¨£ºÔÚ·þÎñÆ÷¶Ë´´½¨¹¤³Ì

    ¿ÉÒÔÖ±½ÓÔÚ·þÎñÆ÷¶Ë´´½¨Ä¿Â¼£¬ÉèÖÃȨÏÞ£¬¼´Íê³É¹¤³ÌµÄ´´½¨¡£µ±È»ÕâÑù´´½¨µÄ¹¤³ÌÖ»ÊÇÒ»¸ö¿ÕµÄ¹¤³Ì£¬ÐèÒªÔÚ¿Í»§¶ËΪ¿ÕµÄ¹¤³ÌÖð¸öÌí¼ÓÎļþºÍĿ¼¡£

    $ cat /repos/project/CVSROOT/passwd
    jiangxroot:_passwd_here_:cvsroot
    anonymous:_passwd_here_:cvsuser
    jiangxin:_passwd_here_:cvs_jiangxin
    johnson:_passwd_here_:cvs_johnson
    
    $ cd /repos/project
    $ mkdir jiangxin; chown -R cvs_jiangxin:cvsuser jiangxin; chmod -R 2700 jiangxin
    $ mkdir johnson;  chown -R cvs_johnson:cvsuser  johnson;  chmod -R 2700 johnson
    

    ÓÚÊÇ´´½¨ÁËÁ½¸öÓû§¶ÀÕ¼µÄ¹¤³Ì¡£

2.1.4. ÓÃCVS¹ÜÀíÎļþ½øÐй¦ÄÜÀ©³ä

È·Ê¡°²×°µÄCVSµÄȨÏÞ½ö½ö×÷ÓÃÓÚĿ¼£¬¶ø²»Äܾ«Ï¸µ½Îļþ¼¶±ð¡£¶øÇÒ¼´Ê¹Óû§Ö»ÐèÒªÓµÓÐÎļþµÄÖ»¶ÁȨÏÞ£¬Ò²Òª¶ÔÏàÓ¦µÄĿ¼¾ßÓÐдȨÏÞ£¬ÒòΪÐèÒªÔÚĿ¼Ï´´½¨Ëø¶¨Îļþ¡£ÓÐÒ»¸ö°ì·¨¿ÉÒÔ±ÜÃâ´ËÎÊÌ⣬¼´£ºÍ¨¹ýÅäÖÃÎļþ CVSROOT/config µÄ LockDir À´ÉèÖõ¥¶ÀµÄËø¶¨Ä¿Â¼£¬Îª¸Ãµ¥¶ÀµÄËø¶¨Ä¿Â¼ÉèÖøü¿í·ºµÄȨÏÞ¿ØÖÆ¡£

CVS ÌṩÁ˹¦ÄܵÄÀ©³ä½Ó¿Ú£ºCVSROOTĿ¼ÏµĹÜÀíÎļþ¡£ÕâЩÎļþÌṩÁËÏàÓ¦¹¦ÄÜÀ©³äµÄ½Ó¿Ú£¬²»µ«¿ÉÒÔÍê³É¾«Ï¸µÄȨÏÞ¿ØÖÆ£¬»¹ÄÜÍê³É¸ü¼Ó¸öÐÔ»¯µÄ¹¦ÄÜ¡£¹ØÓÚCVSROOTϵĽű¾£¬FreeBSD µÄÔ´´úÂë¾ÍÓÐÒ»¸ö·Ç³£ºÃµÄCVSROOT½Å±¾£¬¿É¹©ÎÒÃDzÎÕÕ£º

Setting up a CVS repository - the FreeBSD way¡£ÎÒÃÇ¿ÉÒÔ²ÎÕÕÕâ¸öÖ¸ÄÏ£¬¶¨ÖÆÎÒÃÇ×Ô¼ºµÄCVSROOT½Å±¾¡£

ÏÂÔØ FreeBSD µÄ CVSROOT ½Å±¾£¬¿ÉÒÔÒÔÄäÃûÓû§Á¬½Óµ½ FreeBSD µÄ CVS ·þÎñÆ÷£º

$ cvs -d :pserver:anoncvs@anoncvs.freebsd.org:2401/home/ncvs login   # ÊäÈëÃÜÂë anoncvs
$ cvs -d :pserver:anoncvs@anoncvs.freebsd.org:2401/home/ncvs co  CVSROOT-src

ÏÂÔØ»ñµÃ FreeBSD µÄ CVSROOT ´úÂëºó£¬ÐèÒª½øÐÐÏàÓ¦µÄ¶¨ÖÆ£¬È»ºó²ÅÄÜ checkin µ½×Ô¼ºµÄ CVSROOT Ŀ¼ÖС£Õâ¸ö²¹¶¡ÊÇÎÒ¶ÔÆäµÄÐ޸ĺͶ¨ÖÆ£ºpatch.txt¡£

¶¨Öƹý³Ì£º

  1. Éý¼¶CVS

    È·Èϰ²×°µÄCVS·þÎñÆ÷°æ±¾£¬Òª¸ßÓÚ 1.11.2 ¡£ÒòΪÎÒÃÇÒªÓõ½ÔÚ°æ±¾ 1.11.2 ²Å³öÏֵŦÄÜ£ºÄܹ»ÔÚ¼ì²écommit log ºóÖØÐ¶ÁÈë commit log£¬ÒÔʵÏÖ¶Ô commit log µÄ¸ñʽ»¯¡£

  2. ¶¨ÖÆ PERL Ä£¿é cfg.pm

    Îļþ CVSROOT/cfg.pm£¬ÊÇ perl½Å±¾µÄºËÐİü£¬¶ÔÆä×öÁËһЩ¸Ä¶¯£¬Ö÷ÒªÊÇÌí¼ÓÁ˽ûֹijЩÓû§·¢ËÍ Email¹¦ÄÜ£»»¹Ôö¼ÓÁ˲¿·Ö×Ó¹ý³Ì£¬²¿·ÖÊÇ´ÓÔ­ log_acum.pl ÖÐÒÆ¶¯¹ýÀ´£¬Ä¿µÄ½«ÕâЩº¯ÊýÉèÖÃΪģ¿éÄÚ²¿µÄº¯Êý±ãÓÚÆäËüÐèÒª·¢ËÍÓʼþµÄ½Å±¾µ÷Óã¬Èç½Å±¾ log_accum.pl ºÍ tagcheck ¶¼ÐèҪʹÓÃÕâЩÐÂÔö×Ó¹ý³Ì¡£

    ¶Ô½Å±¾ CVSROOT/cfg.pm µÄ¸Ä¶¯ÈçÏ£º

    diff -u -r1.1 -r1.2
    --- cfg.pm	14 Aug 2003 10:00:53 -0000	1.1
    +++ cfg.pm	15 Aug 2003 01:44:20 -0000	1.2
    @@ -17,9 +17,10 @@
     	$ADD_TO_LINE $AVAIL_FILE $CHECK_HEADERS $COMMITCHECK_EXTRA
     	@COMMIT_HOSTS $COMMITTER $DEBUG $DIFF_BLOCK_TOTAL_LINES $EXCLUDE_FILE
     	$FILE_PREFIX $IDHEADER $LAST_FILE @LOG_FILE_MAP $MAILADDRS $MAILBANNER
    -	$MAILCMD $MAIL_BRANCH_HDR $MAIL_ON_DIR_CREATION $MAIL_TRANSFORM
    +	$MAILCMD $MAIL_BRANCH_HDR @MAIL_MAP $MAIL_ON_DIR_CREATION $MAIL_TRANSFORM
     	$MINCVSVERSION $MAX_DIFF_SIZE $NO_DOS_LINEBREAKS $PID $PROG_CVS
     	$PROG_MV %TEMPLATE_HEADERS $TMPDIR $UNEXPAND_RCSID $WARN_HEADERS
    +	$BADSENDER_FILE
     );
     
     my $CVSROOT = $ENV{'CVSROOT'} || die "Can't determine \$CVSROOT!";
    @@ -52,7 +53,7 @@
     $PROG_MV =	'/bin/mv';		# mv(1)
     
     # The username of the committer.
    -$COMMITTER = $ENV{"LOGNAME"} || $ENV{'USER'} || getlogin
    +$COMMITTER = $ENV{"CVS_USER"} || $ENV{"LOGNAME"} || $ENV{'USER'} || getlogin   1
    		|| (getpwuid($<))[0] || sprintf("uid#%d",$<);
     
     
    @@ -83,6 +84,7 @@
     # commit to what.
     $AVAIL_FILE = "$CVSROOT/CVSROOT/avail";
     
    +$BADSENDER_FILE = "$CVSROOT/CVSROOT/blocksender"; 2
     
     ################
     ### logcheck ###
    @@ -208,6 +210,10 @@
     	'other'		=> '.*'
     );
     
    +@MAIL_MAP = (
    +	'nobody'	=> '.*'
    +);
    +
     # Include diffs of not greater than this size in kbytes in the
     # commit mail for each file modified. (0 = off).
     $MAX_DIFF_SIZE = 0;
    @@ -270,6 +276,64 @@
     	return @output;
     };
     
    +
    +############################################################
    +#
    +# Subroutines
    +#
    +############################################################
    +
    +# !!! Mailing-list and commitlog history file mappings here !!!
    +# This needs pulling out as a configuration block somewhere so
    +# that others can easily change it.
    +
    +sub get_log_name {
    +	my $dir = shift;	# Directory name
    +
    +
    +	for my $i (0 .. ($#cfg::LOG_FILE_MAP - 1) / 2) {
    +		my $log = $cfg::LOG_FILE_MAP[$i * 2];
    +		my $pattern = $cfg::LOG_FILE_MAP[$i * 2 + 1];
    +
    +		return $log if $dir =~ /$pattern/;
    +	}
    +
    +	return 'other';
    +}
    +
    +sub get_mail_name {
    +	my $dir = shift;	# Directory name
    +	my $CVSROOT = $ENV{'CVSROOT'};
    +	$dir =~ s,^$CVSROOT[/]?,,g;
    +	$dir .= "/" unless $dir =~ /\/$/;
    +	
    +	for my $i (0 .. ($#cfg::MAIL_MAP - 1) / 2) {
    +		my $email = $cfg::MAIL_MAP[$i * 2];
    +		my $pattern = $cfg::MAIL_MAP[$i * 2 + 1];
    +		return $email if $dir =~ /$pattern/;
    +	}
    +
    +	return $cfg::MAILADDRS;
    +}
    +
    +
    +# do not send email, if committer is in badsender file...
    +sub sendmail_acl_check {
    +	my $sendmail = 1;
    +	if (-e $cfg::BADSENDER_FILE)
    +	{
    +		open (BADSENDER, $cfg::BADSENDER_FILE) || die "open $cfg::BADSENDER_FILE: $!\n";
    +		while (<BADSENDER>) {
    +			if ($_ =~ /\b$cfg::COMMITTER\b/i)
    +			{
    +				$sendmail = 0;
    +				last;
    +			}
    +		}
    +	}
    +	
    +	return $sendmail;
    +}
     
     ######################################################################
     # Load the local configuration file, that allows the entries in this
    
    
    1

    Ôö¼Ó¼ì²é»·¾³±äÁ¿ CVS_USER¡£ÒÔÄܹ»ÕýÈ··´Ó³Ê¹Óà CVSROOT/password Îļþ½øÐÐÉí·ÝÑéÖ¤µÄÓû§Ãû¡£

    2

    ͨ¹ýÎļþ $BADSENDER_FILE ÉèÖÃÄÄЩÓû§¶Ô CVS ²Ù×÷²»±Ø·¢ËÍÓʼþ£¬Õâ¸ö¹¦ÄÜ¿ÉÒÔÓÃÓÚ×Ô¶¯±àÒëϵÄÌØ¶¨Óû§µÄCVS²Ù×÷²»±Ø·¢ËÍÓʼþ¡£

    [×¢Òâ]

    »¹ÔÚ¸ÃperlÄ£¿éÖÐÔö¼ÓÁ˼¸¸ö¹ý³Ì£¬¹©ÆäËü³ÌÐòµ÷Óá£

    Îļþ CVSROOT/cfg_local.pm ÓÃÓÚ¶ÔÄ£¿é cfg.pm ½øÐж¨ÖÆ£º

    hash$ diff -u -r1.1 cfg_local.pm
    --- cfg_local.pm	14 Aug 2003 10:00:53 -0000	1.1
    +++ cfg_local.pm	15 Aug 2003 03:09:39 -0000	1.3
    @@ -13,7 +13,7 @@
     ####################################################################
     ####################################################################
     
    -$CHECK_HEADERS = 1;
    +$CHECK_HEADERS = 0; 1
     $IDHEADER = 'FreeBSD';
     $UNEXPAND_RCSID = 1;
     
    @@ -29,25 +29,30 @@
     $MAILCMD = "/usr/local/bin/mailsend -H";
     $MAIL_BRANCH_HDR  = "X-FreeBSD-CVS-Branch";
     $ADD_TO_LINE = 0;
    -$MAILBANNER = "FreeBSD src repository";
    +$MAILBANNER = "My repository"; 2
     if (defined $ENV{'CVS_COMMIT_ATTRIB'}) {
       my $attrib = $ENV{'CVS_COMMIT_ATTRIB'};
       $MAILBANNER .= " ($attrib committer)";
     }
    +# The minimum version of cvs that we will work with.
    +$MINCVSVERSION = "1110200";  # 1.11.2 3
    +
    +$MAIL_ON_DIR_CREATION = 0; 4
     
     # Sanity check to make sure we've been run through the wrapper and are
     # now primary group 'ncvs'.
     #
    -$COMMITCHECK_EXTRA = sub {
    -	my $GRP=`/usr/bin/id -gn`;
    -	chomp $GRP;
    -	unless ( $GRP =~ /^ncvs$/ ) {
    -		print "You do not have group ncvs (commitcheck)!\n";
    -		exit 1;	# We could return false here.  But there's
    -			# nothing to stop us taking action here instead.
    -	}
    -	return 1;
    -};
    +
    +#$COMMITCHECK_EXTRA = sub { 5
    +#	my $GRP=`/usr/bin/id -gn`;
    +#	chomp $GRP;
    +#	unless ( $GRP =~ /^ncvs$/ ) {
    +#		print "You do not have group ncvs (commitcheck)!\n";
    +#		exit 1;	# We could return false here.  But there's
    +#			# nothing to stop us taking action here instead.
    +#	}
    +#	return 1;
    +#};
     
     # Wrap this in a hostname check to prevent mail to the FreeBSD
     # list if someone borrows this file and forgets to change it.
    @@ -91,6 +96,22 @@
    @LOG_FILE_MAP = ( 6
    	'CVSROOT'	=> '^CVSROOT/',
    	'distrib'	=> '^distrib/',
    	'doc'		=> '^doc/',
    	'ports'		=> '^ports/',
    	'www'		=> '^www/',
    
     	'other'		=> '.*'
     );
    +# CVSROOT is still shared between src, ports, doc at the moment. projects has
    +# its own CVSROOT.
    +@MAIL_MAP = ( 7
    +	'maillist1' => '^CVSROOT/',
    +	'maillist2' => '^src/',
    +	'cvsnone' => '.*',
    +); 
    +
    +@TAG_MAP = ( 8
    +	'jiangxin' => '^(release|mailstome).*',
    +); 
    +
    +# Email addresses of recipients of commit mail.
    +$MAILADDRS = 'cvsnone'; 9
    +
    +
     
     1; # Perl requires all modules to return true.  Don't delete!!!!
     #end
    
    1

    ÉèÖÃΪ0£¬²»Ç¿ÖÆÎļþÍ·°üº¬Ìض¨µÄCVS¹Ø¼ü×Ö¡£

    3

    ÉèÖð²×°µÄCVS·þÎñÆ÷µÄ×îµÍ°æ±¾Îª 1.11.2£»

    4

    ´´½¨Ä¿Â¼µÄʼþ£¬Ò²·¢ËÍÓʼþ¡£²Î¼û½Å±¾£ºCVSROOT/log_accum.pl¡£

    5

    ×¢Ê͸ú¯Êý£¬²»¼ì²éÓû§×é¡£

    6

    ¶¨ÖƸÃÊý×飬½« CVS Ä£¿éµÄ commit log ´æ´¢ÔÚ¶ÔÓ¦µÄÎļþÖС£

    7

    Ìí¼Ó¹þÏ£±í @MAIL_MAP£¬ÉèÖÃÄ£¿éºÍÓû§ÓʼþµØÖ·µÄ¶ÔÓ¦¹ØÏµ£¬ÏàӦģ¿éµÄ commit£¬Í¨¹ýÓʼþ֪ͨÏàÓ¦Óû§¡£

    8

    Ìí¼Ó¹þÏ£±í @TAG_MAP£¬ÉèÖÃijЩ¸ñʽµÄTAGÖ»Äܱ»Ä³Ð©Óû§¹ÜÀí¡£

    9

    È·Ê¡µÄÓʼþµØÖ·¡£¶ÔÓÚûÓÐÔÚ MAIL_MAP Êý×éÕÒµ½Æ¥ÅäµÄÓʼþµØÖ·£¬¼´Ê¹ÓøõØÖ·¡£È·Ê¡Îª 'nobody'¡£

  3. CVS ·þÎñÆ÷ÅäÖÃÎļþ£ºCVSROOT/config

    #SystemAuth=no                 1
    #LockDir=/var/lock/cvs         2
    #TopLevelAdmin=no
    LogHistory=TOFEWGCMAR          3
    RereadLogAfterVerify=always    4
    
    1

    Èç¹ûÉèÖà SystemAuth=no£¬Ôòֻͨ¹ý CVS ÌṩµÄÉí·ÝÑéÖ¤¡£

    2

    ¿ÉÒÔÓÃÀ´Ö¸¶¨µ¥¶ÀµÄËø¶¨Ä¿Â¼£¬ ±ã¿ÉÒÔ¸üÁé»îµÄÉèÖÃÊý¾Ý²Ö¿âµÄĿ¼ȨÏÞ¡£

    3

    ¶ÔËùÓÐʼþ¼Ç¼ÈÕÖ¾£¬Òà¿ÉдΪ LogHistory=all¡£

    4

    ÆôÓÃÖ»ÓÐÔÚ 1.11.2 °æ±¾²Å¾ßÓÐµÄ commit log ÖØÐ´¹¦ÄÜ¡£

  4. Îļþ CVSROOT/cvsignore

    ÉèÖð汾¿ØÖƹý³ÌÖУ¬ÐèÒªºöÂÔµÄÎļþ¡£ÕâЩÎļþ½«²»±»ÏÔʾΪδ֪״̬£¨"?"£©¡£È磺

    *.db
    *.info
    *.[Sp]o
    *.core
    *.aps
    *.clw
    *.exe
    *.ncb
    *.obj
    *.opt
    *.plg
    Debug
    Release
    
    [×¢Òâ]

    Òà¿ÉÓÉÿ¸öĿ¼ÏµÄÎļþ .cvsignore À´¿ØÖÆ£»

    ¶ÔÓÚ WinCVS£¬ÔòÓÉÎļþ C:\.cvsignore À´¿ØÖÆ£¬Èç¹û½« HOME ·¾¶ÉèÖÃΪ C:\ µÄ»°¡£

  5. Îļþ CVSROOT/cvswrappers

    Æ¥ÅäÎļþÃû£¬²¢×÷ÏàÓ¦´¦Àí¡£È磺 -kb ¼´ÒÔ¶þ½øÖÆ·½Ê½´¦ÀíÎļþ¡£

    *.gif -k 'b'
    *.GIF -k 'b'
    *.jpg -k 'b'
    ...
    
  6. Îļþ CVSROOT/modules

    ÉèÖÃÊý¾Ý²Ö¿âÖеÄÄ£¿éÃû£¬¿ÉÒÔͨ¹ýÃüÁ¡°cvs co -c¡±²ì¿´µ±Ç°Êý¾Ý²Ö¿â£¨repository£©Öаüº¬µÄÄ£¿é/¹¤³ÌÃû³Æ¡£Ò²¿ÉÒÔÔÚµ÷Õû·þÎñÆ÷¶ËĿ¼½á¹¹Ê±£¬ÉèÖà modules À´±£³ÖºÍÒÔǰÉèÖõļæÈÝÐÔ¡£

    CVSROOT	CVSROOT
    module1	module2 &module3
    
  7. Îļþ CVSROOT/checkoutlist

    ÁÐÔÚ checkoutlist ÖеÄÎļþ£¬ÔÚ checkin ºó£¬Äܹ»×Ô¶¯ÔÚ·þÎñÆ÷ CVSROOT Ŀ¼ÖÐÖØ½¨¡£

    #access             1
    avail
    cfg.pm
    cfg_local.pm
    commit_prep.pl
    commitcheck
    cvs_acls.pl
    exclude
    log_accum.pl
    logcheck
    options
    rcstemplate
    tagcheck
    unwrap
    wrap
    
    1

    access Îļþ¹© FreeBSD µÄcvs wrapper³ÌÐòµ÷Ó㬽øÐÐȨÏÞ¿ØÖÆ£¬Èç²»ÐèÒª¸Ã¹¦ÄÜ×¢Ê͵ô£¬ºöÂÔ¸ÃÎļþ¡£

  8. Îļþ CVSROOT/notify

    µ±Óû§ÉèÖÃÁË watch Ò»¸öÎļþ£¬¿ÉÒÔ¶¨ÖƸÃÎļþ½øÐпØÖÆ¡£Ôڴ˸ÃÎļþδ±»Óõ½¡£

  9. Îļþ CVSROOT/commitinfo

    Commit ʼþÒª´¥·¢Èý¸ö½Å±¾Îļþ£¬ÒÀ´ÎÊÇ commitinfo, verifymsg, loginfo¡£ÆäÖÐÏȱéÀúÕû¸öĿ¼Ê÷¶ÔËùÓÐÐèÒª commit µÄÎļþÖ´ÐÐ commitinfoÎļþ¡£ÔÙ·Ö±ðÕë¶Ôÿһ¸öĿ¼ִÐÐ verifymsg, loginfo ½Å±¾¡£

    commitinfo »áµ÷Óà commitcheck ½Å±¾£¬Íê³ÉµÄ¹¦ÄÜ£ºÍ¨¹ýÓû§Ö÷»úÃû¡¢Óû§ÃûÀ´¼ì²éȨÏÞ£»È·ÈÏCVS·þÎñÆ÷µÄ°æ±¾ºÅ²»µÍÓÚij¸ö°æ±¾£»½«±éÀúĿ¼Ê÷µÄ½á¹û£¨×îºóÒ»¸öĿ¼Ãû£©¼Ç¼ÏÂÀ´£¬ÒÔ±ã½ÓÏÂÀ´ÔËÐÐ verifymsg, loginfoµÄ½Å±¾Äܹ»È·ÈÏÔËÐнáÊøµÈ¡£

    Ïà¹ØÎļþ£ºCVSROOT/commitcheck£¬CVSROOT/cvs_acls.pl£¬CVSROOT/avail£¬CVSROOT/commit_prep.pl£¬CVSROOT/exclude£¬CVSROOT/cfg.pm£¬CVSROOT/cfg_local.pm¡£

    Îļþ CVSROOT/avail£¬±»½Å±¾ cvs_acls.pl ¶ÁÈ¡£¬ÔÙ±»½Å±¾ commitcheck µ÷Óã¬ÓÃÒÔ¾«Ï¸¿ØÖÆÈ¨ÏÞ¡£ÀýÈ磺

    
    group|meisters|peter,jdp,markm,joe
    # Pick up the list of bad users from ncvs/CVSROOT/badcommitters  See that
    # file for details
    group|penaltybox|!badcommitters
    
    unavail
    avail||CVSROOT
    avail||distrib
    avail||doc
    avail||ports
    avail||src
    unavail||src/contrib/binutils,src/contrib/file
    avail|obrien|src/contrib/binutils,src/contrib/file
    unavail||src/contrib/tcpdump
    avail|fenner,nectar|src/contrib/tcpdump
    avail||www
    avail|:meisters
    unavail|:penaltybox
    
    
  10. Îļþ CVSROOT/verifymsg

    ÓÃÓÚ¼ì²éºÍ¸ñʽ»¯ commit log¡£½ûÖ¹ÔÚ°æ±¾¿ØÖÆÌύʱ£¬Ê¹ÓÃ¿ÕµÄ commit log¡£¶ÔÓÚ wincvs ÔÚÓû§²»Ìá½» commit log ʱ£¬»á×Ô¶¯Ê¹Óá°no message¡±×÷Ϊcommit log¡£ÎªÁ˽ûÖ¹¸ÃÇé¿ö·¢Éú£¬ÐèÒª¶¨ÖƸýű¾£º

    Ïà¹ØÎļþ£ºCVSROOT/logcheck¡£

    bash$ diff -u -r1.1 logcheck
    --- logcheck	14 Aug 2003 10:00:53 -0000	1.1
    +++ logcheck	15 Aug 2003 02:01:37 -0000	1.2
    @@ -47,8 +47,10 @@
     
     # Remove leading and trailing blank lines.  (There will be at most
     # one because of the duplicate removal above).
    +local $^W = 0;                        1
     shift @log_in if $log_in[0] eq "";
     pop @log_in if $log_in[-1] eq "";
    +local $^W = 1;
     
     # Scan through the commit message looking for templated headers
     # as defined in the configuration file, and rcstemplate.
    @@ -104,6 +106,9 @@
     # completely empty.  This is a bug in cvs.
     my $log = "@log_in";
     die "Log message contains no content!\n" if $log =~ /^\s*$/;
    +
    +# commit without commit log using WINCVS , will automatically provide commit log as "no message".
    +die "Log message contains no content using WINCVS!\n" if $log =~ /^no message$/ or $log =~ /^\.+$/; 2
    
    1

    Òþ²ØÓï·¨¾¯¸æ£»

    2

    ½ûÖ¹ÆäËüµÄÎÞÒâÒåµÄcommit log£¬ÆäÖÐÒ»¸öÊÇ WINCVS ȱʡµÄ COMMITLOG£¬Ò»¸öÊDZ¾ÈËÒÔÇ°ËæÒâµÄCOMMITLOG·ç¸ñ¡£

  11. Îļþ CVSROOT/loginfo

    ½« commit log ·ÖÃűðÀà´æ´¢ÔÚĿ¼ CVSROOT/commitlogs Ï£¬²¢Í¬Ê±Í¨¹ýÓʼþÍâ·¢¡£ÎªÁË·ÀÖ¹Ò»´Îʼþ´¥·¢¶à´ÎµÄÓʼþÍâ·¢£¬¸Ã½Å±¾ÀûÓõ½ commitinfo µÄÔËÐнá¹û£¬Ö»ÓÐÈ·Èϵ½ÁËĿ¼Ê÷µÄ×îºó£¬²Å·¢ËÍÓʼþ¡£ Ä£¿éºÍ´æ´¢ÈÕÖ¾ÎļþÒÔ¼°Óû§ÓʼþÁбíÔÚÎļþCVSROOT/cfg_local.pmÖж¨Òå¡£

    Ïà¹ØÎļþ£ºCVSROOT/log_accum.pl£¬CVSROOT/cfg.pm £¬CVSROOT/cfg_local.pm¡£

    Îļþ CVSROOT/loginfo£¬µ÷Óýű¾ log_accum.pl£¬²¢´«µÝÎļþÃûµÈ²ÎÊý£¬ÓÃÓÚ×éÖ¯ÈÕÖ¾ºÍ·¢ËÍÓʼþ¡£

    Ô­ FreeBSD ½Å±¾´æÔÚÒ»¸ö BUG£¬Èç¹ûÎļþÃû»òÕßĿ¼ÃûÖдæÔÚ¿Õ¸ñ£¬½Å±¾ÔËÐв»Õý³££¬³ö´í£¬µ¼Ö²»ÄÜ×éÖ¯ºÍ·¢ËÍÓʼþ£¬Õâ¸ö Bug ÐÞÕý·½·¨ÈçÏ£º

    ÔÚÎļþ CVSROOT/loginfoÖе÷Óà log_accum.pl ʱʹÓõIJÎÊýÓÉÔ­À´µÄ %s ÐÞ¸ÄΪ %{,,,s}£¬¼´¼ÓÈëÈý¸öÁ¬ÐøµÄ¶ººÅ×÷Ϊ·Ö¸ô·û£¬·ñÔòʹÓÿոñ×÷Ϊ·Ö¸ô·û£¬ÄÑÒÔÇø·ÖÊÇÎļþµÄ·Ö¸ô·û»¹ÊÇ·¾¶»òÎļþÃûÖеĿոñ¡£

    bash$ tail -1 loginfo
    DEFAULT         $CVSROOT/CVSROOT/log_accum.pl %{,,,s}
    

    ¶ÔÎļþ CVSROOT/log_accum.pl µÄÐÞÕýÈçÏ£º

    bash$ diff -u -r1.1 log_accum.pl
    
    --- log_accum.pl	14 Aug 2003 10:00:53 -0000	1.1
    +++ log_accum.pl	15 Aug 2003 02:00:35 -0000	1.2
    @@ -47,6 +47,7 @@
     my $LOG_FILE      = "$BASE_FN.log";
     my $SUMMARY_FILE  = "$BASE_FN.summary";
     my $LOGNAMES_FILE = "$BASE_FN.lognames";
    +my $MAILNAMES_FILE = "$BASE_FN.mailnames"; 1
     my $SUBJ_FILE     = "$BASE_FN.subj";
     my $TAGS_FILE     = "$BASE_FN.tags";
     my $DIFF_FILE     = "$BASE_FN.diff";
    @@ -233,7 +234,8 @@
     	while (<RCS>) {
     		if (/^[ \t]*Repository revision/) {
     			chomp;
    -			my @revline = split;
    +			my @revline = split(/[ \t]+/, $_, 5); 2
    +			shift @revline while($revline[0] eq "");
     			$revision = $revline[2];
     			$revline[3] =~ m|^$CVSROOT/+(.*),v$|;
     			$rcsfile = $1;
    @@ -383,20 +385,6 @@
     # !!! Mailing-list and commitlog history file mappings here !!!
     # This needs pulling out as a configuration block somewhere so
     # that others can easily change it.
    -sub get_log_name { 3
    -	my $dir = shift;	# Directory name
    -
    -
    -	for my $i (0 .. ($#cfg::LOG_FILE_MAP - 1) / 2) {
    -		my $log = $cfg::LOG_FILE_MAP[$i * 2];
    -		my $pattern = $cfg::LOG_FILE_MAP[$i * 2 + 1];
    -
    -		return $log if $dir =~ /$pattern/;
    -	}
    -
    -	return 'other';
    -}
    -
     
     sub do_changes_file {
     	my @text = @_;
    @@ -408,11 +396,17 @@
     		$unique{$category} = 1;
     
     		my $changes = "$CVSROOT/CVSROOT/commitlogs/$category";
    -		open CHANGES, ">>$changes"
    -			or die "Cannot open $changes.\n";
    -		print CHANGES map { "$_\n" } @text;
    -		print CHANGES "\n\n\n";
    -		close CHANGES;
    +		if (open CHANGES, ">>$changes")
    +		{
    +			print CHANGES map { "$_\n" } @text;
    +			print CHANGES "\n\n\n";
    +			close CHANGES;
    +		}
    +		else 4
    +		{
    +			print "Cannot open $changes.\n";
    +		}
    +
     	}
     }
     
    @@ -420,22 +414,29 @@
     sub mail_notification {
     	my @text = @_;
     
    -# This is turned off since the To: lines go overboard.
    -# Also it has bit-rotted since, and can't just be switched on again.
    -# - but keep it for the time being in case we do something like cvs-stable
    -#	my @mailaddrs = &read_logfile($LOGNAMES_FILE);
    -#	print(MAIL 'To: cvs-committers' . $dom . ", cvs-all" . $dom);
    -#	foreach $line (@mailaddrs) {
    -#		next if ($unique{$line});
    -#		$unique{$line} = 1;
    -#		next if /^cvs-/;
    -#		print(MAIL ", " . $line . $dom);
    -#	}
    -#	print(MAIL "\n");
    +	if (! &cfg::sendmail_acl_check()) 5
    +	{
    +		print "mail sent from $cfg::COMMITTER is blocked.\n";
    +		return 0;	
    +	}
    +
    +	my %unique = ();
    +	my @mailaddrs = &read_logfile($MAILNAMES_FILE);
    +	# ok, this is kinda hokey, but I need to break up lines with multiple addresses
    +	my $fu = join(" ", @mailaddrs);
    +	@mailaddrs = split " ", $fu;
    +
    +	my $to = "";
    +	foreach my $category (@mailaddrs) {
    +		next if ($unique{$category});
    +		$unique{$category} = 1;
    +
    +		$to .= " " unless $to eq "";
    +		$to .= $category;
    +	}
     
     	my @email = ();
     
    -	my $to = $cfg::MAILADDRS;
     	print "Mailing the commit message to '$to'.\n";
     
     	push @email, "To: $to" if $cfg::ADD_TO_LINE;
    @@ -497,10 +498,14 @@
     	}
     
     	# Send the email.
    -	open MAIL, "| $cfg::MAILCMD $to"
    -	    or die "Please check $cfg::MAILCMD.";
    -	print MAIL map { "$_\n" } @email;
    -	close MAIL;
    +	if(fork() == 0)
    +	{
    +		open MAIL, "| $cfg::MAILCMD -F $cfg::COMMITTER $to" 6
    +	    		or die "Please check $cfg::MAILCMD.";
    +		print MAIL map { "$_\n" } @email;
    +		close MAIL;
    +	}
    +	exit(0);
     }
     
     
    @@ -634,8 +639,9 @@
     #
     # Initialize basic variables
     #
    +my $separator=",,,"; 7
     my $input_params = $ARGV[0];
    -my ($directory, @filenames) = split " ", $input_params;
    +my ($directory, @filenames) = split / ${separator}/, $input_params; 8
     #@files = split(' ', $input_params);
     
     my @path = split('/', $directory);
    @@ -660,8 +666,9 @@
     }
     
     # Was used for To: lines, still used for commitlogs naming.
    -&append_line($LOGNAMES_FILE, &get_log_name("$directory/"));
    -&append_line($SUBJ_FILE, "$directory " . join(" ", sort @filenames));
    +&append_line($LOGNAMES_FILE, &cfg::get_log_name("$directory/")); 9
    +&append_line($MAILNAMES_FILE, &cfg::get_mail_name("$directory/")); 10
    +&append_line($SUBJ_FILE, "$directory/(" . join(",", sort @filenames) .") "); 11
     
     #
     # Check for a new directory first.  This will always appear as a
    @@ -697,7 +704,7 @@
     
     	&do_changes_file(@text);
     	&mail_notification(@text);
    -	system("/usr/local/bin/awake", $directory);
    +	# system("/usr/local/bin/awake", $directory);
     	&cleanup_tmpfiles();
     	exit 0;
     }
    @@ -742,7 +749,28 @@
     	}
     
     	# otherwise collect information about which files changed.
    -	my @files = split;
    +	my @tmpfiles = split;
    +	my $strname = "";
    +	my @files;
    +	while (my $item = shift(@tmpfiles))
    +	{
    +		if ($strname eq "") 
    +		{
    +			$strname = $item;
    +		} 
    +		else	
    +		{
    +			$strname .= " $item";
    +		} 
    +		for (my $i=0; $i<=$#filenames; $i++)
    +		{
    +			if ($strname eq $filenames[$i])
    +			{
    +				push (@files, $strname);
    +				$strname = "";
    +			}
    +		}
    +	}
     	push @{ $changed_files{$tag} },	@files if $state == $STATE_CHANGED;
     	push @{ $added_files{$tag} },	@files if $state == $STATE_ADDED;
     	push @{ $removed_files{$tag} },	@files if $state == $STATE_REMOVED;
    @@ -896,7 +924,7 @@
     	&mail_notification(@log_msg);
     }
     
    -system("/usr/local/bin/awake", $directory);
    +# system("/usr/local/bin/awake", $directory);
     &cleanup_tmpfiles();
     exit 0;
     # EOF
    
    1

    ´æ´¢ÓʼþµØÖ·µÄÁÙʱÎļþ£»

    2

    ±ÜÃâµ±ÎļþÃûÖаüº¬¿Õ¸ñʱ£¬$rcsfile »ñȡʧ°Ü£»

    3

    ¸Ãº¯Êý±»Òƶ¯µ½ cfg.pm Ä£¿é£¬³ÉΪģ¿éµÄ×Ó¹ý³Ì£»

    4

    ûÓÐÕÒµ½ÈÕÖ¾¼Ç¼Îļþ£¬·¢³ö¾¯¸æ£¬²»Öжϣ»

    5

    ¶ÁÈ¡¹þÏ£±í @MAIL_MAP£¬»ñÈ¡¸Ä¶¯´úÂëÐèÒª·¢Ë͵½µÄÓʼþµØÖ·£»

    6

    ·¢ËÍÓʼþ£¬ÉèÖ÷¢¼þÈËΪ $cfg::COMMITTER£»

    7

    ×ֶηָô·û£¬Ó¦ºÍ loginfo ÎļþÖÐÖ¸¶¨µÄÏòÆ¥Å䣡

    8

    ʹÓÃ×Ô¶¨ÒåµÄ×ֶηָô·û£¬ÒÔ±ÜÃâÓÉÓÚÎļþÃûÖгöÏÖ¿Õ¸ñµ¼ÖÂÎļþÃû»ñȡʧ°Ü£»

    9

    ¸Ãº¯ÊýÒѾ­Òƶ¯µ½Ä£¿é cfg.pm£»

    10

    ÉèÖÃÊÕ¼þÈËÃûµ¥£»

    11

    ÉèÖÃÓʼþ±êÌ⣻

  12. Îļþ CVSROOT/taginfo

    ÔÚÖ´ÐÐ tag/rtag ÃüÁîǰִÐиýű¾£¬Èç¹û½Å±¾·µ»Ø·ÇÁãÖµ£¬tag/rtag ¶¯×÷È¡Ïû¡£ Ïà¹Ø½Å±¾£ºCVSROOT/tagcheck¡£¸ºÔð¶ÔÌí¼Ó/ɾ³ý TAG ʼþ½øÐпØÖÆ——ÔÊÐí/½ûÖ¹/·¢ËÍÓʼþ¡£

    ÓÉÓÚ tag/rtag ʼþ²»Ïó commit ʼþ£¬²»ÊÇͨ¹ý¶à¸ö½Å±¾µÄÅäºÏÍê³É£¬¶øÊÇֻͨ¹ýÒ»¸ö½Å±¾ taginfo Íê³É¡£Õâ¾Í³öÏÖÒ»¸öÎÊÌ⣺Èç¹ûΪһ¸öĿ¼Ê÷´òÉÏTAG£¬Ôò¿ÉÄܶà´ÎÖ´Ðнű¾£¬¿ÉÄÜÒª¶à´Î´¥·¢Óʼþ·¢ËÍ¡£ÎҵĽâ¾ö°ì·¨ÊÇ£¬¸ù¾ÝTAG½ø³ÌµÄ PID È·¶¨ÔÚÕû¸ö¹ý³ÌΨһµÄÎļþÃû£¬½«ÈÕÖ¾¼Ç¼µ½¸ÃÎļþÖУ¬taginfo ½Å±¾±¾ÉíÎÞ·¨ÖªµÀÊÇ·ñ½áÊø£¬¶øÊÇϵͳͨ¹ý crontab ¶¨ÆÚÖ´Ðнű¾ CVSROOT/checkmailspool.shÀ´¼ì²éÊÇ·ñÓÐÍê³ÉµÄ tag ÓʼþÐèÒªÍâ·¢¡£

    
    #!/usr/bin/perl -w
    #
    # Author: Jiang Xin
    # Reference: http://www.worldhello.net/
    #
    
    use strict;
    use lib $ENV{CVSROOT};
    use CVSROOT::cfg;
    
    
    #############################################################
    #
    # Main Body
    #
    # TAG  add/mov/del  repo  files...
    # $1   $2           $3    $4   ...
    #
    ############################################################
    
    my $tag = shift;
    my $action = shift;
    my $repos = shift;
    my $fileitem = "";
    my $filerev= "";
    my $filelist = "";
    
    my $uid = $cfg::COMMITTER;
    my $userlist = "";
    my $pattern = "";
    my $permission = 1;
    my $to = "";
    
    my $tmpstr = &cfg::get_mail_name($repos);
    $tmpstr =~ s/\@/\./g ;
    $tmpstr="nobody" unless $tmpstr;
    my $MAILFILE = "/var/spool/cvsmail/cvs.tag.$tmpstr.$cfg::PID"; 1
    
    die "Usage: tagcheck tag action repos files...\n" unless $repos;
    
    for my $i (0 .. ($#cfg::TAG_MAP - 1) / 2) { 2
    	$userlist = $cfg::TAG_MAP[$i * 2];
    	$pattern = $cfg::TAG_MAP[$i * 2 + 1];
    	
    	if ($tag =~ /$pattern/i)
    	{
    		if ($userlist =~ /\b$uid\b/i)
    		{
    			$permission=1;
    			last;
    		}
    		else
    		{
    			$permission=0;
    			last;
    		}
    	}
    }
    
    if ($permission == 0)
    {
    	# normal users can not do this.
    	print STDERR "User \"$cfg::COMMITTER\" canot perform this operation!\n";
    	print STDERR "Only users: $userlist, can handle tag patterm: \"$pattern\"!\n";
    }
    
    while ($fileitem = shift)
    {
            $filerev = shift;
            $filelist = sprintf("%s\t%-24s:\t%s\n", $filelist, $fileitem, $filerev);
    }
    
    print "save message in spool `dirname $MAILFILE`...\n";
    
    my @email = ();
    
    if (! -e $MAILFILE )
    {
    	$to = &cfg::get_mail_name($repos); 3
    	push @email, "From: $uid<$uid>";
    	push @email, "To: $to";
    	$tmpstr = sprintf("Date: %s", `date -R`);
    	chomp $tmpstr;
    	push @email, $tmpstr;
    
    	if ($permission == 0)
    	{
    		push @email, "Subject: cvs tag FAILED! ($action $tag on $repos)";
    	}
    	else
    	{
    		push @email, "Subject: cvs tag success: $action $tag on $repos";
    	}
    
    	push @email, "";
    
    	delete $ENV{'TZ'};
    	$tmpstr = sprintf("%-11s:    %-8s", "Author", $cfg::COMMITTER);
    	push @email, $tmpstr;
    	$tmpstr = sprintf("%-11s:    %-8s", "Date", `/bin/date +"%Y/%m/%d %H:%M:%S %Z"`);
    	chomp $tmpstr;
    	push @email, $tmpstr;
    	$tmpstr = sprintf("%-11s:    %-8s", "Tag", $tag);
    	push @email, $tmpstr;
    	$tmpstr = sprintf("%-11s:    %-8s", "Operation", $action);
    	push @email, $tmpstr;
    
    	push @email, "";
    	push @email, "  $cfg::MAILBANNER", "" if $cfg::MAILBANNER;
    }
    
    if ($permission == 0)
    {
    	push @email, "Permission denied: $action $tag on $repos !";
    	push @email, "--------------------------------------------------";
    }
    else
    {
    	$tmpstr = sprintf("%-11s:    %-8s", "Repository", $repos);
    	push @email, $tmpstr;
    	push @email, $filelist if $filelist;
    }
    
    #save mail to spool
    open MAIL, ">> $MAILFILE "
    	or die "Cannot open file $MAILFILE for append.";
    print MAIL map { "$_\n" } @email;
    close MAIL;
    
    if ($permission == 0)
    {
    	exit 1
    }
    else
    {
    	exit 0
    }
    
    
    1

    È·¶¨½ø³ÌΨһµÄÎļþÃû³Æ£»

    2

    @cfg::TAG_MAP Êý×鶨ÒåÁËÐèҪȨÏÞ¿ØÖÆµÄ TAG Ãû³Æ£¬ÒÔ¼°ÊÚȨÈËÁÐ±í¡£ÊÜÏÞµÄTAGÃû³Æ¶ÔÓ¦ÓÚÈí¼þ¿ª·¢ÖеÄÀï³Ì±®£¬ÒªÑϸñµÄȨÏÞ¿ØÖÆ¡£ºÍ¸ÃģʽƥÅäµÄ tag£¬Ö»Äܱ»ÊÚȨÈ˲Ù×÷£¬ÆäËüÃû³ÆµÄ TAG£¬ËùÓÐÓû§¶¼¿ÉÒÔ²Ù×÷¡£

    3

    ÓʼþµØÖ·Òà´Ó MAIL_MAP Êý×éÖлñÈ¡£»

    Îļþ CVSROOT/checkmailspool.sh£¬¼ÓÈëµ½ crontab Öж¨ÆÚÖ´ÐУ¬¼ì²é tagcheck Éú³ÉµÄÓʼþ¡£

    
    #!/bin/sh
    # checkmailspool.sh
    # Auther: Jiang Xin
    #
    # $CVSMAILPATH (cvs mail spool) is a spool directory created by user, 
    # and cvs tag message will store in it.
    # run this script timely to check cvsmail spool and send messages...
    # please put this script in crontab. 
    
    
    CVSMAILPATH=/var/spool/cvsmail
    if [ ! -d $CVSMAILPATH ]; then
    	mkdir -p $CVSMAILPATH
    	chmod 777 $CVSMAILPATH
    fi
    
    cd $CVSMAILPATH
    for i in `ls `; do
    	pid=`echo $i| sed -e "s/.*\.\([0-9]*\)$/\1/"`
    	
    	xxx=0
    	
    	while ps -p $pid>/dev/null; do
    		xxx=`expr $xxx + 1`
    		if [ $xxx -gt 10 ]; then
    			break
    		fi
    		sleep 3
    		echo waiting $pid, $xxx times ...
    	done
    	echo -e "\n\n========================================" >> $i
    	echo -e "End\n" >> $i
    	cat $i | sendmail -oi -oem -odb -t
    	rm -f $i
    done
    
    
  13. Çå³ýCVSROOT²úÉúµÄÁÙʱÎļþ

    ÒÔÉÏ CVSROOT ½Å²½ÔÚÖ´Ðйý³ÌÖн«»áÔÚÁÙʱĿ¼ÖвúÉúºÜ¶àÁÙʱÎļþ£¬Èç¹û²»¼ÓÒÔÇåÀí£¬²»µ«»áÀË·Ñ´ÅÅ̿ռ䣬¸üÓпÉÄܵ¼Ö·¢ËÍÕŹÚÀî´÷µÄ´íÎóÓʼþ¡£ÔÚ crontab ÖÐÅäÖÃÿ¸ôÒ»¸öСʱִÐÐÒ»±éÒÔϽű¾£º

    
    #/bin/sh
    
    cd /tmp
    ls \#cvs.files.* | sed -e 's/\#cvs.files.\([0-9]*\)\..*$/\1/g' | sort -u | \
    while read xxx; do if ps --pid $xxx>/dev/null 2>&1; then continue; fi ; \
        rm -f /tmp/\#cvs.files.$xxx.* ; done
    
    

2.1.5. »ùÓÚ Linux ACL µÄȨÏÞ¿ØÖÆ

Linux ACL µÄÏà¹Ø×ÊÔ´²Î¼û£º

ΪʲôҪʹÓà ACL ÄØ£¿ÒòΪ¶ÔÓÚÒ»¸ö´óµÄCVSÏîÄ¿£¬ÐèÒª¶Ô¸÷¸öÄ£¿é½øÐо«È·µÄȨÏÞ¿ØÖÆ£¬Èç¹ûÖ»¿¿´«Í³µÄUnixµÄĿ¼ȨÏÞ¿ØÖÆ user,group,other ½«»á´ó´óÔö½øÏµÍ³¹ÜÀíÔ±µÄ¸ºµ££¬ÏîÄ¿µÄ¡°³¬¼¶Óû§¡±ÐèҪͬʱÊôÓÚ¶à¸öÓû§×飬²Å¿ÉÒÔ·ÃÎÊËùÓеÄÄ£¿é¡£

ͻȻÓÐÒ»Ì죬·¢ÏÖȨÏÞÉèÖò»ÁéÁË£¬¾­¹ý²âÊÔ£¬Ô­À´ linux 2.4 ÄÚºËÒ»¸öÓû§×î¶àÊôÓÚ 32 ¸öÓû§×飡¿´À´ÊÇÁí±Ùõè¾¶µÄʱºòÁË¡£¾ÃÎÅ acl µÄ´óÃû£¬¶ÔÓÚ2.4ÄÚºËÊÇÒÔÄں˲¹¶¡·½Ê½´æÔÚ£¬2.6ÄÚºËÒѾ­¼¯³É½øÈ¥ÁË£¬Õâ¿ÉÕæÊÇÒ»¸öºÃÏûÏ¢¡£(×¢Òâ: 2.6.10 Äں˵ÄACL´æÔÚÒ»¸ö´óBUG£¬ÒÑÔÙ 2.6.11-rc4 ÄÚºËÖÐÐÞÕý¡£¾ßÌå²Î¼ûÎÒµÄwiki =)

ËäȻʹÓà acl£¬¶ÔÓÚCVSÀ´Ëµ£¬Ç°ÃæÌáµ½µÄCVSȨÏÞ¿ØÖÆÒÀÈ»ÊÔÓ᣼´£º

  • ÏîÄ¿Ïà¹ØµÄËùÓÐÓû§±ØÐë¶ÔCVS¹¤³ÌĿ¼ÒÔ¼°¹¤³ÌµÄCVSROOTĿ¼¾ßÓÐ r-x ȨÏÞ£»

  • ËùÓÐÓû§¶ÔÎļþ CVSROOT/history, CVSROOT/val-tags, ºÍĿ¼ CVSROOT/commitlogs/(Èç¹û°²×°ÁËCVSROOTÀ©Õ¹)£¬±ØÐëÓµÓÐдȨÏÞ£»

  • ÉèÖÃĿ¼µÄ setgid λ£¬Ê¹Óû§´´½¨Ä¿Â¼µÄʱºò£¬ÐÂĿ¼Äܹ»±£³ÖÉÏÒ»¼¶Ä¿Â¼µÄÓû§ÊôÖ÷£»

  • CVSROOT ϵĽű¾£¬ÐèÒªÇå³ýÆä setuid, setgid 룬·ñÔò½Å±¾Ö´ÐÐʱ±¨´í£»

  • Ϊ¹¤³ÌÌí¼ÓȨÏÞʱ£¬²»ÒªÐÞ¸Ä symbol link ÎļþȨÏÞ£¬ÒÔÃ⻥Ïา¸Ç£»

    ÀýÈç: ¶à¸öÏîÄ¿¹²Ïíͬһ¸ö passwd Îļþ¡£Ö´ÐÐ setfacl ÐèÒª¼ÓÉÏ -P ²ÎÊý£»

Ò»¸öȨÏÞÉèÖýű¾Ä£¿é£º


#!/bin/sh
# acl.sh version 0.9

SETFACLCMD="setfacl -P"
CVSHOMEDIR=/cvshome

##############################################################################
#Declare Function:

####################################################################
# /etc/group ¼Ç¼:
#    tst_root:x:682:u_tst_root
#    tst_doc:x:705:u_tst_doc
#    tst_src:x:683:u_tst_src
#    tst_src_1:x:706:u_tst_src_1
#    tst_src_2:x:707:u_tst_src_2
####################################################################
apply_acl_test()
{
	if [ $# -ne 1 ];then
		echo format: `basename $0` project
		exit 1
	fi
	
	project=$1
	if [ ! -d $project ]; then
		echo "Can not find project: $project."
	fi
		

	# tst_root ×é¿ÉÒÔ·ÃÎÊËùÓÐÄ£¿é£¬°üÀ¨ CVSROOT µÄдȨÏÞ
	$SETFACLCMD -d -R -m g:tst_root:rwx  $project
	$SETFACLCMD    -R -m g:tst_root:rwx  $project
	
	# tst_src ×éÄܹ»·ÃÎÊËùÓдúÂë¡¢Îĵµ
	$SETFACLCMD -d -R -m g:tst_src:rwx   $project/src $project/doc
	$SETFACLCMD    -R -m g:tst_src:rwx   $project/src $project/doc
	
	# ËùÓÐÓû§¾ùÄÜ·ÃÎÊÎĵµ
	$SETFACLCMD -d -R -m g:tst_src:rwx,g:tst_src_1:rwx,g:tst_src_2:rwx,g:tst_doc:rwx   $project/doc
	$SETFACLCMD    -R -m g:tst_src:rwx,g:tst_src_1:rwx,g:tst_src_2:rwx,g:tst_doc:rwx   $project/doc
	
	
	# ÐèҪȨÏÞ¿ØÖƵÄС×飬ȱʡ·ÃÎÊȨÏÞ
	$SETFACLCMD -d -R -m g:tst_src_1:rwx,g:tst_src_2:rwx   $project/src
	$SETFACLCMD    -R -m g:tst_src_1:rwx,g:tst_src_2:rwx   $project/src
	
	# ÉèÖÃÃô¸ÐÄ£¿éµÄȨÏÞ
	$SETFACLCMD -d -R -x g:tst_src_1,g:tst_src_2      $project/src/mod1 $project/src/mod2
	$SETFACLCMD    -R -x g:tst_src_1,g:tst_src_2      $project/src/mod1 $project/src/mod2
	$SETFACLCMD -d -R -m g:tst_src_1:rwx  $project/src/mod1
	$SETFACLCMD    -R -m g:tst_src_1:rwx  $project/src/mod1
	$SETFACLCMD -d -R -m g:tst_src_2:rwx  $project/src/mod2
	$SETFACLCMD    -R -m g:tst_src_2:rwx  $project/src/mod2

	# ÐèҪȨÏÞ¿ØÖƵÄС×飬ÐèÒªÄܹ»½øÈë tst/src Ŀ¼£¬µ«Ö»ÓÐ root,src ×éÄܹ»ÔÚ src Ï´´½¨Ä¿Â¼¡£
	# Èç´ËÉèÖã¬ÕâЩÓû§²»ÄÜÐÞ¸Ä $project/src Ŀ¼ÏÂÃæµÄÎļþ
	#$SETFACLCMD       -m g:tst_src_1:r-x,g:tst_src_2:r-x   $project/src

	# ËùÓÐÓû§×é¶¼Äܹ»½øÈ루ֻ¶Á·ÃÎÊ£© tst, tst/CVSROOT Ŀ¼£¬·ñÔòÎÞ·¨·ÃÎÊÏàӦģ¿é¡£µ«Ö»ÓÐ root ×éÄܹ»ÔÚ ¸ù Ï´´½¨Ä¿Â¼ºÍÐÞ¸Ä CVSROOT¡£
	$SETFACLCMD       -m g:tst_src:r-x,g:tst_src_1:r-x,g:tst_src_2:r-x,g:tst_doc:r-x   $project
	$SETFACLCMD    -R -m g:tst_src:r-x,g:tst_src_1:r-x,g:tst_src_2:r-x,g:tst_doc:r-x   $project/CVSROOT
}


apply_acl_other_project()
{
	# ... ...
}

#End Declare Function:
##############################################################################

##############################################################################
# MAIN Function Here
##############################################################################

if [ $# -eq 0 ];then
	echo format: `basename $0` project ...
	exit 1
fi

cd ${CVSHOMEDIR}

while [ $# -gt 0 ]; do
	project=$1
	if [ ! -d $project ]; then
		echo "Can not find project: $project."
		shift
		continue
	fi

	##############################################################################
	# PRE, Ô¤ÉèÖÃ
	##############################################################################

	echo -n "Begin PRE ACL Setup for project: $project ..."

	# ÉèÖà ${CVSHOMEDIR}/$project ÏÂÎļþȨÏÞ£ºrwx------, mask Ϊ rwx£»
	# Ìí¼Ó cvs ³¬¼¶Óû§ cvsroot,cvsroot_ro ȨÏÞ£»
	$SETFACLCMD -R -m m::rwx,u::rwx,g::---,o::---,d:m::rwx,d:u::rwx,d:g::---,d:o::---,g:cvsroot:rwx,d:g:cvsroot:rwx,g:cvsroot_ro:r-x,d:g:cvsroot_ro:r-x    ${CVSHOMEDIR}/$project
	
	# Ŀ¼ÊôÖ÷±»×ÓĿ¼¼¯³É
	chmod -R g+s           ${CVSHOMEDIR}/$project
	
	# ÉèÖà ${CVSHOMEDIR} µÄÊôÖ÷£¬ÉèÖÃΪ nobody.cvsnull£¬×¢Òâ×îºÃÈκÎÓû§²»ÊôÓÚ cvsnull£»
	chown -R nobody.cvsnull ${CVSHOMEDIR}/$project

	echo "	done"
	
	##############################################################################
	# ¿ªÊ¼ÏîÄ¿µÄȨÏÞÉèÖÃ
	##############################################################################

	echo -n "Begin ACL Setup for project: $project ..."

	case "$project" in
		test*)
			apply_acl_test  $project
			;;
		*)
			echo "Unknown project name: $project"
			exit 1
			;;
	esac
	
	echo "	done"
	
	##############################################################################
	# POST, ºóÉèÖÃ
	##############################################################################

	echo -n "Begin POST ACL Setup for project: $project ..."

	# ½« CVSROOT Ŀ¼ÖеÄÐèÒªÍêÈ«¶ÁдµÄÎļþ£¬Çå³ý ACL£¬ ²¢Çå³ý×éµÄÕ³Ìù룬
	### »¹Òª×¢Òâ symbol link ÎļþµÄȨÏÞÒ²ÐèÒª»Ö¸´£¬ÈçÎļþ passwd, blocksender...
	
	# ÒòΪ CVSROOT Ͻű¾ÐèÒªÖ´ÐУ¬±ØÐëÈ¥³ýÆä setgid λ
	chmod -R g-s "$project/CVSROOT"

	# ÓÉÓÚÈ¥³ýÁËÓû§ÊôÖ÷µÄ±£³Öλ, µ±Óû§checkin CVSROOTʱ?ÆäËüÓû§¿ÉÄÜ·ÃÎʲ»µ½£¬Òò´ËÐèÒªÉèÖÃ×éÄܹ»·ÃÎÊ
	# ²»ÄÜʹÓà chmod g+rx , ÒòΪ¶ÔÓÚÉèÖÃÁË ACL£¬ chmod ÊÇÐÞ¸ÄÆä mask
	$SETFACLCMD -R -m m::rwx,u::rwx,g::rwx,o::r-x,d:m::rwx,d:u::rwx,d:g::rwx,d:o::r-x    $project/CVSROOT
	
	# val-tags, history ÎļþÐèÒªËùÓÐÈ˵ĶÁдȨÏÞ
	$SETFACLCMD -b "$project/CVSROOT/val-tags" "$project/CVSROOT/history"
	chmod 777 "$project/CVSROOT/val-tags" "$project/CVSROOT/history"

	# commitlogs/ Ŀ¼Ҫ¿Éд
	$SETFACLCMD -b -R "$project/CVSROOT/commitlogs/"
	chmod -R 777  "$project/CVSROOT/commitlogs/"

	echo "	done"
	
	shift

done

#	$SETFACLCMD -b "/etc/passwd.cvs" "/etc/blocksender"
#	chmod 444 "/etc/passwd.cvs" "/etc/blocksender"

echo ""
echo "Make sure every one has access right"
ls -ld ${CVSHOMEDIR}
ls -l "/etc/passwd.cvs" "/etc/blocksender"

2.2. Starteam·þÎñÆ÷ȨÏÞÉèÖÃ

ÿһ¸ö·þÎñÆ÷ÅäÖÃÒ»¸ö¶ÀÁ¢µÄÓû§Êý¾Ý¿âÉèÖá£Óû§µÄȨÏÞÉèÖÃÁé»î£¬ºÍ±¾»úÕʺÅÉèÖÃÎ޹أ¨²»ÓÃÉèÖñ¾µØÕʺţ©£¬ÇҺͱ¾µØÂ·¾¶Î޹ء£

2.2.1. Óû§¹ÜÀí

  1. Èç¹ûʹÄÜÁËLockout¹¦ÄÜ£¬ÔòÐèÒª½¨Á¢Á½¸öϵͳ¹ÜÀíÔ±Õʺţ¬ÒÔ·ÀÖ¹Ò»¸ö±»Ëø¶¨£¨Èç¶à´Î´íÎóµÇ¼±»ÎÞÏÞÆÚËÀËø£©£¬ÄÜÓÃÁíÍâÒ»¸ö½âËø¡£

  2. ½¨×éÔ­Ôò£¨¼ÙÉè×éÃûΪ team1£©

    • ½¨Á¢Óû§×éºÍ×Ó×é

      ¼ÙÉè×éÃûΪ team1£¬Ê×ÏȽ¨Á¢Ò»¸ö´ó×é ga_team1 ×飻ÔÙÔÚ team1 ×éÏÂÔÙ½¨Á¢Èý¸öchild group: g_team1_admin ×飬g_team1_users ×éºÍ g_team1_rdonly ×飨¼´Ö»¶Á×飩¡£

    • ½¨×éµÄ¿¼ÂÇ

      ½«È¨ÏÞ·ÖÅäµ½×飬ÊǹÜÀíȨÏ޵Ļù±¾Ô­Ôò¡£ÒòΪ starteam ÔÚ¸³ÓèȨÏÞʱ£¬Êǽ«Óû§ÃûºÍ×éÃû»ìÔÚÒ»Æð£¬Òò´ËΪ×éÃû¼ÓÉÏǰ׺ ¡°g_¡± »òÕß ¡°ga_¡±¡£Çø·Ö g_ ºÍ ga_ ÊÇÒòΪҪ·ÀÖ¹Îó½«È¨ÏÞÉèÖõ½¸ü´óµÄ ga_ ×éÖУ¨ÈçºóËùÊö£©¡£

      ×é¹ÜÀíÔ±ÊôÓÚ g_team1_admin ×飬ӵÓйÜÀí LABEL ȨÏÞ£¬´´½¨ÐÂÊÓͼ£¬ÒÔ¼°¹ÜÀí´úÂëȨÏÞ·ÖÅäȨÏÞ£»starteam¹ÜÀíÔ±²¿·ÖÊÚȨ£¬Ä¿µÄÊǼõÉÙstarteam¹ÜÀíÔ±µÄ¹ÜÀí¸ºµ£¡£Ìá¸ßЧÂÊ¡£

      С×éµÄÆäËüÓû§ÊôÓÚ g_team1_users ×飬³ýÁ˲»¾ßÓÐ g_team1_admin ×éµÄ¹ÜÀíȨÏÞÍ⣬ÆäËüȨÏÞͬ g_team1_admin¡£

      ¶ÔÓÚÆäËüÓÐÑжÁ´úÂë»òÕßÕÆÎÕ½ø¶ÈÐèÇóµÄÓû§£¬Èç QA¡¢²¿ÃÅÁìµ¼µÈÊôÓÚ g_team1_rdonly ×飬³ýÁ˾ßÓÐÖ»¶Á·½Ê½¿´´úÂëȨÏÞÍ⣬ÆäËüͬ all users¡£

      ½¨Á¢ÏîÄ¿×é ga_project_manager£¬ÊǶÀÁ¢ÓÚÏîÄ¿×飨Ҳ¿ÉÒÔ¿¼ÂÇΪÿ¸öÏîÄ¿×éµ¥¶ÀÉèÖã©£¬½øÐÐÏîÄ¿¹ÜÀí¡£Îª¹ÜÀíÐèÇó±ä¸ü£¬ÔÚÆäϽ¨Á¢ g_pm_req£»Îª¹ÜÀíTODO LIST£¬½¨Á¢ g_pm_todo×é¡£

      [¾¯¸æ]

      ·ÖÅäȨÏÞʱ£¬Òª×¢Òâ²»Òª°ÑȨÏÞ¸³Óè´ó×飨Èç ga_team1 ×飩¡£ÒòΪ team1 ×é°üÀ¨ÁË g_team1_rdonly ×飨ֻ¶ÁÓû§×飩£¡

    • ¹ØÓÚ×é±¾ÉíµÄȨÏÞ

      ³ý Administrators ×éÍ⣬ÈκÎ×é²»ÒªÉèÖÃ×éµÄȨÏÞ£¬ÒÔÃâ×éµÄȨÏÞÉèÖó¬Ô½ÁËÏîÄ¿µÄ°²È«ÉèÖã¬Ê¹¶ÔÏîÄ¿µÄ°²È«ÉèÖÃÐÎͬÐéÉè¡£

  3. ¹ØÓÚ·¢²¼»úʹÓöÀÁ¢Óû§

    ÔÚUNIXÃüÁîÐÐÉϽøÐдúÂëµÄcheck in/check out£¬ÐèÒª½¨Á¢¶ÀÁ¢Óû§£¬È磺team1_release¡£ÒÔÃâÓÉÓÚʹÓÃͬһ¸öÓû§ÃûÔÚ²»Í¬¹¤×÷Õ¾check´úÂ룬Ôì³ÉÎļþ״̬UNKNOWSµÄÇé¿ö¡£²Î¼ûStarteam HowtoÖйØÓÚÎļþ״̬unknownµÄFAQ¡£

2.2.2. ·þÎñÆ÷ÅäÖõݲȫÉèÖÃ

  1. Starteam VTS µÄÆô¶¯·½Ê½ÉèÖÃΪNT·þÎñ·½Ê½

    ±£Ö¤·þÎñÆ÷ÖØÆôºó£¬Starteam×Ô¶¯Æô¶¯¡£

  2. Starteam ·þÎñÆ÷¶ËÅäÖÃ

    • General

      ÉèÖõǼ³¬Ê±60Ã룬δ¶¯×÷³¬Ê±300·ÖÖÓ¡£

    • Audits

      ÉèÖÃÖ»±£Áô10Ì찲ȫÈÕÖ¾¡£

    • Vault

      ÉèÖò»Çå³ýÎļþ״̬±í£»

      ÉèÖÃ×î´óCACHEΪ400MB¡£

      ÉèÖÃCacheµÄÎļþ¼ÐÔÚValutÎļþ¼ÐÖ®Í⣬ÒÔʹÔÚ±¸·Ýʱ£¬¶ÔcacheÇø±ð¶Ô´ý £¨²»±¸·ÝCache£©¡£

    • Notifications

      ʹÄÜEmail֪ͨ¡£

    • Protocal

      Ö»±£ÁôÒ»ÖÖЭÒéÖ§³Ö£ºTCP/IP(SOCKETS)£¬ÒòΪ±ðµÄЭÒéÖ§³ÖÓÐÎÊÌ⣻

      TCP/IP¼ÓÃܼ¶±ð£º²»×÷ÉèÖ㬵«ÊǹÜÀíԱҪ֪ͨÓû§£¬Èç¹û¿Í»§¶ËÖ§³Ö´«Êä¼ÓÃÜ£¬ÇëÖÁÉÙÑ¡ÔñRSA R4 stream¼ÓÃÜ¡£windows¿Í»§¶Ë¶¼Ö§³Ö£¬µ«ÊÇunixÃüÁîÐв»Ö§³Ö¡£

  3. ·ÃÎÊȨÏÞ£¨Access Rights£©

    ¹ÜÀíÔ±ÍêȫȨÏÞ£¬²»¸³ÓèÆäËüÓû§ÈκÎȨÏÞ¡£

  4. ϵͳ²ßÂÔ£¨System Policy£©

    • Access Rights

      ʹÄÜ Ignore object ownership, ¼´ºöÂÔOwnerShip£¬Ò»Çоù°´ÕÕȨÏÞÉèÖá£

      ²»Ñ¡Ôñ Ignore group privileges, ¼´ÔÚ±£Ö¤Ö»ÓÐ Administrators ×éÉèÖÃÁË×éȨÏÞÇé¿öÏ£¬ÔÊÐíAdministrators×éÓû§³¬Ô½ÏîÄ¿µÄȨÏÞÏÞÖÆÊµÊ©¹ÜÀí¡£

    • Security Events

      ÉèÖÃÖ»±£Áô30ÌìµÄ°²È«ÈÕÖµ¡£

    • Passwords

      ÉèÖÃÃÜÔ¿×îС³¤¶È6¸ö×Ö·û¡£

    • ÔÚÓû§¹ÜÀí£¨User manager£©½çÃæ£¬ÉèÖÃËùÓÐÓû§µÚÒ»´ÎµÇ¼±ØÐëÐ޸ĿÚÁ²¢ÇÒ²»ÔÊÐíÉèÖÿտÚÁî¡£

    • Logon Failures

      ÉèÖÃ5´Îʧ°ÜµÇÂ¼Ëø¶¨Õʺţ¬ÕʺÅËø¶¨5·ÖÖÓ¡£

2.2.3. ¹¤³ÌµÄȨÏÞÉèÖÃ

ÏÈ´ò¿ªÒªÅäÖõŤ³Ì£¬Project->Access Rights£¬À´ÉèÖù¤³ÌȨÏÞ¡£

  1. Project

    • All Users

      ÉèÖÃËùÓÐÓû§£¨All Users£©¾ßÓÐÈçÏÂȨÏÞ:

      See Project and Properties

    • g_xxx_admin

      ÉèÖÃ×é¹ÜÀíÔ±£¨È磺g_team1_admin ×飩¾ßÓÐÈçÏÂȨÏÞ£º

      ¸³Óè³ýÁË Delete project ÍâËùÓÐȨÏÞ¡£ÒÔ±ãÓÚ¹ÜÀíÔ±ÐÞ¸Ä×ÔÉíȨÏÞ£¬¸ø×Ô¼º¼ÓÉÏɾ³ýlabelȨÏ޵ȣ¬µ«Òª×¢ÒâȱʡûÓи³Óè¹ÜÀíÔ±µÄȨÏÞ£¬µ±¹ÜÀíÔ±Íê³ÉÏàÓ¦¹ÜÀí¹¦Äܺ󣬻ָ´Ô­×´¡£

      [¾¯¸æ]

      ²»Äܸ³¸øÈκÎÈËɾ³ý¹¤³ÌȨÏÞ£¡ÒòΪ¹¤³Ìɾ³ý²»¿ÉÄæ¡£

  2. Views

    • All Users

      ÉèÖÃËùÓÐÓû§£¨All Users£©¾ßÓÐÈçÏÂȨÏÞ£º

      See View and its Properties

    • g_xxx_admin

      ÉèÖÃ×é¹ÜÀíÔ±£¨È磺g_team1_admin ×飩¾ßÓÐÈçÏÂȨÏÞ£º

      ¸³Óè³ýÁË Delete View, Delete Labels ÍâËùÓÐȨÏÞ¡£

    [¾¯¸æ]

    Delete View, Delete Labels ²»¿ÉÄæ£¬Òò´Ë²»¸³ÓèÈκÎÈË´ËȨÏÞ¡£µ«ÎªÁ˼õÇá¹ÜÀíÔ±¸ºµ££¬¸³ÓèÁË g_team1_admin ×é change view security setting ȨÏÞ£¬g_team1_admin¿ÉÒÔÐÞ¸Ä×Ô¼ºÈ¨ÏÞ£¬Ê¹¾ßÓÐɾ³ý label, ÉõÖÁÊÇɾ³ý view ȨÏÞ£¬µ«Òª×¢ÒâÍê³Éά»¤¹¦Äܺó£¬Á¢¼´È¥µô¸ÃÁ½ÏîȨÏÞ£¡

  3. Child Folders

    • g_team1_rdonly ×é

      ÉèÖÃÖ»¶Á×飨È磺g_team1_rdonly ×飩¾ßÓÐÈçÏÂȨÏÞ£º

      ¾ßÓУºSee folder and its properties, See folder history, See folder links ȨÏÞ¡£

    • g_team1_users ×é

      ÉèÖÃÆÕͨÓû§×飨g_team1_users ×飩¾ßÓÐÈçÏÂȨÏÞ£º

      ³ý Modify folder properties, Delete folder from parent folder, Change folder security set ÍâËùÓÐȨÏÞ¡£

    • g_team1_admin×é

      ÉèÖÃ×é¹ÜÀíÔ±£¨È磺g_team1_admin ×飩¾ßÓÐÈçÏÂȨÏÞ£º

      ³ýÁË Delete folder from parent folder ÍâËùÓÐȨÏÞ¡£

  4. Files

    • g_team1_rdonly ×é

      ÉèÖÃÖ»¶Á×飨È磺g_team1_rdonly ×飩¾ßÓÐÈçÏÂȨÏÞ£º

      ¾ßÓУºSee file and its properties, See file history, See file links, Check out files ȨÏÞ¡£

    • g_team1_users ×é

      ÉèÖÃÆÕͨÓû§×飨g_team1_users ×飩¾ßÓÐÈçÏÂȨÏÞ£º

      ³ý Change file security set ÍâËùÓÐȨÏÞ¡£

    • g_team1_admin ×é

      ÉèÖÃ×é¹ÜÀíÔ±£¨È磺g_team1_admin ×飩¾ßÓÐÈçÏÂȨÏÞ£º

      ËùÓÐȨÏÞ¡£

      [¾¯¸æ]

      Move folder out of a view or project ȨÏÞÒ²ÊÇΣÏÕ²Ù×÷£¬ÎļþÒÆ³öÊÓͼ£¬Ò²´ÓÀúÊ·ÊÓͼÖÐÈ¥µô£¬¿ÉÄÜ»áÆÆ»µÍêÕûÐÔ¡£µ«½«Îļþ»òÄ¿Â¼ÒÆ¶¯µ½ÁíÍâÒ»¸öÊÓͼ£¬ÊÇ´Ó·þÎñÆ÷¶Ëɾ³ýÎļþµÄΨһ°ì·¨¡£Òò´ËÉ÷Óá£

  5. Change Request

    • All Users

      Ìí¼ÓËùÓÐÓû§£¨All Users£©£¬½«È¨ÏÞÉèÖÃΪ¿Õ¡£¼´Ä¬ÈϽûÖ¹Ò»ÇеIJßÂÔ¡£

    [×¢Òâ]

    ¹¤³ÌµÄȨÏÞÉèÖÃÖеÄChildFolders, Files, Change request µÈµÄȨÏÞÉèÖã¬ÓÃÀ´È·¶¨¹¤³ÌµÄĬÈÏÉèÖ᣼´ÎªÃ»ÓжԸ÷Ïî½øÐе¥¶ÀȨÏÞÉèÖÃʱµÄĬÈϰ²È«ÉèÖá£

    ½« Change Request ¶¨ÒåΪĬÈϽûÖ¹Ò»ÇУ¬Ä¿µÄÊÇÖ»ÔÚÖ¸¶¨Ä¿Â¼Ìí¼Ó Change Request.

  6. Topics

    • All Users

      ÉèÖÃËùÓÐÓû§£¨All Users£©¾ßÓÐÈçÏÂȨÏÞ£º

      ÉèÖóýÁË ¡°Change topic security set¡±£¬¡°Delete Topic from folder¡±ÍâËùÓÐȨÏÞ¡£ÌṩÓû§Í¨¹ý TOPIC ½øÐÐÌÖÂÛÒÔ¼°±£´æ±¸Íü¡£

    • ÉèÖÃ×é¹ÜÀíÔ±£¨È磺g_team1_admin ×飩¾ßÓÐËùÓÐȨÏÞ¡£

2.2.4. ÊÓͼµÄȨÏÞÉèÖÃ

ÏÈ´ò¿ªÒªÅäÖõÄÊÓͼ£¬View->Access Rights£¬À´ÉèÖÃÊÓͼȨÏÞ¡£

  1. ¸ùÊÓͼ

    ¿ÉÒÔ²»ÉèÖÃȨÏÞ£¬¼Ì³ÐÕû¸ö¹¤³ÌÖеÄProject AccessRightµÄ Views µÄ¸÷ÏîȨÏÞÉèÖá£

  2. ·ÖÖ§ÊÓͼ

    °´ÐèÉèÖ᣿ÉÒÔʹÀϰ汾µÄά»¤ÓÉÆäËûÈËÍê³É£¬»òÕß½øÐÐ xp ģʽ¿ª·¢£¬Îª¿ª·¢Õߣ¨·Ç¹ÜÀíÔ±£©ÉèÖøü´óµÄȨÏÞ¡£

2.2.5. Îļþ¼ÐµÄȨÏÞÉèÖÃ

Ñ¡ÔñÊÓͼÏÂÏàÓ¦Îļþ¼Ð£¬Êó±êÓÒ¼üµ¥»÷£¬Ñ¡Ôñ Advanced->Access Rights£¬ÉèÖÃȨÏÞ¡£

ÐèÒªÏÈÉèÖá°¸ùĿ¼¡±È¨ÏÞ¡£ÔÙµ¥¶ÀÉèÖø÷Ò»¼¶×ÓĿ¼£¨defect, src, docµÈ£©µÄȨÏÞ¡£Èç¹ûÐèÒª»¹¿ÉÒÔ¶Ô¶þ¼¶Ä¿Â¼µÈ£¨Ä£¿é£©ÉèÖÃȨÏÞ£¬µ«²»½¨ÒéÉèÖöþ¼¶Ä¿Â¼µÄȨÏÞ¡£

  1. ¸ùĿ¼

    ¸ùĿ¼ºÍ×ÓĿ¼ÔÚȨÏÞÉèÖÃÉϵÄÒìͬ

    1. ¸ùĿ¼µÄȨÏÞ²»´«µÝ£¬¼´ÔÚ¸ùĿ¼ÉÏÉèÖõÄȨÏÞ¶ÔÅÉÉúµÄ×ÓÊÓͼûÓÐÓ°Ï죻¶ø·Ç¸ùĿ¼»á´«µÝȨÏÞ£¬ËùÒÔ¾¡Á¿²»ÒªÔÚ×ÓĿ¼£¨·Ç¸ùĿ¼£©ÉÏÉèÖÃȨÏÞ£¬ÒÔÃâÁ¬´øÓ°ÏìÆäËüÊÓͼÖиÃĿ¼µÄȨÏÞ£¬Ôì³É»ìÂÒ¡£

    2. ¸ùĿ¼¼Ì³ÐÊÓͼ»òÕß¹¤³ÌµÄ Child Folder ȨÏÞ£»×ÓĿ¼Ïȼ̳иùĿ¼ȨÏÞ£¬ Ôټ̳ÐÊÓͼ£¬¹¤³ÌȨÏÞ¡£

    3. Òò´Ë£¬²»ÒªÉèÖøùĿ¼µÄȨÏÞÒ³µÄ Child Folder Ò³£¬ÕâÑùûÓÐÉèÖÃȨÏÞµÄ×ÓĿ¼±ã¿ÉÒԼ̳ÐÊÓͼµÄ Child FolderÒ³µÄȨÏÞ¡£µ«ÊÇ¿ÉÄÜÐèÒªÉèÖøùĿ¼ȨÏÞÒ³µÄ This Folder Ò³£¬ÒòΪ This FolderµÄȨÏÞĬÈÏÈ¡×ÔÊÓͼ»òÕß¹¤³ÌµÄ Child Folder ÉèÖá£Èç¹ûÓÐ×ÓĿ¼µÄȨÏÞ´óÓÚÊÓͼ»òÕß¹¤³ÌµÄ Child FolderµÄÉèÖ㬾ÍÐèÒªÉèÖÃThis Folder ÉèÖᣵ«ÊǸ±×÷ÓÃÊÇ£¬×ÓĿ¼µÄȨÏÞ²¢Ã»ÓÐÍêÈ«¼Ì³ÐÊÓͼ»òÕß¹¤³ÌµÄ¸üÑϸñµÄÉèÖ㬶øÊDzÉÓÃÁ˸ùĿ¼µÄ This Folder ÉèÖÃºÍ ÊÓͼµÄSubfolderÉèÖõÄ×éºÏ£¨ÒòΪ¸ùĿ¼ûÓÐÉèÖÃSubfolderȨÏÞ£©¡£ÕâÑùÓпÉÄÜʹËùÓÐÄܹ»·ÃÎʸùĿ¼µÄÓû§·ÃÎÊÕû¸öĿ¼Ê÷£¡£¡£¡ºÃÏñûÓиüºÃµÄ½â¾ö·½°¸¡£

    ¸ùĿ¼ÉϵÄȨÏÞÉèÖãº

    • This Folder

      All Users£ºËùÓÐÓû§£¨All Users£©¾ßÓÐ See folder and its properties, See folder history, See folder links ȨÏÞ¡£

      g_team1_admin£º ×é¹ÜÀíÔ±£¨g_team1_admin£©¾ßÓУº³ýÁËDelete folder from parent folder ÍâËùÓÐȨÏÞ¡£

    • Child Folders£¬Files, Change Requests, Tasks, Topics

      ²»×÷ÉèÖã¬ÒԼ̳ÐÊÓͼ»òÕß¹¤³ÌµÄȨÏÞÉèÖá£

  2. DefectĿ¼

    • This Folder

      All Users £º ËùÓÐÓû§£¨All Users£©¾ßÓЗ— See folder and its properties, See folder history, See folder links ȨÏÞ¡£

      g_qa_admin£ºQA×é¹ÜÀíÔ±£¨g_qa_admin£©¾ßÓЗ—³ýÁËDelete folder from parent folder ÍâËùÓÐȨÏÞ¡£

      g_team1_admin£ºteam1×é¹ÜÀíÔ±£¨g_team1_admin£©¾ßÓЗ—³ýÁËDelete folder from parent folder ÍâËùÓÐȨÏÞ¡£

      [×¢Òâ]

      ÉèÖ÷þÎñQA¹ÜÀíÔ±ºÍteam1Ŀ¼¹ÜÀíȨÏÞ£¬ÔÊÐíQA¹ÜÀíÔ±½¨Á¢×ÓĿ¼£¬ÓÃÓÚ¶ÔCR·ÖÀà¡£

    • Child Folders

      All Users£ºËùÓÐÓû§£¨All Users£©¾ßÓЗ—See folder and its properties, See folder history, See folder links ȨÏÞ¡£

      g_qa_admin£ºQA×é¹ÜÀíÔ±£¨g_qa_admin£©¾ßÓЗ—³ýÁËDelete folder from parent folder ÍâËùÓÐȨÏÞ¡£

      g_team1_admin£ºteam1×é¹ÜÀíÔ±£¨g_team1_admin£©¾ßÓЗ—³ýÁËDelete folder from parent folder ÍâËùÓÐȨÏÞ¡£

    • Change Requests

      All Users£ºËùÓÐÓû§£¨All Users£©¾ßÓЗ—³ýÁËChange CR Security set , Delete CR from folderÍâËùÓÐȨÏÞ¡£

      g_qa_admin£ºQA×é¹ÜÀíÔ±£¨g_qa_admin£©¾ßÓЗ—³ýÁËDelete CR from folder ÍâËùÓÐȨÏÞ¡£

      [¾¯¸æ]

      ΪÁ˼õÇá¹ÜÀíÔ±¸ºµ££¬¸³ÓèÁË g_qa_admin ×é change CR security setting ȨÏÞ£¬g_qa_admin¿ÉÒÔÐÞ¸Ächange requestµÄȨÏÞ£¬Ê¹Ö®¿ÉÒÔ±»É¾³ý£¬ÔÙɾ³ý¸Ã cr¡£

    • Files, Tasks, Topics

      ²»ÁíÍâÉèÖÃȨÏÞ£¬¼Ì³ÐÊÓͼ»òÕß¹¤³ÌµÄȨÏÞ¡£

  3. src Ŀ¼

    src Ŀ¼ÊÇÓÃÀ´´æ·ÅÔ´´úÂëµÄĿ¼£¬Ó¦×Å֨עÒⱾĿ¼ȨÏÞÉèÖá£

    ¿ÉÒÔ²»×÷Èκε¥¶ÀÉèÖã¬ÒòΪ¼Ì³ÐÁËÊÓͼ»òÕß¹¤³ÌµÄȨÏÞÉèÖá£Èç¹û¹¤³Ì»òÕßÊÓͼ¹ØÓÚÎļþµÄȨÏÞÉèÖÃ×ã¹»°²È«µÄ»°£¬¿ÉÒÔ²»±ØÉèÖñ¾Ä¿Â¼È¨ÏÞ¡£

  4. ProjectManagement Ŀ¼

    ProjectManagement Ŀ¼£¬ÓÃÓÚÒÔÎļþºÍ TOPICÐÎʽ´æ´¢ TODO_LIST, ±à³Ì¹æ·¶£¬ÐèÇó±ä¸ü¡£

    1. ProjectManagement Ŀ¼

      • This Folder

        All Users £ºËùÓÐÓû§¾ßÓЗ— See folder and its properties, See folder history, See folder links ȨÏÞ¡£

        ga_project_manager ×é £º¾ßÓЗ—³ý Modify folder properties, Delete folder from parent folder, Change folder security set ÍâËùÓÐȨÏÞ¡£

        g_team1_admin×é £º¾ßÓЗ—³ý Delete folder from parent folder ÍâËùÓÐȨÏÞ¡£

      • Child Folders

        All Users £ºËùÓÐÓû§¾ßÓЗ— See folder and its properties, See folder history, See folder links ȨÏÞ¡£

        ga_project_manager ×é £º¾ßÓЗ—³ý Modify folder properties, Delete folder from parent folder, Change folder security set ÍâËùÓÐȨÏÞ¡£

        g_team1_admin×é £º¾ßÓЗ—³ý Delete folder from parent folder ÍâËùÓÐȨÏÞ¡£

      • Files

        All Users£º¾ßÓЗ—See file and its properties, See file history, See file links, Check out files ȨÏÞ¡£

        ga_project_manager£ºÆÕͨÓû§×é¾ßÓЗ—³ýÁË Change file security set, Delete file from folder ÍâµÄËùÓÐȨÏÞ¡£

        g_team1_admin£º×é¹ÜÀíÔ±¾ßÓЗ—³ýÁË Delete file from folder ÍâµÄËùÓÐȨÏÞ¡£

      • Topic

        All Users£º¾ßÓЗ—³ýÁË Change top security set, Delete topic from forder ÍâËùÓÐȨÏÞ¡£

        g_team1_admin£º¾ßÓЗ—³ýÁË Delete topic from forder ÍâËùÓÐȨÏÞ¡£

      • Change

        Ôݲ»ÉèÖ㬲ÉÓù¤³Ìȱʡ½ûÓÃÅäÖá£

    2. TODO LIST×ÓĿ¼

      ËùÓÐÓû§¾ßÓÐÖ»¶ÁÎļþ£¬¶ÁдTOPICȨÏÞ£»g_pm_todo ×é ºÍ g_team1_admin×é¾ßÓжÁдÎļþ£¬¶Áдtopic£¬ºÍÕûÀíĿ¼ȨÏÞ¡£

    3. ±à³Ì¹æ·¶

      ËùÓÐÓû§¶¼ÓÐÕûÀíĿ¼£¬¶ÁдtopicȨÏÞ£»g_team1_admin ¶àÁËÒ»Ïî¹ÜÀíÎļþµÄȨÏÞ¡£

    4. ÐèÇó±ä¸ü

      ËùÓÐÓû§¾ßÓÐÖ»¶ÁÎļþ£¬Ö»¶ÁTOPICȨÏÞ£»g_pm_req ×é ºÍ g_team1_admin ×é¾ßÓжÁдÎļþ£¬¶Áдtopic£¬ºÍÕûÀíĿ¼ȨÏÞ¡£

2.2.6. Starteam·þÎñÆ÷ÓÅ»¯

2.2.6.1. Ìá¸ßÊý¾Ý¿âÐÔÄÜ
  • Êý¾Ý¿â¿ÉÒÔÓжàÖÖÑ¡Ôñ£¬µ«ÊÇACCESS»ù±¾¿ÉÒÔÂú×ãÐèÇó£¬ËäÈ»ÓÐ1.2GÎļþ´óСÏÞÖÆ£¬µ«Ò»°ãÓ¦Óò»»á³¬¹ý¡£Êý¾Ý¿âµÄÑ¡Ôñ²»ÊÇÐÔÄÜÆ¿¾±¡£

  • °²×°ºÍʹÓà Copy Indexes Tools in "StarTeam VirtualTeam Server 4.0\Tuning Scripts\MS Access\Package"¡£

  • ѹËõÊý¾Ý¿â£»£¨ODBC¨¤system dsn£©

  • Ôö¼ÓÊý¾Ý¿âµÄMax Buffer size´Ó2048ÖÁ8192£¬Threads ´Ó3ÖÁ 24¡£

  • ¹ØÓÚÆäËûÊý¾Ý¿â£¬²Î¼û http://devforum.starbase.com/starbase/Main.asp

2.2.6.2. Ìá¸ßStarteam·þÎñÆ÷ÐÔÄÜ
  • Ôö¼ÓCacheĿ¼Îļþ´óСÖÁ400M£»

  • ½«Îļþ״̬±íµ¼³öʱ¼ä´Ó180Ìì¼õÉÙµ½30Ì죻

  • ½«É󼯵¼³öʱ¼ä´Ó²»µ¼³ö¸ü¸ÄΪ30Ììµ¼³ö£»

  • ÔÚ¿Í»§¶ËÉèÖÃAllow check out of deltas "Tools | Workstation | Files "Optimize for slow connection.""

  • ²Î¼û http://devforum.starbase.com/starbase/Articles/Default.asp?id=206

2.2.6.3. ±¸·Ý

±¸·ÝÉæ¼°µ½£º

  • The Configuration and cipher files

    Configuration\server.scg

    Configuration\server.cph

  • Database files

    Database\StarTeamDB.mdb (Assuming Access database)

  • Vault:

    Archive dir: *.*

    Attachments dir: *.*

  • Optional

    Cache dir: *.*

²Î¼ûhttp://devforum.starbase.com/starbase/Articles/Default.asp?id=133

3. CVS vs. STARTEAM——·þÎñÆ÷¶Ë´æ´¢

3.1. CVS ·þÎñÆ÷¶Ë´æ´¢

$ pwd
/repos/local

$ ls -l
total 0
drwxr-xr-x    3 Administ None            0 Dec 14 20:59 CVSROOT
drwxr-xr-x   12 Administ None            0 Dec 29 21:47 worldhello

$ ls CVSROOT   
Emptydir        commitinfo,v    cvswrappers,v   loginfo         notify          rcsinfo,v       val-tags
checkoutlist    config          editinfo        loginfo,v       notify,v        readers         verifymsg
checkoutlist,v  config,v        editinfo,v      modules         passwd          taginfo         verifymsg,v
commitinfo      cvswrappers     history         modules,v       rcsinfo         taginfo,v

$ cd worldhello

$ ls -F
bio/     docbook/   html/    inc/          life/   resource/  utility/
daily,v  favorite/  images/  index.html,v  make,v  sports/

$ head index.html,v
head     1.1;
branch   1.1.1;
access   ;
symbols  start:1.1.1.1 jiangxin:1.1.1;
locks    ; strict;
comment  @# @;


1.1
date     2002.12.29.13.47.00;  author jiangxin;  state Exp;

¿ÉÒÔ¿´³öCVSµÄ·þÎñÆ÷¶Ë´æ´¢ºÍ¿Í»§¶ËµÄÊÇÒ»Ò»¶ÔÓ¦µÄ£¬Ê÷ÐεÄÎļþϵͳ¡£

3.2. Starteam ·þÎñÆ÷¶Ë´æ´¢

[×¢Òâ]

ÒÔϵÄʾÒ⣬ÊÇÔÚ Win2k ƽ̨£¬ÔÚ cygwin ÃüÁîÐÐÏÂÊä³ö

Starteam µÄÊý¾Ý¿â

$ pwd
/d/.repos/STARTEAM/johnson/Database

$ ls -l
-rw-r--r--    1 Administ None      2101248 Sep  5 20:22 StarTeamDB.mdb

°æ±¾¿ØÖÆÎļþ

$ pwd
/d/.repos/STARTEAM/johnson/Vault/Archive

$ ls -F
00000000  00000006  0000000C  00000012  00000018  0000001E  00000024  0000002A
00000001  00000007  0000000D  00000013  00000019  0000001F  00000025  0000002B
00000002  00000008  0000000E  00000014  0000001A  00000020  00000026
00000003  00000009  0000000F  00000015  0000001B  00000021  00000027
00000004  0000000A  00000010  00000016  0000001C  00000022  00000028
00000005  0000000B  00000011  00000017  0000001D  00000023  00000029

»º´æ

$ pwd
/d/.repos/STARTEAM/CACHE/johnson

$ ls -F
00000000.1  00000001.3  00000007.1  00000011.1  0000001B.1  00000025.1
00000000.2  00000001.4  00000008.1  00000012.1  0000001C.1  00000026.1
00000000.3  00000001.5  00000009.1  00000013.1  0000001D.1  00000027.1
00000000.4  00000001.6  0000000A.1  00000014.1  0000001E.1  00000028.1
00000000.5  00000002.1  0000000B.1  00000015.1  0000001F.1  00000029.1
00000000.6  00000002.2  0000000C.1  00000016.1  00000020.1  0000002A.1
00000000.7  00000003.1  0000000D.1  00000017.1  00000021.1  0000002B.1
00000000.8  00000004.1  0000000E.1  00000018.1  00000022.1
00000001.1  00000005.1  0000000F.1  00000019.1  00000023.1
00000001.2  00000006.1  00000010.1  0000001A.1  00000024.1

¿ÉÒÔ¿´³öStarteamµÄ·þÎñÆ÷¶Ë´æ´¢ºÍ¿Í»§¶ËÍêÈ«²»Í¬£¬·þÎñÆ÷¶ËÎļþ´æ´¢½á¹¹ÊÇÆ½Ãæ½á¹¹¡£ÎļþÃûºÍʵ¼ÊÎïÀí´æ´¢µÄ¶ÔÓ¦ÊÇͨ¹ýÊý¾Ý¿âÀ´ÊµÏֵġ£

4. CVS vs. STARTEAM——¿Í»§¶ËÉèÖÃ

4.1. CVS ¿Í»§¶ËÉèÖÃ

  • ÉèÖà CVSROOT »·¾³±äÁ¿ »òÕßÃüÁîÐÐÖÐÖ¸¶¨

    # È磺 
    export CVSROOT=:pserver:jiangxin@10.0.0.152:/home/repos-user
    # »òÕߣº 
    cvs -d :pserver:jiangxin@10.0.0.152:/home/repos-user  login
    
    [×¢Òâ]

    ÒÔÏ嵀 cvs ÃüÁîÐÐʾÒ⣬¶¼¼Ù¶¨ÒѾ­ÉèÖÃÁË»·¾³±äÁ¿ CVSROOT¡£

  • µÇ¼£¬½«ÃÜÂë¼Ç¼ÔÚ±¾µØ

    cvs login
    # Ôò¿ÚÁî×Ô¶¯±£´æÔÚ $HOME/.cvspass ÖÐ
    # cat $HOME/.cvspass
    :pserver:releng@10.0.0.61:/lt/repos xxxx
    :pserver:yzw@10.0.0.61:/lt/repos xxxxx
    :pserver:yzw@10.0.0.152:/home/repos-user xxx
    :pserver:jiangxin@10.0.0.61:/repos/home xxxxxx
    :pserver:jiangxin@10.0.0.152:/home/repos-user xxxxx
    :pserver:anonymous@10.0.0.152:/home/repos-user xxxxx
    :pserver:anoncvs@anoncvs1.ca.openbsd.org:/cvs xxxxxx
    :pserver:anoncvs@anoncvs.FreeBSD.org:/home/ncvs xxxxxxxxx
    
  • ²é¿´ CVS ÖÐÏÖÓеÄÄ£¿é

    cvs co -c

    # cvs -d :pserver:jiangxin@10.0.0.152:/home/repos-user co -c
    CVSROOT      CVSROOT
    all-in-one   pub/docbook
    johnson      -a jiangxin
    wuzj         wuzj &docbook/ltfw_changes
    
  • ½«Ä£¿é Checkout µ½±¾µØ

    # cvs -d :pserver:jiangxin@10.0.0.152:/home/repos-user co -d johnson_homepage jiangxin
    

    ½«:pserver:jiangxin@10.0.0.152:/home/repos-userÖеÄÄ£¿é jiangxin CHECKOUT µ½±¾µØ johnson_homepage Ŀ¼¡£

  • ±¾µØÅäÖÃÎļþ

    CVS ͨ¹ýÔÚ±¾µØÔ´ÂëĿ¼ͬʱ±£´æÅäÖÃÐÅÏ¢£¨CVSĿ¼£©À´¼Ç¼ԴÎļþµÄ°æ±¾µÈ

    # pwd
    /home/jiangxin/work/johnson_homepage
    
    # ls -l CVS
    total 14
    -rw-r--r--  1 root  jiangxin  4786 Sep  5 10:32 Entries
    -rw-r--r--  1 root  jiangxin     9 Jul 23 10:01 Repository
    -rw-r--r--  1 root  jiangxin    43 Jul 23 10:01 Root
    
    # cat CVS/Repository 
    jiangxin
    
    # cat CVS/Root      
    :pserver:jiangxin@10.0.0.152:/home/repos-user
    
    

4.2. Starteam ¿Í»§¶ËÉèÖÃ

ÏÂÃæÒÔÎÒÃÇ×Ô¼º£¬(×îÔçÓÉÑîÖÂΰ·â×°£¬ºó¾­ Johnson ¸Äд)£¬·â×°µÄ Starteam ÃüÁîÐÐ Wrapper ΪÀý×÷ÒÔ½éÉÜ£º

  • ÓÃ st config ½øÐÐÅäÖÃ

    # cd /home/jiangxin/work/src/project
    # mkdir branch1
    # cd branch1
    # pwd
    /home/jiangxin/work/src/project/branch1
    
    # st config
    StarTeam Configuration
    
    
    Original starteam server is 10.0.0.60
    new server:[10.0.0.60]
    Original starteam server port is 49201
    new server port:[49201]
    original username is 
    new username:[]jiangxin
    Password:[********]
    Confirm :[********]
    Original checkout project is project
    Project you want to checkout:[project]
    Original checkout view is  ("/" means root view)
    View you want to checkout:[]branch_2_4
    Original checkout folder is  ("/" means root folder)
    Folder you want to checkout:[]Development
    Working dir is /usr/home/jiangxin/work/src/project/branch1
    Your working directory:[/usr/home/jiangxin/work/src/project/branch1]
    Sticky tag base on date :  ("/" means not exist)
    Date:[]
    Sticky tag base on label :  ("/" means not exist)
    Label:[]
    Sticky tag base on promotion-state :  ("/" means not exist)
    Promotion-state:[]
    
    # cat .starteam.ini 
    # StarTeam Configuration: /usr/home/jiangxin/work/src/project/branch1/.starteam.ini
    # /usr/home/jiangxin/work/src/project/branch1/.starteam.ini
    STUSER="jiangxin"
    STSERVER="10.0.0.60"
    STPORT="49201"
    STPROJECT="project"
    STVIEW="branch_2_4"
    STFOLDER="Development"
    STCFGD=""
    STCFGL=""
    STCFGP=""
    STWORKROOT="/usr/home/jiangxin/work/src/project/branch1"
    
    
  • Óû§µÇ¼¿ÚÁî±£´æÔÚÓû§Ö÷Ŀ¼ÏÂ

    Óà st config ÅäÖÃÍê³É£¬»òÕßÓÃÃüÁî st login µÇ¼ºó£¬Óû§¿ÚÁî×Ô¶¯±£´æÔÚ $HOME/.stpass ÖÐ

    # cat $HOME/.stpass
    releng:10.1.1.60:49201:xxxxxxxxxxxxxxxx
    jiangxin:10.1.1.60:49201:xxxxxxx
    jiangxin:10.0.0.6:49201:xxxxxxxx
    
  • ½«´úÂë Checkout µ½±¾µØ

    # pwd
    /home/jiangxin/work/src/project/branch1
    
    # st co
    Folder: Development  (working dir: /usr/home/jiangxin/work/src/project/branch1)
    Makefile: checked out
    .......
    

    ½«ÅäÖÃÎļþ .starteam.ini ÎļþÖ¸¶¨µÄÊÓͼϵÄÎļþ£¬Checkout µ½±¾µØ

    [Ìáʾ]

    Èç¹û²»Ï뽫ȫ²¿Ä£¿é Checkout µ½±¾µØ£¬¿ÉÏÈÔËÐÐÃüÁî st cd £¬½«Õû¸öĿ¼½á¹¹ Checkout µ½ ±¾µØ£¬È»ºóÔÙÔËÐÐ st co directory£¬Ö» checkout ¸ÃĿ¼¡£

  • ±¾µØÅäÖÃÎļþ

    STARTEAM ²»ÊÇÏñ CVS ÄÇÑù£¬ÔÚ±¾µØÔ´ÂëĿ¼ͬʱ±£´æÅäÖÃÐÅÏ¢£¨CVSĿ¼£©À´¼Ç¼ԴÎļþµÄ°æ±¾µÈ£¬ ¶øÊÇÖ±½Ó±£´æÔÚ·þÎñÆ÷µÄÊý¾Ý¿âÖС£¶ø¸ÃÊý¾Ý¿âͨ¹ýÖ÷»úID£¬À´Çø·Ö²»Í¬/ÏàͬÓû§ÔÚͬһ/²»Í¬Ö÷»ú ÖÐ CHECKOUT ÎļþµÄ·¾¶µÈÐÅÏ¢¡£

    ÃüÁîÐÐÓà $HOME/.starteam ±£´æÖ÷»úIDµÈÅäÖÃÐÅÏ¢¡£Í¼ÐνçÃæÀàËÆ¡£

    starteam cli wrapper ÁíÍâÐèÒªÅäÖÃÎļþ£º .starteam.ini£¬ÒòΪÃüÁîÐÐûÓÐÌṩ¼òµ¥µÄ¶ÁÈ¡·þÎñÆ÷¶Ë Êý¾Ý¿âµÄ·½·¨¡£

5. CVS vs. STARTEAM——³£Óð汾¿ØÖƲÙ×÷

±í 1. CVS, Starteam ³£ÓÃÃüÁî±È½Ï

CVS ÃüÁî Starteam ÃüÁî ˵Ã÷
cvs co -D "2002-09-2 20:05" ltfilter st co --cfgd "12/29/97 10:52 AM" * Checkout ijһʱ¿ÌǰµÄ´úÂë
cvs up -l st up -l Ö»¸ü±¾Ä¿Â¼ÏÂÎļþ£¬²»¸üÐÂ×ÓĿ¼
cvs up -A st up -A ¸üÐÂΪ×îеĴúÂ룬¶ÔÓÚcvs, Èç¹ûÊÇ·ÖÖ§ÊÓͼ£¬ÒªÓÃ" -r <·ÖÖ§TAG> "
cvs up -r <tag_name> st up -r <label_name> Checkout ijһ tag/label µÄ´úÂë
cvs ci -m "commit log..." <filename> st ci -m "commit log..." <filename> Checkin Îļþ
st ci -m "commit log..." --filter m Checkin ״̬Ϊ Modified µÄÎļþ

cvs add -kb <binaryfile>

cvs commit -m "file add log... ..."

st add <binaryfile> Ìí¼ÓÐÂÎļþ

cvs remove <filename>

cvs commit -m "file remove log... ..."

st delete-local <filename> (ɾ³ý±¾µØÎļþ)

st remove-repos <filename> (ɾ³ý·þÎñÆ÷Îļþ)

ɾ³ýÎļþ
cvs diff -c -r 1.5 -r 1.7 <filename> st diff -r 1.5 -r 1.7 <filename> ±È½ÏÎļþ<filename> 1.5 ºÍ 1.7 °æ±¾µÄÇø±ð
cvs status -v <filename> ²é¿´µ±Ç°µÄ label
cvs log <filename> | more st log <filename> | more ²é¿´commit logs.
cvs -n up -l st list -l ÏÔʾµ±Ç°Ä¿Â¼Îļþ״̬
cvs co -c ÏÔʾģ¿é/¹¤³ÌÃû
cvs rtag [ -r <branch_tag_name> ] <tag_name> <module_name>

st new-viewlabel --label <label_name>

st label --label <label_name>

Ϊģ¿é´ò tag/label
cvs rtag -b [ -r <base_branch_name> ] <new_branch_name> <module_name> ͼÐνçÃæ ½¨Á¢·ÖÖ§
cvs -d :pserver:jiangxin@10.0.0.217:/repos init

st new-viewlabel --label <label_name>

st label --label <label_name>

Ϊģ¿é´ò tag/label

cd wdir

cvs import -m "Imported sources" yoyodyne/rdir yoyo start

½¨Á¢Ð¹¤³Ì

6. CVS vs. STARTEAM——Ä£¿é¼ä¹²Ïí

6.1. CVS ÖеÄÎļþºÍĿ¼µÄ¹²Ïí

¿Í»§¶Ëͨ¹ý±¾µØÅäÖÃÎļþ£¨CVSĿ¼ÖеÄÎļþ£©£¬À´¼Ç¼´æ´¢ÐÅÏ¢£¬Òò´Ë¿ÉÒÔÔÚ¿Í»§¶Ë µÄÒ»¸öĿ¼Ê÷Ï£¬Î¬»¤¶à¸ö¹¤³Ì¡¢²»Í¬·ÖÖ§´úÂ룬ÉõÖÁÊDz»Í¬CVS·þÎñÆ÷µÄ´úÂë¡£

»¹¿ÉÒÔͨ¹ý·þÎñÆ÷¶ËÅäÖÃÎļþ£ºCVSROOT/modules£¬À´½«²»Í¬Ä¿Â¼¡¢Îļþ×éºÏ ³Éµ¥¶ÀµÄÄ£¿é£¬Ãâ³ýÁ˿ͻ§¶ËÔÚÒ»¸öĿ¼Ê÷϶à´Î Check ²»Í¬Ä¿Â¼µÄ·±Ëö¡£

ÈçÏÂÁ½¸ö·½Ê½Check´úÂëµÈͬ£¬µ«ÏÔÈ»µÚÒ»ÖÖ·½Ê½ºÃ¡£

·½Ê½Ò»£º ͨ¹ý·þÎñÆ÷¶ËµÄ modules ÅäÖÃÎļþ¿ØÖÆ

# cvs -d :pserver:jiangxin@10.0.0.152:/home/repos-user co CVSROOT
# cd CVSROOT
# vi modules
######## modify modules file as the follows:
johnson_homepage jiangxin/web &docbook/project &docbook/nightlybuild \
             &docbook/pm_fw_plan_2_4 &docbook/steam_trans \
             &docbook/docbook_howto &docbook/pgp &docbook/program_rules \
             &docbook/tip_sysconfig &docbook/images &docbook/pm_fw_diary_2_4 \
             &docbook/rd_hwenv &docbook/steam_admin &docbook/tip_sysinstall \
             &docbook/lession_scm &docbook/pm_fw_module_debug \
             &docbook/steam_howto

# cvs -d :pserver:jiangxin@10.0.0.152:/home/repos-user co -c
££ ÏÔʾ·þÎñÆ÷¶ËÅäÖÃÎļþ modules µÄÄÚÈÝ
# cvs -d :pserver:jiangxin@10.0.0.152:/home/repos-user co -d web johnson_homepage
££ Checkout ´úÂë

·½Ê½¶þ£º ͨ¹ýÔÚ¿Í»§¶Ë£¬ÔÚĿ¼Ê÷ϲ»Í¬µÄĿ¼ִÐв»Í¬µÄ Checkout ¶¯×÷ʵÏÖ¡£

# cvs -d :pserver:jiangxin@10.0.0.152:/home/repos-user co -d web jiangxin/web
# cd web
# ls
# mkdir docbook
# cd docbook
# cvs -d :pserver:jiangxin@10.0.0.152:/home/repos-user co -d project           docbook/project
# cvs -d :pserver:jiangxin@10.0.0.152:/home/repos-user co -d nightlybuild        docbook/nightlybuild
# cvs -d :pserver:jiangxin@10.0.0.152:/home/repos-user co -d pm_fw_plan_2_4      docbook/pm_fw_plan_2_4
# cvs -d :pserver:jiangxin@10.0.0.152:/home/repos-user co -d steam_trans         docbook/steam_trans
# cvs -d :pserver:jiangxin@10.0.0.152:/home/repos-user co -d docbook_howto       docbook/docbook_howto
# cvs -d :pserver:jiangxin@10.0.0.152:/home/repos-user co -d pgp                 docbook/pgp
# cvs -d :pserver:jiangxin@10.0.0.152:/home/repos-user co -d program_rules       docbook/program_rules
# cvs -d :pserver:jiangxin@10.0.0.152:/home/repos-user co -d tip_sysconfig       docbook/tip_sysconfig
# cvs -d :pserver:jiangxin@10.0.0.152:/home/repos-user co -d images              docbook/images
# cvs -d :pserver:jiangxin@10.0.0.152:/home/repos-user co -d pm_fw_diary_2_4     docbook/pm_fw_diary_2_4
# cvs -d :pserver:jiangxin@10.0.0.152:/home/repos-user co -d rd_hwenv            docbook/rd_hwenv
# cvs -d :pserver:jiangxin@10.0.0.152:/home/repos-user co -d steam_admin         docbook/steam_admin
# cvs -d :pserver:jiangxin@10.0.0.152:/home/repos-user co -d tip_sysinstall      docbook/tip_sysinstall
# cvs -d :pserver:jiangxin@10.0.0.152:/home/repos-user co -d lession_scm         docbook/lession_scm
# cvs -d :pserver:jiangxin@10.0.0.152:/home/repos-user co -d pm_fw_module_debug  docbook/pm_fw_module_debug
# cvs -d :pserver:jiangxin@10.0.0.152:/home/repos-user co -d steam_howto         docbook/steam_howto

·þÎñÆ÷¶ËĿ¼½á¹¹

# pwd
/home/repos-user

# mtree -cdin  -k type   

#          user: jiangxin
#       machine: openbsd
#          tree: /usr/home/repos-user
#          date: Tue Sep 10 21:34:26 2002
/set type=dir
.              
    CVSROOT        
        Emptydir       
        ..
    ..
    docbook        
        project      
        ..
        docbook_howto  
        ..
        images         
            callouts       
            ..
        ..
        lession_scm    
        ..
        nightlybuild   
        ..
        pgp            
            images         
            ..
        ..
        pm_fw_diary_2_4
        ..
        pm_fw_module_debug
        ..
        pm_fw_plan_2_4 
            Attic          
            ..
        ..
        program_rules  
        ..
        rd_hwenv       
        ..
        samples        
        ..
        steam_admin    
        ..
        steam_howto    
            images         
            ..
        ..
        steam_trans    
        ..
        tip_sysconfig  
        ..
        tip_sysinstall 
            images         
            ..
        ..
    ..
    jiangxin       
        text           
            apache         
            ..
            config.network.linux
            ..
            db.mysql       
            ..
            db.oracle      
                Attic          
                ..
            ..
            dns.bind       
            ..
            email.qmail    
            ..
            kernel.linux   
            ..
            security.linux 
            ..
            security.ssh   
            ..
            utility.cvs    
            ..
            utility.samba  
            ..
            utility.xwindow
            ..
        ..
        web            
            Attic          
            ..
            doc            
            ..
            html           
                resources      
                ..
            ..
            images         
                gif            
                ..
                png            
                ..
                xpi            
                ..
                xpm            
                ..
            ..
            resource       
                html           
                ..
                ipaddr         
                ..
                mailaddr       
                ..
                pgpkey         
                ..
            ..
            utility        
                ltutil         
                ..
            ..
        ..
    ..
..

¿Í»§¶ËĿ¼½á¹¹

# mtree -cdin  -k type 

#          user: jiangxin
#       machine: openbsd
#          tree: /usr/home/jiangxin/work/test
#          date: Tue Sep 10 21:24:33 2002
/set type=dir
.              
    web            
        CVS            
        ..
        doc            
            CVS            
            ..
        ..
        docbook        
            CVS            
            ..
            project      
                CVS            
                ..
            ..
            docbook_howto  
                CVS            
                ..
            ..
            images         
                CVS            
                ..
                callouts       
                    CVS            
                    ..
                ..
            ..
            lession_scm    
                CVS            
                ..
            ..
            nightlybuild   
                CVS            
                ..
            ..
            pgp            
                CVS            
                ..
                images         
                    CVS            
                    ..
                ..
            ..
            pm_fw_diary_2_4
                CVS            
                ..
            ..
            pm_fw_module_debug
                CVS            
                ..
            ..
            pm_fw_plan_2_4 
                CVS            
                ..
            ..
            program_rules  
                CVS            
                ..
            ..
            rd_hwenv       
                CVS            
                ..
            ..
            steam_admin    
                CVS            
                ..
            ..
            steam_howto    
                CVS            
                ..
                images         
                    CVS            
                    ..
                ..
            ..
            steam_trans    
                CVS            
                ..
            ..
            tip_sysconfig  
                CVS            
                ..
            ..
            tip_sysinstall 
                CVS            
                ..
                images         
                    CVS            
                    ..
                ..
            ..
        ..
        html           
            CVS            
            ..
            resources      
                CVS            
                ..
            ..
        ..
        images         
            CVS            
            ..
            gif            
                CVS            
                ..
            ..
            png            
                CVS            
                ..
            ..
            xpi            
                CVS            
                ..
            ..
            xpm            
                CVS            
                ..
            ..
        ..
        resource       
            CVS            
            ..
            html           
                CVS            
                ..
            ..
            ipaddr         
                CVS            
                ..
            ..
            mailaddr       
                CVS            
                ..
            ..
            pgpkey         
                CVS            
                ..
            ..
        ..
        utility        
            CVS            
            ..
            ltutil         
                CVS            
                ..
            ..
        ..
    ..
..

6.2. Starteam ÖеÄÎļþºÍĿ¼µÄ¹²Ïí

Starteam ¿ÉÒÔÔÚͬһ ServerConfiguration Öй²ÏíÊý¾Ý£¬¼È¿ÉÒÔÔÚ²»Í¬ÊÓͼ£¬ Òà¿ÉÔÚ²»Í¬µÄ¹¤³ÌÖй²Ïí¡£ÔÚͼÐνçÃæÏ²Ù×÷¼ò½à¡£

µ«ÃüÁîÐв»¾ßÓÐÏàÓ¦¹¦ÄÜ¡£

7. Starteam Howto

Õë¶Ô STARTEAM£¬Ð´ÁËÈçÏ HOWTO¡£Ô­ÒòÊÇͼÐνçÃæµÄ²Ù×÷¹ÌÈ»ÓÈÆä·½±ãÐÔ£¬µ«Ò²Ëæ´¦Âñ²Ø×ŵØÀס£

ÀýÈ磺ȨÏÞÉèÖò»µ±£¬ÈκÎÈË¿ÉÒÔÑ¡Ôñ¹¤³ÌµÄ¸ùĿ¼£¬°´Ò»ÏÂDEL¼ü£¬Ö»ÓÐÒ»´ÎÈ·ÈÏ»ú»á£¬±ã»áÔÚ²»µ½Ò»ÃëÖÖµÄʱ¼ä£¬É¾³ýÕû¸ö¹¤³ÌËùÓÐÎļþ¡£Èç¹ûÕâʱ²»ÖªËù´ë£¬ÖØÐÂÔÙ´ÎÖØ½¨Õû¸ö¹¤³Ì£¬±ÈÈçÖØÐ checkin Õû¸ö¹¤³ÌµÄ 5,000 ¸öÎļþ£¬Ôò·þÎñÆ÷ÖеÄÎļþ¸öÊý·­±¶¡£ÕâЩÎļþ×÷ΪÐÂÎļþ£¬²»µ«ÄãΪÕÒ²»»ØCommit LOG ¶øÍ·´ó£¬¹ÜÀíÔ±×ÜÓÐÒ»ÌìΪ·þÎñÆ÷´æ´¢¿Õ¼äÍ·´ó¡£

7.1. Server Configuration

7.1.1. Óû§½Ç¶È

ÔÚʹÓà starteam ¿Í»§¶ËÁ¬½Ó·þÎñÆ÷ǰ£¬Ê×ÏÈÒªÉèÖ÷þÎñÆ÷µÄIPµØÖ·£¬¶Ë¿ÚºÅµÈ²ÎÊý£¬ÒÔ½¨Á¢Á¬½Óstarteam·þÎñÆ÷µÄProfile¡£Õâ¿ÉÒÔ³ÆÎªÓû§ÑÛÖеÄServer Configuration¡£

ÓÃͼÐνçÃæµÄ starteam ¿Í»§¶Ë£¬ÈçÏ·½Ê½ÉèÖãº

  1. Project-->Open-->Add Server

  2. ÉèÖ÷þÎñÆ÷Ãû£¬IPµØÖ·£¬Ð­Ò飨TCP/IP Sockets£©£¬¶Ë¿Ú£¨49201£©£¬¼ÓÃÜ£¨Ñ¡ÔñÈÎÒâÒ»ÖÖ¼ÓÃÜ·½Ê½£©¡£

ÃüÁîÐÐ starteam £¬ÇëÓÃÎÒÃÇ×Ô¼º·â×°µÄ Wrapper: "st" ¡£

obsd99:/home/jiangxin/work/src/project/main>st config
StarTeam Configuration
Original starteam server is 10.1.1.60
new server:[10.1.1.60]
Original starteam server port is 49201
new server port:[49201]
original username is jiangxin
new username:[jiangxin]
Password:[********]
Original checkout project is project
Project you want to checkout:[project]
Original checkout view is  ("/" means root view)
View you want to checkout:[]
Original checkout folder is Development ("/" means root folder)
Folder you want to checkout:[Development]
Working dir is /usr/home/jiangxin/work/src/project/main
Your working directory:[/usr/home/jiangxin/work/src/project/main]
Sticky tag base on date :  ("/" means not exist)
Date:[]
Sticky tag base on label :  ("/" means not exist)
Label:[]
Sticky tag base on promotion-state :  ("/" means not exist)
Promotion-state:[]

Server ConfigurationµÄÅäÖñ£´æÔÚ¹¤×÷Ŀ¼ÖУ»Óû§¿ÚÁî¼ÓÃܱ£´æÔÚÓû§Ö÷Ŀ¼µÄÎļþ .stpass ÖС£

7.1.2. ¹ÜÀíÔ±½Ç¶È

  1. Ò»¸ö·þÎñÆ÷ÅäÖã¨Server Configuration£©£¬×÷Ϊһ¸ö¶ÀÁ¢µÄ·þÎñÔËÐУ¬ÓжÀÁ¢µÄ Óû§Êý¾Ý¿â£¬¶ÀÁ¢µÄ°æ±¾¿ØÖÆÎļþ²Ö¿â£¨Repository£©£¬¶ÀÁ¢µÄÒ»¸öÊý¾Ý¿âÀ´Ö§³Ö¡£

  2. һ̨·þÎñÆ÷ÉÏ¿ÉÒÔÔËÐжà¸ö²»Í¬µÄSTARTEAM·þÎñÆ÷ÅäÖ㬲»Í¬µÄSERVER CONFIGURATIONÐèÒª·ÖÅ䲻ͬµÄ¶Ë¿ÚÉèÖá£

  3. Ò»¸ö·þÎñÆ÷ÅäÖÃÄÚ¿ÉÒÔÔËÐжà¸ö¹¤³Ì£¨PROJECT£©£¬Ò»¸öProjectÖпÉÒÔÓжà¸öÊÓͼ £¨View£©£¬ÊÓͼÖÐÓÐĿ¼¡¢Îļþ¡¢Change RequestµÈÔªËØ×é³É¡£

  4. Ò»¸ö·þÎñÆ÷ÅäÖÃÖеÄÎļþµÈÔªËØ¿ÉÒÔÔÚ¹¤³ÌÖ®¼ä£¬ÊÓͼ֮¼ä¹²Ïí£¨ÀàËÆÓÚ¿½±´µÄ¶¯ ×÷£©£»µ«ÊÇÔªËØ²»ÄÜ¿ç·þÎñÆ÷ÅäÖù²Ïí¡£

  5. Îļþ½á¹¹£º

    ÅäÖÃÎļþ

    Configuration\server.scg

    Configuration\server.cph

  6. Êý¾Ý¿âÎļþ

    Database\StarTeamDB.mdb (Assuming Access database)

  7. Êý¾Ý²Ö¿â

    °æ±¾¿ØÖÆÎļþ²Ö¿â£¨Repository£©£ºVault/Archive/ £» °æ±¾¿ØÖÆÎļþ´æ´¢ÔÚ¸ÃĿ¼ÖУ¬ÆäÖÐûÓÐ×ÓĿ¼£¬ÎļþÃûÒÔÁ÷Ë®ºÅÒÀ´ÎÅÅÁУ» ÿ¸öÎļþ¿ØÖÆÒ»¸ö·ÖÖ§µÄËùÓа汾ÎļþµÄ¿ØÖÆ£¬ÀàËÆÓÚCVSµÄ°æ±¾¿ØÖÆÎļþ£¬µ«²»Í¬Ö® ´¦ÊǸÃÎļþ°üº¬¶þ½øÖƵÄͷ⣬Èç¹ûÎļþ·ÖÖ§£¬CVSÈÔÓÉÒ»¸öÎļþÀ´¿ØÖÆ£¬¶øSTARTEAM ÔòÐγÉÒ»¸öеÄÎļþ£»CVSµÄTAG°üº¬ÔÚÎļþÉÏ£¬¼´Èç¹û¶ÔÎļþ¼ÓTAG£¬Îļþ±»¸üУ¬¶ø STARTEAMµÄLABEL£¨Ï൱ÓÚCVSµÄTAG£©²»°üº¬ÔÚÎļþÖУ¬¶øÊÇ´æ´¢ÔÚÊý¾Ý¿âÖС£

  8. Cache

    CacheÎļþ¼ÐÊÇΪÁ˼ÓËÙÎļþCHECKOUT¡£µ±Ò»¸öÎļþ±»CHECKOUT£¬±ãÔÚ¸ÃĿ¼½¨Á¢ Cache£¬ÎļþÃû½á¹¹Îª£º"ÎļþÃû.°æ±¾ºÅ"¡£

  9. ÆäËû

    °üÀ¨LOG£¬Attachments£¨change request, TopicµÈµÄ¸½¼þÎļþ£©

7.2. Project

7.2.1. Óû§½Ç¶È

Ñ¡ÔñServer Configuration ÁÐ±í£¬ÊäÈëÕýÈ·µÄÓû§ÃûºÍÃÜÂ룬¼´´ò¿ª¸Ã Server Configuration ÏÂÄãÓÐȨÏ޵Ť³ÌÁÐ±í£¬Ñ¡Ôñijһ¹¤³Ì¡£

7.2.2. ¹ÜÀíÔ±½Ç¶È

  1. ÔÚ Server Configuration Ï£¬ÁбíÏÔʾµÄ¹¤³ÌÁÐ±í£¬¼´´ú±íÁËÒ»¸ö¸ö¹¤³Ì¡£

  2. ¹¤³ÌÊÇÓÉһϵÁÐÊÓͼ×é³É£¬¸ùÊÓͼͨ³£×÷Ϊ¹¤³ÌµÄȱʡÊÓͼ£¬Ö±½ÓÑ¡Ôñij¹¤³Ì£¬ºÍÑ¡Ôñ ȱʡÊÓͼµÄЧ¹ûÒ»Ö£»

    ´´½¨¹¤³Ì£¬¼´´´½¨¹¤³ÌµÄ¸ùÊÓͼ¡£¾¡Á¿ÔÚÉèÖÃȨÏÞʱ£¬°´ÕÕ¹¤³Ì¡¢ÊÓͼ¡¢Îļþ¼ÐµÄ·½Ê½ À´ÉèÖÃȨÏÞ¡£

  3. ÉèÖÃȨÏÞʱ£¬Ò»¶¨ÉèÖù¤³ÌºÍÊÓͼ²»Äܱ»ÈκÎÈËɾ³ý£¡ÒòΪһµ©É¾³ýÎÞ·¨Õһء£

7.3. View

  1. ͨ¹ý Project-->Open À´´ò¿ªÄ³Ò»¹¤³Ì£¬»áÏÔʾÊÓͼÁÐ±í¡£ÊÓͼ¼äµÄ¹ØÏµÍ¨¹ýÒ»¸öÊ÷ͼ ±íʾ³öÀ´¡£¸ùÊÓͼͨ³£×÷Ϊ¹¤³ÌµÄȱʡÊÓͼ£¬Ö±½ÓÑ¡Ôñij¹¤³Ì£¬ºÍÑ¡ÔñȱʡÊÓͼµÄЧ¹û Ò»Ö£»

  2. ¸ùÊÓͼͨ³£±íʾĿǰÕýÔÚ¿ª·¢µÄ°æ±¾£»¶ø·ÖÖ§ÊÓͼ±íʾά»¤µÄ¾É´úÂë·ÖÖ§£¬»òÕß¹¦ÄܶÀÁ¢ µÄ´úÂë·ÖÖ§£»

  3. ÊÓͼÊÇÖ÷ÒªÓÃ;ÊǹÜÀí·ÖÖ§£¬¼´½«Ò»¸ö·ÖÖ§×÷Ϊһ¸ö¶ÀÁ¢µÄÊÓͼ£»µ±È»Ò²¿ÉÒÔ¶Ô ²»Í¬Óû§½¨Á¢ÊÓͼ£¬µ«ÊÇͨ¹ý¶ÔĿ¼µÄȨÏÞ¿ØÖÆÀ´ÊµÏÖ²»Í¬Óû§Ê¹ÓÃͬһ¸öÊÓͼ¸üºÃ£»

  4. Èç¹û¶ÔÊÓͼÖв»Í¬Ä¿Â¼·Ö±ðÉèÖÃȨÏÞ£¬ÔòÓû§²é¿´¸ÃÊÓͼ£¬Ö»ÄÜ¿´µ½¾ßÓÐȨÏÞµÄĿ¼¡£

  5. labelÖ»ÔÚͬһ¸öÊÓͼÖÐÆð×÷Óã¬ÇÒView Label, Build Label, Promotion State ×÷ÓÃÓÚÒ»¸öÊÓͼÖÐËùÓÐÎļþ£»

  6. ÓÉÓÚChange RequestÐèÒªÓõ½Build Label£¬²âÊÔÈËÔ±Óõ½Promotion State£¬ Òò´ËÐèÒªÔÚͬһ¸öÊÓͼÄÚ´æ·Å³ÌÐòĿ¼£¬Change RequestĿ¼£¬²âÊÔÈËԱĿ¼µÈ£»µ« Îĵµ¾ßÓÐÏà¶Ô¶ÀÁ¢ÐÔ£¬½¨Òéµ¥¶À½¨Á¢¹¤³Ì£¬ÔÙ¹²Ïíµ½ÆäËû¹¤³ÌºÍÊÓͼÖС£

7.4. Branch

7.4.1. STARTEAMºÍCVSµÄ·ÖÖ§²»Í¬µã

  1. CVS»ùÓÚÎļþ¹ÜÀí£¬²»Í¬·ÖÖ§µÄͬһÎļþ£¬¼´Ê¹ÄÚÈݲ»Í¬£¬Ò²¶¼ÌåÏÖÔÚͬһ¸öÎļþÖУ» STARTEAM ½¨Á¢·ÖÖ§ÊÇ»ùÓÚ¹¤³ÌºÍÊý¾Ý¿â£¬Á½¸ö·ÖÖ§µÄÎļþ¿ÉÒÔÖ¸µ½Ò»¸öÏàͬµÄÎïÀíÎļþ£¬ Ò²¿ÉÒÔʹ²»Í¬µÄÎïÀíÎļþ£¬ÕâÑùÁ½¸ö·ÖÖ§µÄÎļþ¿ÉÒÔͬ²½±ä»¯£¨float branch£©£¬ Ò²¿ÉÒÔ·Ö±ð¶ÀÁ¢¿ØÖÆ£¨fixed branch£©£»

  2. CVS·ÖÖ§ÓÃtagÀ´¹ÜÀí£¬²»Í¬·ÖÖ§Óà rtag/tag -b À´½¨Á¢£¬²¢ÇÒ²»Í¬·ÖÖ§´òµÄ ·ÖÖ§tag»òtag£¬¿ÉÒÔ±»ÆäËû·ÖÖ§¿´µ½¡£ STARTEAM µÄ·ÖÖ§²»Í¨¹ý½¨Á¢±êǩʵÏÖ£¬¶øÊÇÉú³ÉÁíÍâµÄÒ»Ì×Êý¾Ý¿â¡£

  3. STARTEAM½¨Á¢·ÖÖ§µÄ·½Ê½£º

    • ͬһÊÓͼµÄ²»Í¬Ä¿Â¼

      ÁíÍ⽨Á¢Ò»¸öĿ¼×÷Ϊ·ÖÖ§µÄ¸ùĿ¼£¬ÓÃctrl+Drag½«Ô¤½¨Á¢·ÖÖ§µÄ°æ±¾ÔÚ ¸ÃĿ¼½¨Á¢¹²Ïí£¬ÔÙÑ¡ÔñBehavior¨¤Branch on change£»ÔòÔÚÕâЩÎļþÐ޸IJ¢checkin ʱ£¬»á½¨Á¢ÐÂÎļþ¶ø·ÖÖ§£»Ò²¿ÉÒÔΪ·½·¨1д´½¨µÄ·Ö֧Ŀ¼À´½¨Á¢ÊÓͼÀ´·½±ã¹ÜÀí¡£

    • ²»Í¬µÄÊÓͼ£¨½¨Á¢·ÖÖ§ÊÓͼ£©

      ´´½¨·ÖÖ§ÊÓͼ£¬ÔÚ´´½¨¹ý³ÌÖÐÑ¡ÔñPermit items to branch within this view£¬ À´´´½¨·ÖÖ§¡£·ÖÖ§ÊÓͼµÄºÃ´¦ÊÇ£¬ÓÐ×Ô¼º¶ÀÁ¢µÄlable(tag)ÃüÃû¿Õ¼ä£¬²»ÏóCVS Ö»ÓÐÒ»¸öTAGÃüÃû¿Õ¼ä¡£

    • ÍÆ¼öʹÓ÷ÖÖ§ÊÓͼ·½Ê½¡£

  4. CVS¡¢STARTEAM¶¼¿ÉÒÔʵÏÖ·ÖÖ§ºÍÖ÷Ïߺͺϲ¢¡£

    CVS ÃüÁîÐй¦ÄÜÇ¿´ó£¬¿ÉÒÔͨ¹ýÃüÁîÐÐÍê³É·ÖÖ§µÄ¹ÜÀí£»¶ø starteam ¶ÔÊÓͼµÄ¹ÜÀíÖ»ÄÜͨ¹ýͼÐνçÃæÊµÏÖ¡£

7.4.2. ½¨Á¢·ÖÖ§×¢ÒâÊÂÏî

7.4.2.1. Í¨¹ý·ÖÖ§ÊÓͼ½¨Á¢
  • ½¨Á¢ÐÂÊÓͼ£¬ÔÚ²½ÖèÒ»£¬Ñ¡ÔñÎļþ·ÖÖ§£¬Èçͼ

    ½¨Á¢·ÖÖ§ÊÓͼ²½ÖèÒ»

    ½¨Á¢·ÖÖ§ÊÓͼ²½ÖèÒ»

  • ÔÚ²½ÖèÎ壬עÒâ"Floating Configuration"ºÍ"Configure as ..."µÄÇø±ð

    ½¨Á¢·ÖÖ§ÊÓͼ²½ÖèÎå

    ½¨Á¢·ÖÖ§ÊÓͼ²½ÖèÎå

    Ò»°ãÇé¿öÏ£¬ÇëÑ¡Ôñ"Configure as ..."£¬ÕâÑùµ±½¨Á¢Íê³Éºó£¬³ÌÐò¼´¿Ì·ÖÖ§£¬·ñÔò Ñ¡Ôñ"Floating Configuration"£¬×ÓÊÓͼÔÚû×öÐÞ¸Äǰ£¬Ò»Ö±ºÍ¸¸ÊÓͼͬ²½£¬³ÆÎª "Variant View"¡£

    Èç¹ûÑ¡ÔñÁË"Floating Configuration"£¬¿ÉÒÔͨ¹ý½«·ÖÖ§ÊÓͼµÄËùÓÐÎļþÇ¿ÖÆ Check In£¬¼´¿É¡£

  • ÅжϽ¨Á¢ºÃµÄÊÓͼÊÇ·ñΪ·ÖÖ§ÊÓͼ£¬²é¿´ÊÓͼµÄÊôÐÔ¡£

    ÊÓͼµÄÊôÐÔ

    ÊÓͼµÄÊôÐÔ

7.4.2.2. Í¨¹ýÎļþ¹²Ïí½¨Á¢·ÖÖ§

½¨Á¢Ò»¸öĿ¼×÷Ϊ·ÖÖ§µÄ¸ùĿ¼£¬ÓÃctrl+Drag½«Ô¤½¨Á¢·ÖÖ§µÄ°æ±¾ÔÚ¸ÃĿ¼ ½¨Á¢¹²Ïí£¬ÔÙÑ¡ÔñBehavior->Branch on change£»ÔòÔÚÕâЩÎļþÐ޸IJ¢checkinʱ£¬ »á½¨Á¢ÐÂÎļþ¶ø·ÖÖ§£»

ͨ¹ý¸Ã·½·¨½¨Á¢µÄ·ÖÖ§£¬·ÖÖ§ÎļþÈÔºÍÖ÷¸ÉÎļþ±£³Öͬ²½£¬Ö±µ½·ÖÖ§µÄÎļþ ±»Ð޸Ķø²»ÊÇÖ÷¸ÉÎļþÐ޸쬷½½¨Á¢·ÖÖ§¡£

Èç¹ûÏë´ÓÒ»¿ªÊ¼±ã½¨Á¢·ÖÖ§£¬½«·ÖÖ§ÎļþÇ¿ÖÆ Check In£¬¼´¿É¡£

7.5. Label

STARTEAMµÄ±êÇ©£¨LABEL£©Ö÷ÒªÓÃÀ´¼Ç¼Ê¼þ£¬ÈçÀï³Ì±®£¬ºÍ´úÂë·Ö֧ûÓÐ ±ØÈ»µÄÁªÏµ£»¶ø CVS µÄ·ÖÖ§±ØÐëÒÀ¿¿ TAG À´Íê³É¡£

CVS µÄTAGÊǼǼÔÚÎļþÖУ¬½¨Á¢ tag £¬ºÄʱ£»Starteam µÄ LABELÊǽ¨Á¢ÔÚ Êý¾Ý¿â»ù´¡Éϵ쬽¨Á¢ label£¬ÊôÓÚºÁÃë¼°µÄ¶¯×÷¡£

Starteam µØ LABEL Êǽ¨Á¢ÔÚÊÓͼÖУ¬ÎļþºÍÊÓͼÍÑÀë¹ØÏµ£¬¸ÃÎļþÉ쵀 label ʧȥ¡£

ÈçºÎʹÓÃLABEL¹ÜÀíÏîÄ¿µÄʾÀý£¬²Î¼û£º http://www.fox.se/english/starteam/best_practices/starteam_best_practices.htm £¬ÌṩÁËSTARTEAMÀûÓÃLABELЭͬ¹¤×÷µÄ·¶Àý£¬ÕâЩ¹¤×÷ÓÐЩÊÇCVSºÜÄÑ×öµ½µÄ¡£

ÏÂÃæ¾ßÌå½éÉÜ label µÄ¼¸¸ö²»Í¬µÄ±äÖÖ£º View Label, Build Label, Promotion State, Revision Label¡£

7.5.1. View Label

  • View Label Õë¶ÔÒ»¸öViewÖÐËùÓÐÎļþ£¬¿ÉÒÔÓÃÀ´¼Ç¼ÏîÄ¿µÄÀï³Ì±®¡£

  • View Label·Ç³£Áé»î£¬¿ÉÒÔ½«ºóÀ´ÐÂÔö¼ÓµÄÎļþ¼ÓÈëµ½View LabelÖС£

  • ÎļþÒÆµ½µ½ÆäËûÊÓͼºÍÎļþɾ³ý¶Ôview label Óв»Í¬Ó°Ïì£ºÒÆ³öÎļþµÄ View Label»á×Ô¶¯È¥µô£¬²¢ÇÒÀúÊ·ÊÓͼ£¬¸ÃÎļþÒ²²»´æÔÚÁË£¬ÒòΪÎļþ±»Òƶ¯ÁË¡£ ɾ³ýµÄÎļþÔò²»È»£¬ÈÔ¿ÉÒÔͨ¹ýÀúÊ·±»·ÃÎʵ½£¬²¢ÇÒɾ³ýǰµÄÎļþÈÔÈ»¾ßÓиà View Label

7.5.2. Build label

  • ÔÚ´´½¨View LabelÖÐÓÐ"Use as Build Label"µÄÑ¡ÏĬÈÏ´´½¨µÄView Label ¾ÍÊÇBuild Label¡£

  • Build Label»ù±¾ÉϵÈͬÓÚView Label£¬³ýÁËBuild Label ÔÚChange RequestµÄ ¹¤×÷Á÷³ÌÖлᱻÒýÓõ½¡£Build Label¿ÉÒÔÓÃÀ´°ïÖú²âÊÔÈËÔ±Á˽âBugÔÚÄÄÒ»¸ö Build LabelÖб»½â¾öÁË¡£

7.5.3. Promotion state

  • Promotion State ¿ÉÒÔ¿´×÷ÊÇÊǸ¡¶¯µÄView Label£¬ View Label µÄ±êÇ©£»

  • ͨ³£Òª½¨Á¢µÄ Promotion State ÓУº Release, Beta Test, Alpha Test, ...¡£ ²¢ÇÒÒª°´ÕÕ˳Ðò½¨Á¢£¬ÕâÑù¿ÉÒÔͨ¹ýÌáÉý£¬½« Beta Test ¶ÔÓ¦µÄ Build Label£¬ ÌáÉýΪ Release£¬¼´Óà Release À´Ö¸Ïò Beta Test µÄLabel¡£

  • ½¨Á¢ÔÚView Label»ù´¡Ö®ÉÏ£¬Îª±àÒë Checkout ´úÂ룬Ìṩһ¸öÒ»ÖµÄLabel¡£ ¿ÉÒÔ·½±ãµØ½¨Á¢ Nightly Build ϵͳ¡£

7.5.4. Revision label

  • Revision label¿ÉÒÔÓÃÀ´¶ÔÒ»¸öÊÓͼÖе¥¶ÀµÄÎļþ»òijЩÎļþ £¨»òÔªËØÈçchange request£©£¬µ¥¶À½¨Á¢label¡£±ãÓÚÎļþ²éÕÒ¡£

  • ͬView LabelÒ»Ñù£¬ÎļþÈç¹û±»Òƶ¯µ½¸ÃÊÓͼ֮Í⣬ʧȥRevision Label¡£

7.6. Ä¿Â¼»®·Ö

±í 2. ÏîÄ¿¹¤³ÌĿ¼½á¹¹

Ŀ¼ ˵Ã÷ ȨÏÞ
Development ³ÌÐòÔ´Â룬¼°°ïÖú ×é³ÉÔ±ÍêȫȨÏÞ
Defect ÓÃÓڼǼȱÏÝ¿ØÖƵÄĿ¼ ×é³ÉÔ±¿ØÖÆchangRequestÍêȫȨÏÞ£»ËùÓÐÈ˾ßÓÐÌí¼ÓÐÞ¸ÄchangeRequestȨÏÞ
Document ÏîÄ¿Îĵµ ×é³ÉÔ±ÍêȫȨÏÞ£»Îĵµ¹¤³ÌʦÍêȫȨÏÞ¡££¨ÏÖÒÑ·ÏÆú²»Óã©
ProjectManagement ÏîÄ¿·¶Î§¿ØÖÆ£¬Ê±¼ä¿ØÖÆµÈ ×é³ÉÔ±¶ÁȨÏÞ£»ÏîÄ¿¾­ÀíÍêȫȨÏÞ

[¾¯¸æ]

ÒÔÉϸ÷¸öĿ¼£¬Ö»ÓÐÏîÄ¿¹ÜÀíÈËÔ±ºÍϵͳ¹ÜÀíÔ±¾ßÓÐÐ޸ݲȫÉèÖÃȨÏÞ¡£

7.6.1. Ô´ÂëµÄ°æ±¾¿ØÖÆ

  • DevelopmentĿ¼Ï½¨Á¢¸÷¸öÏà¹ØÄ£¿éĿ¼£»

  • Ä£¿éµÄĿ¼×éÖ¯½á¹¹Ó¦¸ÃºÍ checkout µ½±¾µØµÄ±àÒë´úÂëĿ¼½á¹¹Ò»Ö¡£

  • ×¢Òâ¶þ½øÖÆÎļþ¾¡Á¿²»Òª·ÅÔÚ Starteam ÖУ¬¶ø¸ÄÓÃÆäËü·½Ê½£¨ÈçÎļþ·þÎñÆ÷£©£¬ À´½øÐд洢£¡

CWAP 1.1·ÖÖ§ÊÓͼĿ¼½á¹¹Í¼

CWAP 1.1·ÖÖ§ÊÓͼĿ¼½á¹¹Í¼

7.6.2. ÎĵµµÄ°æ±¾¿ØÖÆ

ÎĵµµÄ¹ÜÀí£¬Éæ¼°µ½´óÁ¿µÄ¶þ½øÖÆÎĵµ£¨WORD£©£¬¸ÄÓÃÎļþ·þÎñÆ÷À´´æ´¢¡£

7.6.3. È±ÏÝ¿ØÖÆ

  • ½¨Á¢ Defect Ŀ¼£¬²¢ÔÚÆäϽ¨Á¢ÐèÒª²âÊÔµÄÏàӦģ¿éµÄĿ¼¡£

  • Ŀ¼µÄȨÏÞÉèÖÃΪֻ¶Á£¨¶ÔQA¾­Àí¿ª·Å½¨Á¢Ä¿Â¼È¨Ï޵ȣ©¡£ ¶ÔÓÚchange request£¬ÉèÖÃΪÈκÎÈË/QA/×éÄÚÈËÔ±¾ßÓÐÌí¼Ó£¬ÐÞ¸ÄȨÏ޵ȡ£

  • ½¨Á¢Defect TracingĿ¼£¬¶ø²»ÊÇÔÚ¸ùĿ¼Ï´æ·