| ÐÞ¶©ÀúÊ· | ||
|---|---|---|
| ÐÞ¶© 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£©
Ŀ¼
CVS ÊÇ¿ª·ÅÔ´ÂëµÄÒ»¸öÆæ¼££¬ÒàÊÇ¿ª·ÅÔ´ÂëµÃÒÔÑÓÐøºÍ·¢Õ¹µÄÍÆ¶¯Õߣ¬Êǰ汾¿ØÖƵľµä¡£CVS Êdz£Óõİ汾¿ØÖƹ¤¾ß¡£
Starteam ÊÇÒ»¸ö¼¯ºÏÁ˰汾¿ØÖƺÍȱÏÝ¿ØÖÆÁ½ÖÖ¹¦ÄܵÄÈí¼þ£¬²¢ÇÒ¾ßÓÐ CVS ûÓеÄÇ¿´óµÄͼÐνçÃæ£¬Ò×ѧÒ×Óá£2002Äêµ×±»Borland¹«Ë¾ÊÕ¹º£¬·¢Õ¹Ç°¾°Î´Öª£¬ËüÊÇÎÒÊÇÓõĵÚÒ»¸ö´óÐÍÉÌÓð汾¿ØÖÆÈí¼þ£¨ÕæµÄ¸¶ÁËMoneyµÄßÏ£©¡£
![]() |
|
|
ÆÀ¼Û CVS¡¢STARTEAM ÊëÓÅÊëÁÓ£¬ÊÇÒ»¸öÈÊÕß¼ûÈÊ£¬ÖÇÕß¼ûÖǵÄÎÊÌâ¡£ Starteam µÄͼÐλ¯½çÃæ£¬Äܹ»Ê¹³õѧÕßÒ×ÓÚ½ÓÊÕ£¬¶øÇÒÆäȱÏÝ¿ØÖƹ¦ÄܵŦÄÜ£¨»ùÓÚÊý¾Ý¿âµÄChange Request£©£¬ÊÇCVS ²»¾ßÓе쬏üÊÇÏàÓ¦¹¤¾ßÖжÀÊ÷Ò»Öĵġ£ CVSµÄÓÅÐã¿çƽ̨ÄÜÁ¦¡¢Ç¿´óµÄÃüÁîÐС¢ÇåÎúµÄ·þÎñÆ÷¶ËÊý¾Ý½á¹¹¸ü±ãÓÚÊý¾ÝµÄ±¸·Ý¡¢ÔÖÄѻָ´ºÍ¿É¿¿ÐÔ¡£Simple is Butiful Ë͸ø CVS Ò»¶¨Ã»´í¡£ |
²àÖØ²»Í¬
CVSרעÓÚÅäÖùÜÀíÈí¼þ·¶³ëÖеİ汾¹ÜÀíϵͳ¡£¶øÅäÖùÜÀíϵͳ³ýÁ˰üÀ¨°æ±¾¹ÜÀíÍ⣬»¹°üÀ¨¹¹½¨¹ÜÀí£¨Build Management£©ºÍȱÏݸú×Ùϵͳ¡£¶øStarteam°üÀ¨ÁËÕâÈýÏî¡£±¾ÎĵµÒ²¾ÍÖ»±È½ÏÆä°æ±¾¹ÜÀíϵͳµÄÒìͬ¡£
ȨÏÞ¿ØÖÆ
Ò»°ãÀ´Ëµ£¬CVSµÄȨÏÞÉèÖõ¥Ò»£¬Í¨³£Ö»ÄÜͨ¹ýCVSROOT/passwd, CVSROOT/readers, CVSROOT/writers Îļþ£¬Í¬Ê±»¹ÒªÉèÖÃCVS REPOSµÄÎïÀíĿ¼ȨÏÞÀ´Íê³ÉȨÏÞÉèÖã¬ÎÞ·¨Íê³É¸´ÔÓµÄȨÏÞ¿ØÖÆ£»¶øSTARTEAMÎÞÐèͨ¹ýÎïÀí·¾¶µÄȨÏÞÉèÖ㬶øÊÇͨ¹ý×Ô¼ºµÄÊý¾Ý¿â¹ÜÀí£¬ÊµÏÖÁËÀàËÆWINDOWS NTµÄÓòÓû§¹ÜÀíºÍĿ¼ÎļþACL¿ØÖÆ¡£
µ«ÊÇCVSͨ¹ýCVSROOTĿ¼ÏµĽű¾£¬ÌṩÁËÏàÓ¦¹¦ÄÜÀ©³äµÄ½Ó¿Ú£¬²»µ«¿ÉÒÔÍê³É¾«Ï¸µÄȨÏÞ¿ØÖÆ£¬»¹ÄÜÍê³É¸ü¼Ó¸öÐÔ»¯µÄ¹¦ÄÜ¡£
Ò×ÓÃÐÔ
StarteamµÄͼÐνçÃæ¹¦ÄÜÇ¿´ó£¬µ«ÆäÃüÁîÐй¦ÄܽÏCVSÈõ£¬ÐèÒª×Ô¼º±àдshell½Å±¾¼ÓÇ¿¡£¶øËæ×ÅWINCVS×÷ΪͼÐοͻ§¶ËµÄ¿ÉÓÃÐÔµÄÔöÇ¿£¬StarteamµÄÇ¿ÏîÕýÔÚ±»Ï÷Èõ¡£
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£©¡£
Îļþ»º´æ
Starteam ´æÔÚCACHEĿ¼£¬»º´æÁËËùÓÐ CheckoutµÄ°æ±¾µÄÎļþ£¬Òò´Ë CheckoutËٶȿ졣¶øCVSûÓлº´æ£¬check out¹ý³Ì½ÏÂý£¬ÓÈÆäÊÇ·ÖÖ§µÄ Checkout¡£
![]() |
|
µ«ÎҶԴ˱íʾ»³ÒÉ¡£ÓÈÆäÊÇStarteam Unix¿Í»§¶Ë»ùÓÚJAVA¼¼Êõ£¬ËÙ¶ÈÃ÷ÏÔ±ÈCVSÒªÂý¡£ |
²Ù×÷ÎļþÃûºÍĿ¼Ãû
CVSµÄREPOSITORYµÄÎïÀí´æ´¢½á¹¹¼´ÎªÏîÄ¿µÄ×éÖ¯½á¹¹£¬Ê¹µÃÎļþÃûÐ޸ĺÍĿ¼µÄÖØÐÂ×éÖ¯³ÉΪÄÑÌ⣬ÍùÍùÐèÒª¹ÜÀíԱȨÏÞÈ¥ÊÖ¶¯²Ù×÷Repository£»¶øSTARTEAMµÄRepositoryµÄÎļþ½á¹¹ºÍÊÓͼµÄÎļþ½á¹¹¿ÉÒÔÍêÈ«²»Í¬£¬Ä¿Â¼¡¢ÎļþÃûÐ޸ĺÍÒÆ¶¯·Ç³£·½±ã£¬»ùÓÚÊý¾Ý¿âµÄÎļþÃû¹ÜÀí»¹¿ÉÒÔ·½±ãµØÔÚ²»Í¬¹¤³ÌÖ®¼ä¹²ÏíÎļþ£¬Ðͬ¹¤×÷¡£
CVSÊdzÌÐòÔ±µÄ¹¤¾ß£¬STARTEAM»¹ÊǹÜÀíÏîÄ¿µÄ¹¤¾ß
¸öÈËÎļþ¹ÜÀí»òСÏîÄ¿µÄ×éÖ¯£¬ÐèÒªÇáÁ¿¼¶µÄ¹ÜÀí£¬ºÍÁé»îµÄÎļþµ¼Èë¡¢µ¼³ö£¬ÒÔ¼°ºÍ×ÔÓÉ´úÂëµÄ½»»¥£¬ÔòCVS£¬Perforce£¬PVCS£¬SourceSafeµÈÃæÏòÎļþµÄ°æ±¾¿ØÖÆÕ¼ÓÅÊÆ¡£¶ÔÓÚ¹«Ë¾¡¢´óÏîÄ¿£¬ÐèÒª¶ÀÁ¢µÄ²âÊÔ¡¢QAµÈ·Ö¹¤£¬»¹Òª¸ü¶àµÄ¿¼ÂǶàÑùµÄÓû§È¨ÏÞ¿ØÖÆ£¬Ò×ÓÃÐÔ£¨Í¼ÐνçÃæ£©£¬È±ÏÝ¿ØÖÆ£¬ÔòÐèÒªÃæÏò¹¤³ÌµÄSTARTEAMÀ´½øÐа汾¿ØÖƺͿª·¢¡£
CVSµÄÓÅÊÆ
CVSµÄÓÅÊÆ£ºÏîÄ¿Îļþ¿ÉÒÔ·½±ãµÄ×éºÏºÍÒÆÖ²£¬ÕâÊÇÒòΪCVSÒÔÎļþΪºËÐÄ£¬¼´ÃæÏòÎļþµÄ¹ÜÀí·½Ê½¡£¶øÇÒÄ¿Ç°ÍøÂçÉϺܶ࿪·ÅÔ´Âë¶¼²ÉÓÃCVS£¬¿ÉÒԺܺùµÍ¨¡£
CVSÅäÖüòµ¥¡¢½¡×³¡¢¿ÉÒÔºÜÈÝÒ×µØÒÆÖ²£»STARTEAM¼¯³É¶È½Ï¸ß£¬ÒÆÖ²¹ý³Ì¸´ÔÓ£¬ÐèÒªµÄ¹ÜÀí¸ºµ£´ó£¬ÐèÒªÍêÉÆµÄ±¸·Ý¼Æ»®¡£
CVSÊÇ¿ª·¢Ô´Â룬·þÎñÆ÷¶Ë´æ´¢Ò×ÓÚÀí½â£¬±ãÓÚ¿ØÖÆ£»¶øStarteamΪÉÌÒµÈí¼þ£¬·þÎñÆ÷¶Ë´æ´¢·½Ê½·â±Õ£¬ÄÑÒÔ¹ÜÀí¡£µ«ÊÇ CVS ²»ÌṩͼÐνçÃæ£¬Óнϳ¤µÄѧϰÇúÏß¡£
Starteam µÄÁÓÊÆ
²»Ö§³Ö·ÖÖ§µÄºÏ²¢£¬ÐèÒª¹ý¶àµÄÊÖ¶¯¸ÉÔ¤¡£¶øCVS¿ÉÒÔ×Ô¶¯Íê³É¡£
ËÙ¶ÈÂý£¬Ò»¶¨³Ì¶ÈÉÏÓ°Ï쿪·¢Ð§ÂÊ¡£
²»Ö§³Ö²¢Ðпª·¢£¬²»Äܺܺýâ¾öMergeµÄÎÊÌâ¡£¶øCVS¿ÉÒÔÖÇÄÜ Merge¡£
¹ÊÕϻָ´À§ÄÑ£¬ÐèÒªÓÐרְ¹ÜÀíԱά»¤¡£¶øCVSÒ×ÓÚά»¤¡£
ÆÀ¼ÛÓÅÁÓ£¬²»ÈçÏÈÓÃÏȵÃ
²»ÓÿÌÒâȥȡÉáÄÄÒ»¸ö£¬Ö»ÒªÓú㬼´¿É¡£¿öÇÒ£¬ÒѾÓÐÁËÍêÃÀµÄCVS¡¢STARTEAM»¥Ïàת»»µÄ·½·¨¡££¨²Î¼û£º¡¶CVS, Starteam»¥Ïàת»»¡·£©
ÏÂÃæÍ¨¹ý¶Ô CVS¡¢STARTEAM µÄ·þÎñÆ÷¶ËºÍ¿Í»§¶Ë¶ÔÕÕ£¬Á˽ⱳºóµÄÕæÏà¡£
/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 ...
´´½¨ÏµÍ³ÕʺÅ
¼ÙÉèĿ¼ /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$ useradd -g cvsuser -s /sbin/nologin cvs_jiangxin
$ useradd -g cvsuser -s /sbin/nologin cvs_johnson
´´½¨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_:cvsrootjiangxin:_passwd_here_:cvsproject johnson:_passwd_here_:cvsproject
anonymous::cvsproject
$ cat /repos/project/CVSROOT/readers anonymous
![]()
CVS Óû§Ð޸ĿÚÁî
ÎÒдÁËÒ»¸ö³ÌÐò£¬×÷ΪÓû§µÇ¼µÄ shell£¬ÔÊÐíÓû§Ô¶³Ì SSH µÇ¼£¬ÐÞ¸Ä×Ô¼ºµÄ Unix ϵͳ¿ÚÁîÒÔ¼° CVS Õ˺ſÚÁ²Î¼û£º¸½¼þ¡£Èç¹ûÄúÓиüºÃµÄ·½·¨£¬²»Áߴͽ̡£
Ö»ÄÜÒÔ 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$ chown -R cvsproject:cvsproject test $ chmod -R 770 test $ chmod -R g+s test
client$ cvs -d :pserver:jiangxin@10.0.0.7:/repos/project co test
client$ cvs -d :pserver:johnson@10.0.0.7:/repos/project co -d test2 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
ÓÚÊÇ´´½¨ÁËÁ½¸öÓû§¶ÀÕ¼µÄ¹¤³Ì¡£
È·Ê¡°²×°µÄ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¡£
¶¨Öƹý³Ì£º
Éý¼¶CVS
È·Èϰ²×°µÄCVS·þÎñÆ÷°æ±¾£¬Òª¸ßÓÚ 1.11.2 ¡£ÒòΪÎÒÃÇÒªÓõ½ÔÚ°æ±¾ 1.11.2 ²Å³öÏֵŦÄÜ£ºÄܹ»ÔÚ¼ì²écommit log ºóÖØÐ¶ÁÈë commit log£¬ÒÔʵÏÖ¶Ô commit log µÄ¸ñʽ»¯¡£
¶¨ÖÆ 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
|| (getpwuid($<))[0] || sprintf("uid#%d",$<);
@@ -83,6 +84,7 @@
# commit to what.
$AVAIL_FILE = "$CVSROOT/CVSROOT/avail";
+$BADSENDER_FILE = "$CVSROOT/CVSROOT/blocksender";
################
### 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
![]() |
|
»¹ÔÚ¸Ã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;$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";
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
+ +$MAIL_ON_DIR_CREATION = 0;
# 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 {
+# 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 = (
'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 = (
+ 'maillist1' => '^CVSROOT/', + 'maillist2' => '^src/', + 'cvsnone' => '.*', +); + +@TAG_MAP = (
+ 'jiangxin' => '^(release|mailstome).*', +); + +# Email addresses of recipients of commit mail. +$MAILADDRS = 'cvsnone';
+ + 1; # Perl requires all modules to return true. Don't delete!!!! #end
|
ÉèÖÃΪ0£¬²»Ç¿ÖÆÎļþÍ·°üº¬Ìض¨µÄCVS¹Ø¼ü×Ö¡£ |
|
ÉèÖð²×°µÄCVS·þÎñÆ÷µÄ×îµÍ°æ±¾Îª 1.11.2£» |
|
´´½¨Ä¿Â¼µÄʼþ£¬Ò²·¢ËÍÓʼþ¡£²Î¼û½Å±¾£º |
|
×¢Ê͸ú¯Êý£¬²»¼ì²éÓû§×é¡£ |
|
¶¨ÖƸÃÊý×飬½« CVS Ä£¿éµÄ commit log ´æ´¢ÔÚ¶ÔÓ¦µÄÎļþÖС£ |
|
Ìí¼Ó¹þÏ£±í @MAIL_MAP£¬ÉèÖÃÄ£¿éºÍÓû§ÓʼþµØÖ·µÄ¶ÔÓ¦¹ØÏµ£¬ÏàӦģ¿éµÄ commit£¬Í¨¹ýÓʼþ֪ͨÏàÓ¦Óû§¡£ |
|
Ìí¼Ó¹þÏ£±í @TAG_MAP£¬ÉèÖÃijЩ¸ñʽµÄTAGÖ»Äܱ»Ä³Ð©Óû§¹ÜÀí¡£ |
|
È·Ê¡µÄÓʼþµØÖ·¡£¶ÔÓÚûÓÐÔÚ MAIL_MAP Êý×éÕÒµ½Æ¥ÅäµÄÓʼþµØÖ·£¬¼´Ê¹ÓøõØÖ·¡£È·Ê¡Îª 'nobody'¡£ |
CVS ·þÎñÆ÷ÅäÖÃÎļþ£ºCVSROOT/config
#SystemAuth=no#LockDir=/var/lock/cvs
#TopLevelAdmin=no LogHistory=TOFEWGCMAR
RereadLogAfterVerify=always
![]()
Îļþ CVSROOT/cvsignore
ÉèÖð汾¿ØÖƹý³ÌÖУ¬ÐèÒªºöÂÔµÄÎļþ¡£ÕâЩÎļþ½«²»±»ÏÔʾΪδ֪״̬£¨"?"£©¡£È磺
*.db *.info *.[Sp]o *.core *.aps *.clw *.exe *.ncb *.obj *.opt *.plg Debug Release
![]() |
|
|
Òà¿ÉÓÉÿ¸öĿ¼ÏµÄÎļþ
¶ÔÓÚ WinCVS£¬ÔòÓÉÎļþ |
Îļþ CVSROOT/cvswrappers
Æ¥ÅäÎļþÃû£¬²¢×÷ÏàÓ¦´¦Àí¡£È磺 -kb ¼´ÒÔ¶þ½øÖÆ·½Ê½´¦ÀíÎļþ¡£
*.gif -k 'b' *.GIF -k 'b' *.jpg -k 'b' ...
Îļþ CVSROOT/modules
ÉèÖÃÊý¾Ý²Ö¿âÖеÄÄ£¿éÃû£¬¿ÉÒÔͨ¹ýÃüÁ¡°cvs co -c¡±²ì¿´µ±Ç°Êý¾Ý²Ö¿â£¨repository£©Öаüº¬µÄÄ£¿é/¹¤³ÌÃû³Æ¡£Ò²¿ÉÒÔÔÚµ÷Õû·þÎñÆ÷¶ËĿ¼½á¹¹Ê±£¬ÉèÖà modules À´±£³ÖºÍÒÔǰÉèÖõļæÈÝÐÔ¡£
CVSROOT CVSROOT module1 module2 &module3
Îļþ CVSROOT/checkoutlist
ÁÐÔÚ checkoutlist ÖеÄÎļþ£¬ÔÚ checkin ºó£¬Äܹ»×Ô¶¯ÔÚ·þÎñÆ÷ CVSROOT Ŀ¼ÖÐÖØ½¨¡£
#accessavail cfg.pm cfg_local.pm commit_prep.pl commitcheck cvs_acls.pl exclude log_accum.pl logcheck options rcstemplate tagcheck unwrap wrap
Îļþ CVSROOT/notify
µ±Óû§ÉèÖÃÁË watch Ò»¸öÎļþ£¬¿ÉÒÔ¶¨ÖƸÃÎļþ½øÐпØÖÆ¡£Ôڴ˸ÃÎļþδ±»Óõ½¡£
Îļþ 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
Îļþ 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;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 =~ /^\.+$/;
![]()
Îļþ 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";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);
+ 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 {
- 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
+ { + 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())
+ { + 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"
+ or die "Please check $cfg::MAILCMD."; + print MAIL map { "$_\n" } @email; + close MAIL; + } + exit(0); } @@ -634,8 +639,9 @@ # # Initialize basic variables # +my $separator=",,,";
my $input_params = $ARGV[0]; -my ($directory, @filenames) = split " ", $input_params; +my ($directory, @filenames) = split / ${separator}/, $input_params;
#@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/"));
+&append_line($MAILNAMES_FILE, &cfg::get_mail_name("$directory/"));
+&append_line($SUBJ_FILE, "$directory/(" . join(",", sort @filenames) .") ");
# # 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
Îļþ 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";
die "Usage: tagcheck tag action repos files...\n" unless $repos;
for my $i (0 .. ($#cfg::TAG_MAP - 1) / 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);
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
}
Îļþ 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
ÒÔÉÏ 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
Linux ACL µÄÏà¹Ø×ÊÔ´²Î¼û£º
Linux ACL Homepage
Using ACLs with Fedora Core 2
»¹ÓÐÎÒµÄÒ»¸ö Wiki Ò³Ãæ =)
ΪʲôҪʹÓà 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"
ÿһ¸ö·þÎñÆ÷ÅäÖÃÒ»¸ö¶ÀÁ¢µÄÓû§Êý¾Ý¿âÉèÖá£Óû§µÄȨÏÞÉèÖÃÁé»î£¬ºÍ±¾»úÕʺÅÉèÖÃÎ޹أ¨²»ÓÃÉèÖñ¾µØÕʺţ©£¬ÇҺͱ¾µØÂ·¾¶Î޹ء£
Èç¹ûʹÄÜÁËLockout¹¦ÄÜ£¬ÔòÐèÒª½¨Á¢Á½¸öϵͳ¹ÜÀíÔ±Õʺţ¬ÒÔ·ÀÖ¹Ò»¸ö±»Ëø¶¨£¨Èç¶à´Î´íÎóµÇ¼±»ÎÞÏÞÆÚËÀËø£©£¬ÄÜÓÃÁíÍâÒ»¸ö½âËø¡£
½¨×éÔÔò£¨¼ÙÉè×éÃûΪ 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 ×éÍ⣬ÈκÎ×é²»ÒªÉèÖÃ×éµÄȨÏÞ£¬ÒÔÃâ×éµÄȨÏÞÉèÖó¬Ô½ÁËÏîÄ¿µÄ°²È«ÉèÖã¬Ê¹¶ÔÏîÄ¿µÄ°²È«ÉèÖÃÐÎͬÐéÉè¡£
ÔÚUNIXÃüÁîÐÐÉϽøÐдúÂëµÄcheck in/check out£¬ÐèÒª½¨Á¢¶ÀÁ¢Óû§£¬È磺team1_release¡£ÒÔÃâÓÉÓÚʹÓÃͬһ¸öÓû§ÃûÔÚ²»Í¬¹¤×÷Õ¾check´úÂ룬Ôì³ÉÎļþ״̬UNKNOWSµÄÇé¿ö¡£²Î¼ûStarteam HowtoÖйØÓÚÎļþ״̬unknownµÄFAQ¡£
Starteam VTS µÄÆô¶¯·½Ê½ÉèÖÃΪNT·þÎñ·½Ê½
±£Ö¤·þÎñÆ÷ÖØÆôºó£¬Starteam×Ô¶¯Æô¶¯¡£
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ÃüÁîÐв»Ö§³Ö¡£
·ÃÎÊȨÏÞ£¨Access Rights£©
¹ÜÀíÔ±ÍêȫȨÏÞ£¬²»¸³ÓèÆäËüÓû§ÈκÎȨÏÞ¡£
ϵͳ²ßÂÔ£¨System Policy£©
Access Rights
ʹÄÜ Ignore object ownership, ¼´ºöÂÔOwnerShip£¬Ò»Çоù°´ÕÕȨÏÞÉèÖá£
²»Ñ¡Ôñ Ignore group privileges, ¼´ÔÚ±£Ö¤Ö»ÓÐ Administrators ×éÉèÖÃÁË×éȨÏÞÇé¿öÏ£¬ÔÊÐíAdministrators×éÓû§³¬Ô½ÏîÄ¿µÄȨÏÞÏÞÖÆÊµÊ©¹ÜÀí¡£
Security Events
ÉèÖÃÖ»±£Áô30ÌìµÄ°²È«ÈÕÖµ¡£
Passwords
ÉèÖÃÃÜÔ¿×îС³¤¶È6¸ö×Ö·û¡£
ÔÚÓû§¹ÜÀí£¨User manager£©½çÃæ£¬ÉèÖÃËùÓÐÓû§µÚÒ»´ÎµÇ¼±ØÐëÐ޸ĿÚÁ²¢ÇÒ²»ÔÊÐíÉèÖÿտÚÁî¡£
Logon Failures
ÉèÖÃ5´Îʧ°ÜµÇÂ¼Ëø¶¨Õʺţ¬ÕʺÅËø¶¨5·ÖÖÓ¡£
ÏÈ´ò¿ªÒªÅäÖõŤ³Ì£¬Project->Access Rights£¬À´ÉèÖù¤³ÌȨÏÞ¡£
Project
All Users
ÉèÖÃËùÓÐÓû§£¨All Users£©¾ßÓÐÈçÏÂȨÏÞ:
See Project and Properties
g_xxx_admin
ÉèÖÃ×é¹ÜÀíÔ±£¨È磺g_team1_admin ×飩¾ßÓÐÈçÏÂȨÏÞ£º
¸³Óè³ýÁË Delete project ÍâËùÓÐȨÏÞ¡£ÒÔ±ãÓÚ¹ÜÀíÔ±ÐÞ¸Ä×ÔÉíȨÏÞ£¬¸ø×Ô¼º¼ÓÉÏɾ³ýlabelȨÏ޵ȣ¬µ«Òª×¢ÒâȱʡûÓи³Óè¹ÜÀíÔ±µÄȨÏÞ£¬µ±¹ÜÀíÔ±Íê³ÉÏàÓ¦¹ÜÀí¹¦Äܺ󣬻ָ´Ô×´¡£
![]() |
|
²»Äܸ³¸øÈκÎÈËɾ³ý¹¤³ÌȨÏÞ£¡ÒòΪ¹¤³Ìɾ³ý²»¿ÉÄæ¡£ |
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 ȨÏÞ£¬µ«Òª×¢ÒâÍê³Éά»¤¹¦Äܺó£¬Á¢¼´È¥µô¸ÃÁ½ÏîȨÏÞ£¡ |
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 ÍâËùÓÐȨÏÞ¡£
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 ȨÏÞÒ²ÊÇΣÏÕ²Ù×÷£¬ÎļþÒÆ³öÊÓͼ£¬Ò²´ÓÀúÊ·ÊÓͼÖÐÈ¥µô£¬¿ÉÄÜ»áÆÆ»µÍêÕûÐÔ¡£µ«½«Îļþ»òÄ¿Â¼ÒÆ¶¯µ½ÁíÍâÒ»¸öÊÓͼ£¬ÊÇ´Ó·þÎñÆ÷¶Ëɾ³ýÎļþµÄΨһ°ì·¨¡£Òò´ËÉ÷Óᣠ|
Change Request
All Users
Ìí¼ÓËùÓÐÓû§£¨All Users£©£¬½«È¨ÏÞÉèÖÃΪ¿Õ¡£¼´Ä¬ÈϽûÖ¹Ò»ÇеIJßÂÔ¡£
![]() |
|
|
¹¤³ÌµÄȨÏÞÉèÖÃÖеÄChildFolders, Files, Change request µÈµÄȨÏÞÉèÖã¬ÓÃÀ´È·¶¨¹¤³ÌµÄĬÈÏÉèÖ᣼´ÎªÃ»ÓжԸ÷Ïî½øÐе¥¶ÀȨÏÞÉèÖÃʱµÄĬÈϰ²È«ÉèÖᣠ½« Change Request ¶¨ÒåΪĬÈϽûÖ¹Ò»ÇУ¬Ä¿µÄÊÇÖ»ÔÚÖ¸¶¨Ä¿Â¼Ìí¼Ó Change Request. |
All Users
ÉèÖÃËùÓÐÓû§£¨All Users£©¾ßÓÐÈçÏÂȨÏÞ£º
ÉèÖóýÁË ¡°Change topic security set¡±£¬¡°Delete Topic from folder¡±ÍâËùÓÐȨÏÞ¡£ÌṩÓû§Í¨¹ý TOPIC ½øÐÐÌÖÂÛÒÔ¼°±£´æ±¸Íü¡£
ÉèÖÃ×é¹ÜÀíÔ±£¨È磺g_team1_admin ×飩¾ßÓÐËùÓÐȨÏÞ¡£
ÏÈ´ò¿ªÒªÅäÖõÄÊÓͼ£¬View->Access Rights£¬À´ÉèÖÃÊÓͼȨÏÞ¡£
¸ùÊÓͼ
¿ÉÒÔ²»ÉèÖÃȨÏÞ£¬¼Ì³ÐÕû¸ö¹¤³ÌÖеÄProject AccessRightµÄ Views µÄ¸÷ÏîȨÏÞÉèÖá£
·ÖÖ§ÊÓͼ
°´ÐèÉèÖ᣿ÉÒÔʹÀϰ汾µÄά»¤ÓÉÆäËûÈËÍê³É£¬»òÕß½øÐÐ xp ģʽ¿ª·¢£¬Îª¿ª·¢Õߣ¨·Ç¹ÜÀíÔ±£©ÉèÖøü´óµÄȨÏÞ¡£
Ñ¡ÔñÊÓͼÏÂÏàÓ¦Îļþ¼Ð£¬Êó±êÓÒ¼üµ¥»÷£¬Ñ¡Ôñ Advanced->Access Rights£¬ÉèÖÃȨÏÞ¡£
ÐèÒªÏÈÉèÖá°¸ùĿ¼¡±È¨ÏÞ¡£ÔÙµ¥¶ÀÉèÖø÷Ò»¼¶×ÓĿ¼£¨defect, src, docµÈ£©µÄȨÏÞ¡£Èç¹ûÐèÒª»¹¿ÉÒÔ¶Ô¶þ¼¶Ä¿Â¼µÈ£¨Ä£¿é£©ÉèÖÃȨÏÞ£¬µ«²»½¨ÒéÉèÖöþ¼¶Ä¿Â¼µÄȨÏÞ¡£
¸ùĿ¼
¸ùĿ¼ºÍ×ÓĿ¼ÔÚȨÏÞÉèÖÃÉϵÄÒìͬ
¸ùĿ¼µÄȨÏÞ²»´«µÝ£¬¼´ÔÚ¸ùĿ¼ÉÏÉèÖõÄȨÏÞ¶ÔÅÉÉúµÄ×ÓÊÓͼûÓÐÓ°Ï죻¶ø·Ç¸ùĿ¼»á´«µÝȨÏÞ£¬ËùÒÔ¾¡Á¿²»ÒªÔÚ×ÓĿ¼£¨·Ç¸ùĿ¼£©ÉÏÉèÖÃȨÏÞ£¬ÒÔÃâÁ¬´øÓ°ÏìÆäËüÊÓͼÖиÃĿ¼µÄȨÏÞ£¬Ôì³É»ìÂÒ¡£
¸ùĿ¼¼Ì³ÐÊÓͼ»òÕß¹¤³ÌµÄ Child Folder ȨÏÞ£»×ÓĿ¼Ïȼ̳иùĿ¼ȨÏÞ£¬ Ôټ̳ÐÊÓͼ£¬¹¤³ÌȨÏÞ¡£
Òò´Ë£¬²»ÒªÉèÖøùĿ¼µÄȨÏÞÒ³µÄ 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
²»×÷ÉèÖã¬ÒԼ̳ÐÊÓͼ»òÕß¹¤³ÌµÄȨÏÞÉèÖá£
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
²»ÁíÍâÉèÖÃȨÏÞ£¬¼Ì³ÐÊÓͼ»òÕß¹¤³ÌµÄȨÏÞ¡£
src Ŀ¼
src Ŀ¼ÊÇÓÃÀ´´æ·ÅÔ´´úÂëµÄĿ¼£¬Ó¦×Å֨עÒⱾĿ¼ȨÏÞÉèÖá£
¿ÉÒÔ²»×÷Èκε¥¶ÀÉèÖã¬ÒòΪ¼Ì³ÐÁËÊÓͼ»òÕß¹¤³ÌµÄȨÏÞÉèÖá£Èç¹û¹¤³Ì»òÕßÊÓͼ¹ØÓÚÎļþµÄȨÏÞÉèÖÃ×ã¹»°²È«µÄ»°£¬¿ÉÒÔ²»±ØÉèÖñ¾Ä¿Â¼È¨ÏÞ¡£
ProjectManagement Ŀ¼
ProjectManagement Ŀ¼£¬ÓÃÓÚÒÔÎļþºÍ TOPICÐÎʽ´æ´¢ TODO_LIST, ±à³Ì¹æ·¶£¬ÐèÇó±ä¸ü¡£
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
Ôݲ»ÉèÖ㬲ÉÓù¤³Ìȱʡ½ûÓÃÅäÖá£
TODO LIST×ÓĿ¼
ËùÓÐÓû§¾ßÓÐÖ»¶ÁÎļþ£¬¶ÁдTOPICȨÏÞ£»g_pm_todo ×é ºÍ g_team1_admin×é¾ßÓжÁдÎļþ£¬¶Áдtopic£¬ºÍÕûÀíĿ¼ȨÏÞ¡£
±à³Ì¹æ·¶
ËùÓÐÓû§¶¼ÓÐÕûÀíĿ¼£¬¶ÁдtopicȨÏÞ£»g_team1_admin ¶àÁËÒ»Ïî¹ÜÀíÎļþµÄȨÏÞ¡£
ÐèÇó±ä¸ü
ËùÓÐÓû§¾ßÓÐÖ»¶ÁÎļþ£¬Ö»¶ÁTOPICȨÏÞ£»g_pm_req ×é ºÍ g_team1_admin ×é¾ßÓжÁдÎļþ£¬¶Áдtopic£¬ºÍÕûÀíĿ¼ȨÏÞ¡£
Êý¾Ý¿â¿ÉÒÔÓжàÖÖÑ¡Ôñ£¬µ«ÊÇ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
Ôö¼Ó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
±¸·ÝÉæ¼°µ½£º
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
$ 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µÄ·þÎñÆ÷¶Ë´æ´¢ºÍ¿Í»§¶ËµÄÊÇÒ»Ò»¶ÔÓ¦µÄ£¬Ê÷ÐεÄÎļþϵͳ¡£
![]() |
|
ÒÔϵÄʾÒ⣬ÊÇÔÚ 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µÄ·þÎñÆ÷¶Ë´æ´¢ºÍ¿Í»§¶ËÍêÈ«²»Í¬£¬·þÎñÆ÷¶ËÎļþ´æ´¢½á¹¹ÊÇÆ½Ãæ½á¹¹¡£ÎļþÃûºÍʵ¼ÊÎïÀí´æ´¢µÄ¶ÔÓ¦ÊÇͨ¹ýÊý¾Ý¿âÀ´ÊµÏֵġ£
ÉèÖà 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
ÏÂÃæÒÔÎÒÃÇ×Ô¼º£¬(×îÔçÓÉÑîÖÂΰ·â×°£¬ºó¾ 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£¬ÒòΪÃüÁîÐÐûÓÐÌṩ¼òµ¥µÄ¶ÁÈ¡·þÎñÆ÷¶Ë Êý¾Ý¿âµÄ·½·¨¡£
±í 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 |
½¨Á¢Ð¹¤³Ì |
¿Í»§¶Ëͨ¹ý±¾µØÅäÖÃÎļþ£¨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
..
..
..
..
..
Õë¶Ô STARTEAM£¬Ð´ÁËÈçÏ HOWTO¡£ÔÒòÊÇͼÐνçÃæµÄ²Ù×÷¹ÌÈ»ÓÈÆä·½±ãÐÔ£¬µ«Ò²Ëæ´¦Âñ²Ø×ŵØÀס£
ÀýÈ磺ȨÏÞÉèÖò»µ±£¬ÈκÎÈË¿ÉÒÔÑ¡Ôñ¹¤³ÌµÄ¸ùĿ¼£¬°´Ò»ÏÂDEL¼ü£¬Ö»ÓÐÒ»´ÎÈ·ÈÏ»ú»á£¬±ã»áÔÚ²»µ½Ò»ÃëÖÖµÄʱ¼ä£¬É¾³ýÕû¸ö¹¤³ÌËùÓÐÎļþ¡£Èç¹ûÕâʱ²»ÖªËù´ë£¬ÖØÐÂÔÙ´ÎÖØ½¨Õû¸ö¹¤³Ì£¬±ÈÈçÖØÐ checkin Õû¸ö¹¤³ÌµÄ 5,000 ¸öÎļþ£¬Ôò·þÎñÆ÷ÖеÄÎļþ¸öÊý·±¶¡£ÕâЩÎļþ×÷ΪÐÂÎļþ£¬²»µ«ÄãΪÕÒ²»»ØCommit LOG ¶øÍ·´ó£¬¹ÜÀíÔ±×ÜÓÐÒ»ÌìΪ·þÎñÆ÷´æ´¢¿Õ¼äÍ·´ó¡£
ÔÚʹÓà starteam ¿Í»§¶ËÁ¬½Ó·þÎñÆ÷ǰ£¬Ê×ÏÈÒªÉèÖ÷þÎñÆ÷µÄIPµØÖ·£¬¶Ë¿ÚºÅµÈ²ÎÊý£¬ÒÔ½¨Á¢Á¬½Óstarteam·þÎñÆ÷µÄProfile¡£Õâ¿ÉÒÔ³ÆÎªÓû§ÑÛÖеÄServer Configuration¡£
ÓÃͼÐνçÃæµÄ starteam ¿Í»§¶Ë£¬ÈçÏ·½Ê½ÉèÖãº
Project-->Open-->Add Server
ÉèÖ÷þÎñÆ÷Ãû£¬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 ÖС£
Ò»¸ö·þÎñÆ÷ÅäÖã¨Server Configuration£©£¬×÷Ϊһ¸ö¶ÀÁ¢µÄ·þÎñÔËÐУ¬ÓжÀÁ¢µÄ Óû§Êý¾Ý¿â£¬¶ÀÁ¢µÄ°æ±¾¿ØÖÆÎļþ²Ö¿â£¨Repository£©£¬¶ÀÁ¢µÄÒ»¸öÊý¾Ý¿âÀ´Ö§³Ö¡£
һ̨·þÎñÆ÷ÉÏ¿ÉÒÔÔËÐжà¸ö²»Í¬µÄSTARTEAM·þÎñÆ÷ÅäÖ㬲»Í¬µÄSERVER CONFIGURATIONÐèÒª·ÖÅ䲻ͬµÄ¶Ë¿ÚÉèÖá£
Ò»¸ö·þÎñÆ÷ÅäÖÃÄÚ¿ÉÒÔÔËÐжà¸ö¹¤³Ì£¨PROJECT£©£¬Ò»¸öProjectÖпÉÒÔÓжà¸öÊÓͼ £¨View£©£¬ÊÓͼÖÐÓÐĿ¼¡¢Îļþ¡¢Change RequestµÈÔªËØ×é³É¡£
Ò»¸ö·þÎñÆ÷ÅäÖÃÖеÄÎļþµÈÔªËØ¿ÉÒÔÔÚ¹¤³ÌÖ®¼ä£¬ÊÓͼ֮¼ä¹²Ïí£¨ÀàËÆÓÚ¿½±´µÄ¶¯ ×÷£©£»µ«ÊÇÔªËØ²»ÄÜ¿ç·þÎñÆ÷ÅäÖù²Ïí¡£
Îļþ½á¹¹£º
ÅäÖÃÎļþ
Configuration\server.scg
Configuration\server.cph
Êý¾Ý¿âÎļþ
Database\StarTeamDB.mdb (Assuming Access database)
Êý¾Ý²Ö¿â
°æ±¾¿ØÖÆÎļþ²Ö¿â£¨Repository£©£ºVault/Archive/ £» °æ±¾¿ØÖÆÎļþ´æ´¢ÔÚ¸ÃĿ¼ÖУ¬ÆäÖÐûÓÐ×ÓĿ¼£¬ÎļþÃûÒÔÁ÷Ë®ºÅÒÀ´ÎÅÅÁУ» ÿ¸öÎļþ¿ØÖÆÒ»¸ö·ÖÖ§µÄËùÓа汾ÎļþµÄ¿ØÖÆ£¬ÀàËÆÓÚCVSµÄ°æ±¾¿ØÖÆÎļþ£¬µ«²»Í¬Ö® ´¦ÊǸÃÎļþ°üº¬¶þ½øÖƵÄͷ⣬Èç¹ûÎļþ·ÖÖ§£¬CVSÈÔÓÉÒ»¸öÎļþÀ´¿ØÖÆ£¬¶øSTARTEAM ÔòÐγÉÒ»¸öеÄÎļþ£»CVSµÄTAG°üº¬ÔÚÎļþÉÏ£¬¼´Èç¹û¶ÔÎļþ¼ÓTAG£¬Îļþ±»¸üУ¬¶ø STARTEAMµÄLABEL£¨Ï൱ÓÚCVSµÄTAG£©²»°üº¬ÔÚÎļþÖУ¬¶øÊÇ´æ´¢ÔÚÊý¾Ý¿âÖС£
Cache
CacheÎļþ¼ÐÊÇΪÁ˼ÓËÙÎļþCHECKOUT¡£µ±Ò»¸öÎļþ±»CHECKOUT£¬±ãÔÚ¸ÃĿ¼½¨Á¢ Cache£¬ÎļþÃû½á¹¹Îª£º"ÎļþÃû.°æ±¾ºÅ"¡£
ÆäËû
°üÀ¨LOG£¬Attachments£¨change request, TopicµÈµÄ¸½¼þÎļþ£©
Ñ¡ÔñServer Configuration ÁÐ±í£¬ÊäÈëÕýÈ·µÄÓû§ÃûºÍÃÜÂ룬¼´´ò¿ª¸Ã Server Configuration ÏÂÄãÓÐȨÏ޵Ť³ÌÁÐ±í£¬Ñ¡Ôñijһ¹¤³Ì¡£
ÔÚ Server Configuration Ï£¬ÁбíÏÔʾµÄ¹¤³ÌÁÐ±í£¬¼´´ú±íÁËÒ»¸ö¸ö¹¤³Ì¡£
¹¤³ÌÊÇÓÉһϵÁÐÊÓͼ×é³É£¬¸ùÊÓͼͨ³£×÷Ϊ¹¤³ÌµÄȱʡÊÓͼ£¬Ö±½ÓÑ¡Ôñij¹¤³Ì£¬ºÍÑ¡Ôñ ȱʡÊÓͼµÄЧ¹ûÒ»Ö£»
´´½¨¹¤³Ì£¬¼´´´½¨¹¤³ÌµÄ¸ùÊÓͼ¡£¾¡Á¿ÔÚÉèÖÃȨÏÞʱ£¬°´ÕÕ¹¤³Ì¡¢ÊÓͼ¡¢Îļþ¼ÐµÄ·½Ê½ À´ÉèÖÃȨÏÞ¡£
ÉèÖÃȨÏÞʱ£¬Ò»¶¨ÉèÖù¤³ÌºÍÊÓͼ²»Äܱ»ÈκÎÈËɾ³ý£¡ÒòΪһµ©É¾³ýÎÞ·¨Õһء£
ͨ¹ý Project-->Open À´´ò¿ªÄ³Ò»¹¤³Ì£¬»áÏÔʾÊÓͼÁÐ±í¡£ÊÓͼ¼äµÄ¹ØÏµÍ¨¹ýÒ»¸öÊ÷ͼ ±íʾ³öÀ´¡£¸ùÊÓͼͨ³£×÷Ϊ¹¤³ÌµÄȱʡÊÓͼ£¬Ö±½ÓÑ¡Ôñij¹¤³Ì£¬ºÍÑ¡ÔñȱʡÊÓͼµÄЧ¹û Ò»Ö£»
¸ùÊÓͼͨ³£±íʾĿǰÕýÔÚ¿ª·¢µÄ°æ±¾£»¶ø·ÖÖ§ÊÓͼ±íʾά»¤µÄ¾É´úÂë·ÖÖ§£¬»òÕß¹¦ÄܶÀÁ¢ µÄ´úÂë·ÖÖ§£»
ÊÓͼÊÇÖ÷ÒªÓÃ;ÊǹÜÀí·ÖÖ§£¬¼´½«Ò»¸ö·ÖÖ§×÷Ϊһ¸ö¶ÀÁ¢µÄÊÓͼ£»µ±È»Ò²¿ÉÒÔ¶Ô ²»Í¬Óû§½¨Á¢ÊÓͼ£¬µ«ÊÇͨ¹ý¶ÔĿ¼µÄȨÏÞ¿ØÖÆÀ´ÊµÏÖ²»Í¬Óû§Ê¹ÓÃͬһ¸öÊÓͼ¸üºÃ£»
Èç¹û¶ÔÊÓͼÖв»Í¬Ä¿Â¼·Ö±ðÉèÖÃȨÏÞ£¬ÔòÓû§²é¿´¸ÃÊÓͼ£¬Ö»ÄÜ¿´µ½¾ßÓÐȨÏÞµÄĿ¼¡£
labelÖ»ÔÚͬһ¸öÊÓͼÖÐÆð×÷Óã¬ÇÒView Label, Build Label, Promotion State ×÷ÓÃÓÚÒ»¸öÊÓͼÖÐËùÓÐÎļþ£»
ÓÉÓÚChange RequestÐèÒªÓõ½Build Label£¬²âÊÔÈËÔ±Óõ½Promotion State£¬ Òò´ËÐèÒªÔÚͬһ¸öÊÓͼÄÚ´æ·Å³ÌÐòĿ¼£¬Change RequestĿ¼£¬²âÊÔÈËԱĿ¼µÈ£»µ« Îĵµ¾ßÓÐÏà¶Ô¶ÀÁ¢ÐÔ£¬½¨Òéµ¥¶À½¨Á¢¹¤³Ì£¬ÔÙ¹²Ïíµ½ÆäËû¹¤³ÌºÍÊÓͼÖС£
CVS»ùÓÚÎļþ¹ÜÀí£¬²»Í¬·ÖÖ§µÄͬһÎļþ£¬¼´Ê¹ÄÚÈݲ»Í¬£¬Ò²¶¼ÌåÏÖÔÚͬһ¸öÎļþÖУ» STARTEAM ½¨Á¢·ÖÖ§ÊÇ»ùÓÚ¹¤³ÌºÍÊý¾Ý¿â£¬Á½¸ö·ÖÖ§µÄÎļþ¿ÉÒÔÖ¸µ½Ò»¸öÏàͬµÄÎïÀíÎļþ£¬ Ò²¿ÉÒÔʹ²»Í¬µÄÎïÀíÎļþ£¬ÕâÑùÁ½¸ö·ÖÖ§µÄÎļþ¿ÉÒÔͬ²½±ä»¯£¨float branch£©£¬ Ò²¿ÉÒÔ·Ö±ð¶ÀÁ¢¿ØÖÆ£¨fixed branch£©£»
CVS·ÖÖ§ÓÃtagÀ´¹ÜÀí£¬²»Í¬·ÖÖ§Óà rtag/tag -b À´½¨Á¢£¬²¢ÇÒ²»Í¬·ÖÖ§´òµÄ ·ÖÖ§tag»òtag£¬¿ÉÒÔ±»ÆäËû·ÖÖ§¿´µ½¡£ STARTEAM µÄ·ÖÖ§²»Í¨¹ý½¨Á¢±êǩʵÏÖ£¬¶øÊÇÉú³ÉÁíÍâµÄÒ»Ì×Êý¾Ý¿â¡£
STARTEAM½¨Á¢·ÖÖ§µÄ·½Ê½£º
ͬһÊÓͼµÄ²»Í¬Ä¿Â¼
ÁíÍ⽨Á¢Ò»¸öĿ¼×÷Ϊ·ÖÖ§µÄ¸ùĿ¼£¬ÓÃctrl+Drag½«Ô¤½¨Á¢·ÖÖ§µÄ°æ±¾ÔÚ ¸ÃĿ¼½¨Á¢¹²Ïí£¬ÔÙÑ¡ÔñBehavior¨¤Branch on change£»ÔòÔÚÕâЩÎļþÐ޸IJ¢checkin ʱ£¬»á½¨Á¢ÐÂÎļþ¶ø·ÖÖ§£»Ò²¿ÉÒÔΪ·½·¨1д´½¨µÄ·Ö֧Ŀ¼À´½¨Á¢ÊÓͼÀ´·½±ã¹ÜÀí¡£
²»Í¬µÄÊÓͼ£¨½¨Á¢·ÖÖ§ÊÓͼ£©
´´½¨·ÖÖ§ÊÓͼ£¬ÔÚ´´½¨¹ý³ÌÖÐÑ¡ÔñPermit items to branch within this view£¬ À´´´½¨·ÖÖ§¡£·ÖÖ§ÊÓͼµÄºÃ´¦ÊÇ£¬ÓÐ×Ô¼º¶ÀÁ¢µÄlable(tag)ÃüÃû¿Õ¼ä£¬²»ÏóCVS Ö»ÓÐÒ»¸öTAGÃüÃû¿Õ¼ä¡£
ÍÆ¼öʹÓ÷ÖÖ§ÊÓͼ·½Ê½¡£
CVS¡¢STARTEAM¶¼¿ÉÒÔʵÏÖ·ÖÖ§ºÍÖ÷Ïߺͺϲ¢¡£
CVS ÃüÁîÐй¦ÄÜÇ¿´ó£¬¿ÉÒÔͨ¹ýÃüÁîÐÐÍê³É·ÖÖ§µÄ¹ÜÀí£»¶ø starteam ¶ÔÊÓͼµÄ¹ÜÀíÖ»ÄÜͨ¹ýͼÐνçÃæÊµÏÖ¡£
½¨Á¢ÐÂÊÓͼ£¬ÔÚ²½ÖèÒ»£¬Ñ¡ÔñÎļþ·ÖÖ§£¬Èçͼ

½¨Á¢·ÖÖ§ÊÓͼ²½ÖèÒ»
ÔÚ²½ÖèÎ壬עÒâ"Floating Configuration"ºÍ"Configure as ..."µÄÇø±ð

½¨Á¢·ÖÖ§ÊÓͼ²½ÖèÎå
Ò»°ãÇé¿öÏ£¬ÇëÑ¡Ôñ"Configure as ..."£¬ÕâÑùµ±½¨Á¢Íê³Éºó£¬³ÌÐò¼´¿Ì·ÖÖ§£¬·ñÔò Ñ¡Ôñ"Floating Configuration"£¬×ÓÊÓͼÔÚû×öÐÞ¸Äǰ£¬Ò»Ö±ºÍ¸¸ÊÓͼͬ²½£¬³ÆÎª "Variant View"¡£
Èç¹ûÑ¡ÔñÁË"Floating Configuration"£¬¿ÉÒÔͨ¹ý½«·ÖÖ§ÊÓͼµÄËùÓÐÎļþÇ¿ÖÆ Check In£¬¼´¿É¡£
ÅжϽ¨Á¢ºÃµÄÊÓͼÊÇ·ñΪ·ÖÖ§ÊÓͼ£¬²é¿´ÊÓͼµÄÊôÐÔ¡£

ÊÓͼµÄÊôÐÔ
½¨Á¢Ò»¸öĿ¼×÷Ϊ·ÖÖ§µÄ¸ùĿ¼£¬ÓÃctrl+Drag½«Ô¤½¨Á¢·ÖÖ§µÄ°æ±¾ÔÚ¸ÃĿ¼ ½¨Á¢¹²Ïí£¬ÔÙÑ¡ÔñBehavior->Branch on change£»ÔòÔÚÕâЩÎļþÐ޸IJ¢checkinʱ£¬ »á½¨Á¢ÐÂÎļþ¶ø·ÖÖ§£»
ͨ¹ý¸Ã·½·¨½¨Á¢µÄ·ÖÖ§£¬·ÖÖ§ÎļþÈÔºÍÖ÷¸ÉÎļþ±£³Öͬ²½£¬Ö±µ½·ÖÖ§µÄÎļþ ±»Ð޸Ķø²»ÊÇÖ÷¸ÉÎļþÐ޸쬷½½¨Á¢·ÖÖ§¡£
Èç¹ûÏë´ÓÒ»¿ªÊ¼±ã½¨Á¢·ÖÖ§£¬½«·ÖÖ§ÎļþÇ¿ÖÆ Check In£¬¼´¿É¡£
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¡£
View Label Õë¶ÔÒ»¸öViewÖÐËùÓÐÎļþ£¬¿ÉÒÔÓÃÀ´¼Ç¼ÏîÄ¿µÄÀï³Ì±®¡£
View Label·Ç³£Áé»î£¬¿ÉÒÔ½«ºóÀ´ÐÂÔö¼ÓµÄÎļþ¼ÓÈëµ½View LabelÖС£
ÎļþÒÆµ½µ½ÆäËûÊÓͼºÍÎļþɾ³ý¶Ôview label Óв»Í¬Ó°Ïì£ºÒÆ³öÎļþµÄ View Label»á×Ô¶¯È¥µô£¬²¢ÇÒÀúÊ·ÊÓͼ£¬¸ÃÎļþÒ²²»´æÔÚÁË£¬ÒòΪÎļþ±»Òƶ¯ÁË¡£ ɾ³ýµÄÎļþÔò²»È»£¬ÈÔ¿ÉÒÔͨ¹ýÀúÊ·±»·ÃÎʵ½£¬²¢ÇÒɾ³ýǰµÄÎļþÈÔÈ»¾ßÓиà View Label
ÔÚ´´½¨View LabelÖÐÓÐ"Use as Build Label"µÄÑ¡ÏĬÈÏ´´½¨µÄView Label ¾ÍÊÇBuild Label¡£
Build Label»ù±¾ÉϵÈͬÓÚView Label£¬³ýÁËBuild Label ÔÚChange RequestµÄ ¹¤×÷Á÷³ÌÖлᱻÒýÓõ½¡£Build Label¿ÉÒÔÓÃÀ´°ïÖú²âÊÔÈËÔ±Á˽âBugÔÚÄÄÒ»¸ö Build LabelÖб»½â¾öÁË¡£
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 ϵͳ¡£
±í 2. ÏîÄ¿¹¤³ÌĿ¼½á¹¹
| Ŀ¼ | ˵Ã÷ | ȨÏÞ |
|---|---|---|
| Development | ³ÌÐòÔ´Â룬¼°°ïÖú | ×é³ÉÔ±ÍêȫȨÏÞ |
| Defect | ÓÃÓڼǼȱÏÝ¿ØÖƵÄĿ¼ | ×é³ÉÔ±¿ØÖÆchangRequestÍêȫȨÏÞ£»ËùÓÐÈ˾ßÓÐÌí¼ÓÐÞ¸ÄchangeRequestȨÏÞ |
| Document | ÏîÄ¿Îĵµ | ×é³ÉÔ±ÍêȫȨÏÞ£»Îĵµ¹¤³ÌʦÍêȫȨÏÞ¡££¨ÏÖÒÑ·ÏÆú²»Óã© |
| ProjectManagement | ÏîÄ¿·¶Î§¿ØÖÆ£¬Ê±¼ä¿ØÖÆµÈ | ×é³ÉÔ±¶ÁȨÏÞ£»ÏîÄ¿¾ÀíÍêȫȨÏÞ |
![]() |
|
ÒÔÉϸ÷¸öĿ¼£¬Ö»ÓÐÏîÄ¿¹ÜÀíÈËÔ±ºÍϵͳ¹ÜÀíÔ±¾ßÓÐÐ޸ݲȫÉèÖÃȨÏÞ¡£ |
DevelopmentĿ¼Ï½¨Á¢¸÷¸öÏà¹ØÄ£¿éĿ¼£»
Ä£¿éµÄĿ¼×éÖ¯½á¹¹Ó¦¸ÃºÍ checkout µ½±¾µØµÄ±àÒë´úÂëĿ¼½á¹¹Ò»Ö¡£
×¢Òâ¶þ½øÖÆÎļþ¾¡Á¿²»Òª·ÅÔÚ Starteam ÖУ¬¶ø¸ÄÓÃÆäËü·½Ê½£¨ÈçÎļþ·þÎñÆ÷£©£¬ À´½øÐд洢£¡

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