· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Docbook Sgml/CVS_Tutorial-KLDP

You are not allowed to 'fullsearch'


CVS »ç¿ë

CVS »ç¿ë

±è¹Î½Ä

          
        

¹Ú¿ëÁÖ

¹®¼­ Çü½ÄÀ» DocBookÀ¸·Î Àüȯ

          
        

$Date: 2007/02/12 07:21:06 $

고친 과정
고침 1.12002/01/06고친이 minskim
ÀúÀå¼Ò ¼³Á¤ ¹æ¹ý º¸Ãæ
고침 1.0.22001/08/30고친이 janghoon (control1 (at) dreamwiz.com)
¼­¹ö¼³Á¤¹ý Ãß°¡ / ¾²±â±ÇÇÑ °ú ÀбâÀü¿ë±ÇÇÑÀ¸·Î ÀúÀå¼Ò °ü¸® Ãß°¡
고침 1.0.12001/08/21고친이 yongjoo
±âÁ¸ÀÇ LinuxDoc Çü½ÄÀ» DocBookÀ¸·Î º¯È¯
고침 1.01999/12/12고친이 minskim
ÀÌ ±ÛÀÌ Ã¹ ¼±À» º¸¿´½À´Ï´Ù.

1. ¼Ò°³

CVS´Â °¢Á¾ ÆÄÀÏÀÇ ¹öÁ¯À» ½±°Ô °ü¸®ÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁÖ´Â µµ±¸ÀÌ´Ù. µ¶ÀÚµé Áß¿¡´Â ¾ÆÁ÷ ¹öÁ¯ °ü¸®ÀÇ Çʿ伺À» Å©°Ô ´À³¢Áö ¸øÇÏ´Â »ç¶÷µµ ¸¹ÀÌ ÀÖÀ» °ÍÀÌ´Ù. ÇÏÁö¸¸ CVS°¡ Á¦°øÇÏ´Â ±â´ÉµéÀ» Á÷Á¢ º¸°í ±× Æí¸®ÇÔÀ» üÇèÇØ º»´Ù¸é, ¾ÕÀ¸·Î´Â CVS ¾øÀÌ ÇÁ·ÎÁ§Æ®¸¦ ÁøÇàÇÑ´Ù´Â °ÍÀº »ó»óÇÒ ¼öµµ ¾ø´Â ÀÏÀÌ µÉ °ÍÀÌ´Ù.

¿¹¸¦ µé¾î °£´ÜÇÑ ÇÁ·Î±×·¥À» Çϳª ÀÛ¼ºÇÑ´Ù°í ÇÏÀÚ. ºñ±³Àû °£´ÜÇØ º¸ÀÌ´Â ¹®Á¦¿©¼­ °ð¹Ù·Î ÄÚµùÀ» ½ÃÀÛÇÏ¿© ÇϷ縸¿¡ ÀÛ¾÷À» ¸¶ÃÆ´Ù. ÇÏÁö¸¸ ½ÇÇàÇغ¸´Ï ÀǵµÇÑ ¹Ù´ë·Î °á°ú°¡ ³ª¿ÀÁö ¾Ê´Â´Ù. ¿øÀÎÀÌ ¹«¾ùÀÎÁö ¾Ë¾Æ³»±â À§ÇØ À̺κРÀúºÎºÐÀ» ¶â¾î°íÄ¡´Ù º¸¸é óÀ½ÀÇ ¸ð½ÀÀº °ÅÀÇ Ã£¾Æº¼ ¼ö ¾ø´Â º¹ÀâÇÑ ÄÚµå·Î º¯Çعö¸°´Ù. ÇÏÁö¸¸ °á±¹ ¹ß°ßÇÏ´Â °ÍÀº »ç¼ÒÇÑ ½Ç¼ö, ÀÌÁ¦ ±× µ¿¾ÈÀÇ ÀÛ¾÷À» ¸ðµÎ ¿ø·¡´ë·Î µ¹·Á³õÀ¸·Á ÇÏÁö¸¸ ÀÌ°Í ¿ª½Ã ¹ö±×¸¦ Àâ´Â ÀÏ ¸øÁö ¾Ê°Ô ¾î·Á¿î ÀÏÀÌ´Ù. ³ª¸§´ë·Î ¹Ù²î¾ú´Ù°í »ý°¢µÇ´Â ºÎºÐÀ» º¹±¸ÇغÁµµ Á¦´ë·Î µÇÁö ¾Ê°í, °á±¹¿¡´Â óÀ½ºÎÅÍ ´Ù½Ã ÄÚµùÇØ ¹ö¸°´Ù. ¸¸ÀÏ ÀÌ ¶§ óÀ½ÀÇ Äڵ带 ¹é¾÷ÇØ ³õ¾Ò´Ù¸é, ã¾Æ³½ ¹ö±×¸¸À» °íÄ¡°í ÀÛ¾÷À» °è¼Ó ÁøÇàÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÇÏÁö¸¸ ±×·¸´Ù°í Çؼ­ ¸Å ÀÛ¾÷ ´Ü°è¸¶´Ù Äڵ带 ¹é¾÷ÇØ ³õ´Â´Ù¸é Á¶±Ý¸¸ Áö³ªµµ ¼ö¾øÀÌ ¸¹Àº ÆÄÀϵéÀÌ »ý°Ü³¯ °ÍÀÌ´Ù. ÀÌ·± ÆÄÀϵéÀº °ø°£µµ ¸¹ÀÌ Â÷ÁöÇÒ »Ó´õ·¯ ±× ¸¹Àº ÆÄÀϵéÀ» °ü¸®ÇÏ´Â °Í ÀÚü°¡ ¶Ç ´Ù¸¥ ¹®Á¦°¡ µÉ °ÍÀÌ´Ù. CVS´Â ¹Ù·Î ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇØ ÁØ´Ù. CVS¸¦ ÀÌ¿ëÇÏ¸é ¸Å ÀÛ¾÷ ´Ü°è¸¶´Ù Äڵ带 ÀúÀåÇÒ ¼ö ÀÖÀ½Àº ¹°·Ð, ¿øÇÏ´Â ´Ü°èÀÇ Äڵ带 ¾ðÁ¦¶óµµ ²¨³» º¼ ¼ö ÀÖ´Ù. °Ô´Ù°¡ CVS´Â °¢ ´Ü°è¿¡¼­ º¯°æµÈ ºÎºÐ¸¸À» ÀúÀåÇϱ⠶§¹®¿¡ ÀúÀå °ø°£µµ ¸¹ÀÌ ÇÊ¿ä·Î ÇÏÁö ¾Ê´Â´Ù. ¶ÇÇÑ °¢ ´Ü°è¸¶´Ù ÀÛ¾÷ÇÑ ³»¿ëÀ» ±Û·Î Àû¾î ÇÔ²² ÀúÀåÇÒ ¼ö ÀÖÀ¸¹Ç·Î °³¹ß ³»¿ëÀ» ÇÑ´«¿¡ ¾Ë¾Æº¼ ¼ö ÀÖ°Ô ÇØ ÁØ´Ù.

CVSÀÇ ¶Ç ´Ù¸¥ ÀåÁ¡Àº ¿©·µÀÌ °øµ¿À¸·Î ÁøÇàÇÏ´Â ÇÁ·ÎÁ§Æ®¿¡¼­ ³ªÅ¸³­´Ù. »ç½Ç ¿©·¯¸íÀÌ ÇÔ²² ÀÛ¾÷ÇÏ´Ù º¸¸é °¢ÀÚ ÀÚ±âÀÇ ÀÛ¾÷ ÆÄÀÏÀ» °®°Ô µÇ±â ¶§¹®¿¡ ¾Æ¹«¸® ÁÖÀǸ¦ ÇÏ¿©µµ ´Ù¸¥ »ç¶÷ÀÌ º¯°æÇØ ³õÀº °ÍÀ» µ¤¾î ¾²´Â ÀÏÀÌ Á¾Á¾ ¹ß»ýÇÏ°Ô µÈ´Ù. ±×·¸´Ù°í ÀÛ¾÷À» Àß ³ª´©¾î °¢°¢ÀÌ ¼­·Î ´Ù¸¥ ÆÄÀϸ¸À» °®°í ÀÛ¾÷Çϵµ·Ï ÇÏ´Â °Íµµ ½±Áö ¾Ê´Ù. óÀ½¿¡´Â °¢±â ´Ù¸¥ ÆÄÀÏÀ» ´Ù·çµµ·Ï ÀÏÀ» ³ª´©Áö¸¸ Á¶±Ý Áö³ª´Ùº¸¸é ¼­·Î°¡ »ó´ë¹æÀÇ ÆÄÀÏÀ» °íÃľ߸¸ ÇÏ´Â °æ¿ì°¡ ¹ß»ýÇÏ°Ô µÈ´Ù. ½¬¿î ´ë¾ÈÀº ÇÑ ÆÄÀÏÀ» ÀÛ¾÷ÇÏ´Â µ¿¾È ´Ù¸¥ »ç¶÷Àº ±× ÆÄÀÏÀ» °Çµå¸®Áö ¸øÇÏ°Ô ÇÏ´Â °ÍÀÌÁö¸¸, ÀÌ·² °æ¿ì ÆÄÀÏÀ» ¼öÁ¤ÇÏ°í ½Í¾îµµ ´Ù¸¥ °³¹ßÀÚ°¡ ±× ÆÄÀÏÀ» ¼öÁ¤ÇÏ°í ÀÖ´Ù¸é ±× ÀÛ¾÷ÀÌ ³¡³¯ ¶§±îÁö ±â´Ù·Á¾ß Çϱ⠶§¹®¿¡ Àüü ÀÛ¾÷ È¿À²ÀÌ ¶³¾îÁö°Ô µÈ´Ù. ¹Ý¸é CVS´Â ½ÉÁö¾î °°Àº ÆÄÀϵµ ¿©·¯ »ç¶÷ÀÌ ÇÔ²² ÀÛ¾÷ÇÒ ¼ö ÀÖ°Ô ÇØ ÁØ´Ù. °¢ÀÚ ÇÑ ÆÄÀÏ ³»ÀÇ ´Ù¸¥ ºÎºÐÀ» ¼öÁ¤ÇÑ´Ù¸é CVS°¡ ±× ³»¿ëÀ» Çϳª·Î ÇÕÃÄ ÁÙ °ÍÀÌ´Ù. ¹°·Ð µÎ »ç¶÷ÀÌ µ¿½Ã¿¡ °°Àº ÁÙÀ» °íÄ£´Ù¸é CVS°¡ ±×°ÍÀ» ÇÕÃÄÁÙ µµ¸®´Â ¾ø´Ù. ÇÏÁö¸¸ ±×·² °æ¿ì¶óµµ ¼­·Î °°Àº ÁÙÀ» °íÃÆÀ½À» °³¹ßÀÚ¿¡°Ô ¾Ë·ÁÁÖ°í ±× ³»¿ëµµ º¸¿©Á־ °³¹ßÀÚ°¡ ÀûÀýÇÑ Á¶Ä¡¸¦ ÃëÇÒ ¼ö ÀÖµµ·Ï ÇØ ÁØ´Ù. »Ó¸¸¾Æ´Ï¶ó CVS´Â Unix ȯ°æÀº ¹°·Ð, Windows³ª Macintosh¿¡¼­µµ »ç¿ëÇÒ ¼ö ÀÖ¾î °¢ °³¹ßÀÚµéÀÌ ¿øÇϴ ȯ°æ¿¡¼­ ÀÛ¾÷ÇÒ ¼ö ÀÖ´Ù.

CVS´Â ÀÌ¹Ì ´ë´Ù¼öÀÇ °ø°³ ÇÁ·ÎÁ§Æ®¿¡¼­ »ç¿ëµÇ¾î ±× È¿´ÉÀ» ÀÔÁõÇÏ¿´´Ù. ½ÇÁ¦·Î ¿ì¸®°¡ ¾Ë°í ÀÖ´Â ´ëºÎºÐÀÇ °ø°³ ÇÁ·ÎÁ§Æ®°¡ CVS¸¦ »ç¿ëÇÑ´Ù. Apache HTTP server, Mozilla µîÀÌ ´ëÇ¥ÀûÀÎ ¿¹ÀÌ´Ù. ÀÌ·¯ÇÑ °ø°³ ÇÁ·ÎÁ§Æ®µéÀº ´ëºÎºÐ ÇöÀç °³¹ß ÁßÀÎ ³»¿ëÀ» CVS¸¦ ÅëÇØ ¸ðµç »ç¶÷µéÀÌ ¹Þ¾Æ º¼ ¼ö ÀÖµµ·Ï ÇÏ°í ÀÖ´Ù. ±×·¸±â ¶§¹®¿¡ CVS¸¦ ÇÁ·ÎÁ§Æ®¿¡ µµÀÔÇÏ´Â °æ¿ì°¡ ¾Æ´Ï¶ó ÇÏ´õ¶óµµ ÀÌ·± °³¹ß ¹öÁ¯À» ¹Þ¾Æ º¸°í ½Í´Ù¸é CVSÀÇ »ç¿ë¹ýÀ» ÀÍÇô µÑ ÇÊ¿ä°¡ ÀÖ´Ù.


2. µ¿ÀÛ ¹æ½Ä

2.1. ÀúÀå¼Ò

¿©·¯ ¸íÀÌ ÇÔ²² ÀÛ¾÷ÇÒ ¼ö Àִ ȯ°æÀ» Á¦°øÇÏ·Á¸é ¾î¶°ÇÑ ¿ä¼Ò°¡ ÇÊ¿äÇÒ±î? °¡Àå ¸ÕÀú ¶°¿À¸£´Â °ÍÀº °°ÀÌ ÀÛ¾÷ÇÏ´Â ÆÄÀÏÀ» º¸°üÇÒ Àå¼ÒÀÏ °ÍÀÌ´Ù. CVS´Â ÀÌ·¯ÇÑ ¿ªÇÒÀ» ÇÏ´Â °÷À» ÀúÀå¼Ò(repository)¶ó ºÎ¸¥´Ù. ±×·¸´Ù°í Ưº°ÇÑ µ¥ÀÌÅͺ£À̽º³ª ´Ù¸¥ ÀúÀå ¸Åü¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ±×Àú ÇϳªÀÇ µð·ºÅ丮¿¡ ºÒ°úÇÏ´Ù. ÀÌ µð·ºÅ丮¿¡´Â CVSÀÇ Àü¹ÝÀûÀÎ ¼³Á¤ »çÇ×°ú °¢ ÇÁ·ÎÁ§Æ®ÀÇ ÆÄÀϵé(¹®¼­, ÇÁ·Î±×·¥ µî)Àº ¹°·Ð, °¢ ÆÄÀÏÀÇ ¹öÁ¯ °ü¸®¿¡ ÇÊ¿äÇÑ Á¤º¸, ÆÄÀϺ° ÀÛ¾÷ ±â·ÏµéÀ» ÀúÀåÇÏ°Ô µÈ´Ù. ¿©±â¿¡ ÀÖ´Â ÆÄÀϵéÀº ¸ðµÎ CVS°¡ °ü¸®ÇϹǷΠ»ç¿ëÀÚ´Â ÀÌ ÆÄÀϵéÀ» Á÷Á¢ °Çµå¸± ÇÊ¿ä°¡ ÀüÇô ¾ø´Ù.


2.2. ÇÁ·ÎÁ§Æ® ½ÃÀÛ

ÀÏ´Ü ÀúÀå¼Ò¸¦ ¸¸µé°í ³ª¸é ÀÌÈķδ ¿©·¯ ÇÁ·ÎÁ§Æ®µéÀÌ ±× ÀúÀå¼Ò¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. CVS¸¦ ÀÌ¿ëÇÏ·Á´Â »ç¿ëÀڴ óÀ½ ÇÁ·ÎÁ§Æ®¸¦ ½ÃÀÛÇϴµ¥¿¡ ÇÊ¿äÇÑ ÆÄÀÏ ¹× ±âº» µð·ºÅ丮 ±¸Á¶¸¦ ÀÚ½ÅÀÇ ÀÛ¾÷ µð·ºÅ丮¿¡ ¸¸µé°í, À̸¦ ÀúÀå¼Ò·Î ¿Å±æ ¼ö ÀÖ´Ù. ±×·¯¸é ÀúÀå¼Ò¿¡´Â »õ·Î¿î µð·ºÅ丮°¡ ¸¸µé¾îÁö°í ÀÌ °÷Àº ¾ÕÀ¸·Î ÇÁ·ÎÁ§Æ® ÁøÇàÀ» À§ÇÑ °ø°£À¸·Î »ç¿ëµÈ´Ù. ¿©±â±îÁö°¡ ¿Ï·áµÇ¸é ÇÁ·ÎÁ§Æ® ½ÃÀÛÀ» À§ÇÑ ¸ðµç Áغñ°¡ ³¡³­ °ÍÀÌ´Ù. ÀÌÈķδ ÇÁ·ÎÁ§Æ®¿¡ Âü¿©ÇÏ´Â »ç¶÷µé °¢°¢ÀÇ ¸òÀÌ´Ù.


2.3. °³¹ßÀÚ °¢ÀÚÀÇ ÇÁ·ÎÁ§Æ® ÁøÇà

ÀúÀå¼Ò¿¡ ÇÁ·ÎÁ§Æ®¸¦ À§ÇÑ °ø°£ÀÌ ¸¶·ÃµÇ°í ³ª¸é ½ÇÁ¦·Î ÇÁ·ÎÁ§Æ®¿¡ Âü¿©ÇÏ´Â °³¹ßÀÚ´Â ¾î¶»°Ô CVS¸¦ ÀÌ¿ëÇÏ¸é µÉ±î? ÀúÀå¼ÒÀÇ ³»¿ëÀ» °¡Áö°í Á÷Á¢ ÀÛ¾÷ÇÒ ¼ö´Â ¾øÀ¸¹Ç·Î ¿ì¼± ÀúÀå¼Ò¿¡ ÀÖ´Â ³»¿ëÀ» º¹»çÇÏ¿© ÀÚ½ÅÀÇ ÀÛ¾÷ µð·ºÅ丮¸¦ ¸¸µé¾î¾ß ÇÑ´Ù. ÀÌ °úÁ¤À» CVS¿¡¼­´Â checkoutÀ̶ó°í ÇÑ´Ù. checkoutÀ¸·Î ¸¸µé¾îÁø ÀÛ¾÷ µð·ºÅ丮´Â ÀڽŸ¸ÀÇ ÀÛ¾÷ °ø°£ÀÌ µÇ¸ç, °³¹ßÀÚ´Â ±× ÆÄÀϵéÀ» ¸¶À½´ë·Î º¯°æÇÒ ¼ö ÀÖ´Ù. ÀÌÈķδ °è¼Ó ÀÛ¾÷À» ÁøÇàÇϸ鼭 CVSÀÇ ¸í·ÉÀ» ÀÌ¿ëÇÏ¿© ÀÚ½ÅÀÇ ÀÛ¾÷ °á°ú¸¦ ÀúÀå¼Ò·Î ¿Å±â°í, ´Ù¸¥ »ç¶÷ÀÌ ÀúÀå¼Ò¿¡ ¿Ã·Á ³õÀº ÀÛ¾÷ °á°ú¸¦ ¹Þ¾Æ¿À´Â Àϸ¸À» ¹Ýº¹ÇÏ¸é µÈ´Ù. °øµ¿ ÀÛ¾÷À¸·Î ÀÎÇØ »ý±æ ¼ö ÀÖ´Â ¹®Á¦µéÀÇ ´ëºÎºÐÀº CVS°¡ ÇØ°áÇØ ÁÙ °ÍÀÌ´Ù.


2.4. ¿ä¾à

CVS¸¦ ÀÌ¿ëÇÏ¿© ÇÁ·ÎÁ§Æ®¸¦ ¼öÇàÇÏ´Â ÀýÂ÷´Â ´ÙÀ½°ú °°´Ù.

  1. ÀúÀå¼Ò¸¦ ÃʱâÈ­ÇÑ´Ù. (CVS °ü¸®ÀÚ)

  2. ÇÁ·ÎÁ§Æ®¸¦ ÃʱâÈ­ÇÑ´Ù. (ÇÁ·ÎÁ§Æ® °ü¸®ÀÚ)

  3. ÀÛ¾÷ °ø°£À» ¸¶·ÃÇÑ´Ù. (°³¹ßÀÚ)

  4. ½ÇÁ¦ ÀÛ¾÷ (°³¹ßÀÚ)

  5. ÀÚ½ÅÀÇ ÀÛ¾÷ ³»¿ëÀ» ÀúÀå¼Ò¿¡ ÀúÀåÇÏ°í ´Ù¸¥ °³¹ßÀÚÀÇ ÀÛ¾÷ ³»¿ëÀ» ¹Þ¾Æ¿Â´Ù. (°³¹ßÀÚ)

1¹øÀº óÀ½ CVS¸¦ ¼³Ä¡ÇÒ ¶§ ÇÑ ¹ø¸¸ ÇØ ÁÖ¸é µÇ°í, 2¹øÀº »õ·Î¿î ÇÁ·ÎÁ§Æ®¸¦ ½ÃÀÛÇÒ ¶§¸¶´Ù ÇÊ¿äÇÑ ÀÛ¾÷ÀÌ´Ù. °¢ °³¹ßÀÚ´Â 3¹øÀ» ¼öÇàÇÑ ÈÄ 4¹ø°ú 5¹ø °úÁ¤À» µÇÇ®ÀÌÇϸç ÀÛ¾÷À» ÁøÇàÇÏ°Ô µÈ´Ù.


3. CVS ÀúÀå¼Ò ¼³Á¤

3.1. CVS ÃʱâÈ­

CVS¸¦ »ç¿ëÇϱâ À§Çؼ­ °¡Àå ¸ÕÀú ÇÒ ÀÏÀº °¢ ÇÁ·ÎÁ§Æ®ÀÇ ÆÄÀϵéÀ» ÀúÀåÇÒ ÀúÀå¼Ò(repository)ÀÇ À§Ä¡¸¦ Á¤ÇÏ´Â °ÍÀÌ´Ù. ÀúÀå¼Ò¸¦ ÀÌ¿ëÇÒ ÇÁ·ÎÁ§Æ®µéÀÇ ±Ô¸ð¸¦ °í·ÁÇÏ¿© ÃæºÐÇÑ °ø°£À» °¡Áø µð·ºÅ丮¸¦ ÀúÀå¼Ò·Î ¾²µµ·Ï ÇÑ´Ù. ÀúÀå¼Ò¸¦ /home/cvs¿¡ ¸¸µé±â·Î Çß´Ù¸é ´ÙÀ½°ú °°ÀÌ ÃʱâÈ­ÇÒ ¼ö ÀÖ´Ù.

# cvs -d /home/cvs init
¿©±â¼­ -d´Â ÀúÀå¼ÒÀÇ À§Ä¡¸¦ ³ªÅ¸³»¸ç, ¸¶Áö¸·ÀÇ init°¡ CVS ¸í·ÉÀÌ´Ù. ¹°·Ð ÀÌ ¸í·ÉÀ» »ç¿ëÇϱâ À§Çؼ­´Â /home¿¡ ¾²±â ±ÇÇÑÀ» °®°í ÀÖ¾î¾ß ÇÑ´Ù. ±×·¯¹Ç·Î ´ë°³ÀÇ °æ¿ì ÀúÀå¼ÒÀÇ ÃʱâÈ­´Â root ±ÇÇÑÀ» °¡Áø ¾¾½ºÅÛ °ü¸®ÀÚ°¡ ÇÏ°Ô µÈ´Ù. ¸í·ÉÀÌ ½ÇÇàµÇ°í ³ª¸é /home¿¡ CVS¶õ µð·ºÅ丮°¡ »ý±â°í, ±× ¾È¿¡´Â CVSROOT¶õ µð·ºÅ丮°¡ ÀÖÀ» °ÍÀÌ´Ù. ÀÌ CVSROOT µð·ºÅ丮´Â CVSÀÇ °¢Á¾ ¼³Á¤ ³»¿ëÀ» ´ã°í ÀÖ´Â µð·ºÅ丮ÀÌ´Ù. ÀúÀå¼Ò(/home/cvs)ÀÇ ÆÄÀϵéÀ» Á÷Á¢ °Çµå¸®´Â °ÍÀº Àý´ë·Î ÇÇÇØ¾ß ÇÑ´Ù. ÀÌ ÆÄÀϵéÀ» º¯°æÇÏ°í ½Í´Ù¸é cvs ¸í·ÉÀ» ÀÌ¿ëÇØ¾ß ÇÑ´Ù.


3.2. ±ÇÇÑ ºÎ¿©

ÀúÀå¼Ò¸¦ ¸¸µé¾úÀ¸¸é CVS¸¦ ÀÌ¿ëÇÒ °³¹ßÀڵ鿡°Ô ÀúÀå¼Ò¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀ» ÁÖ¾î¾ß ÇÑ´Ù. ±ÇÇÑ ºÎ¿© ¹æ¹ýÀº °³¹ßÀÚµéÀÌ ÀúÀå¼Ò°¡ À§Ä¡ÇÑ ¾¾½ºÅÛ¿¡ °èÁ¤ÀÌ ÀÖ´ÂÁö¿¡ µû¶ó µÎ °¡Áö·Î ³ª´¶´Ù.


3.2.1. °èÁ¤ÀÌ ÀÖ´Â °æ¿ì

°³¹ßÀÚµéÀÌ °èÁ¤À» °®°í ÀÖ´Â °æ¿ì´Â °³¹ßÀÚµéÀÌ ¸ðµÎ ÀúÀå¼Ò°¡ ÀÖ´Â ¾¾½ºÅÛ¿¡¼­ ÀÛ¾÷À» Çϰųª, °¢ÀÚÀÇ ±â°è¿¡¼­ ÀÛ¾÷À» Ç쵂 sshÀ̳ª rshÀ» ½á¼­ ¿ø°ÝÀ¸·Î CVS¸¦ »ç¿ëÇÏ´Â °æ¿ìÀÌ´Ù. ÀÌ ¹æ¹ýÀº ´ÙÀ½¿¡ ³ª¿Ã ¾ÏÈ£ ÀÎÁõ ¹æ½Ä¿¡ ºñÇØ ¼³Á¤ÀÌ °£´ÜÇÏ°í, º°µµÀÇ Æ÷Æ®¸¦ ¿­ ÇÊ¿ä°¡ ¾ø´Ù´Â ÀåÁ¡ÀÌ ÀÖ´Ù. °³¹ßÀÚµéÀÌ ¸ðµÎ °èÁ¤À» °®°í ÀÖÀ¸¹Ç·Î ÀúÀå¼Ò°¡ À§Ä¡ÇÑ µð·ºÅ丮¿¡ ÀÐ±â ¹× ¾²±â ±ÇÇÑÀ» Áֱ⸸ ÇÏ¸é µÇ´Â °ÍÀÌ´Ù. ±×·¯±â À§ÇØ °³¹ßÀÚµéÀ» ¸ðµÎ °°Àº ±×·ì(¿¹: cvs)ÀÇ ±¸¼º¿øÀ¸·Î ¸¸µç´Ù. ÀÌ´Â ¾¾½ºÅÛº°·Î Á¸ÀçÇÏ´Â ±×·ì °ü¸® µµ±¸¸¦ ÀÌ¿ëÇϰųª groupadd¿Í °°Àº ¸í·ÉÀ¸·Î cvs¶ó´Â ±×·ìÀ» ¸¸µé°í, ±×·ì °ü¸® µµ±¸¸¦ ¾²°Å³ª /etc/group ÆÄÀÏÀ» Á÷Á¢ ¼öÁ¤ÇÏ¿© °³¹ßÀÚµéÀ» ±× ±×·ì¿¡ Ãß°¡ÇÏ¸é µÈ´Ù. ¿¹¸¦ µé¾î minskim°ú sehkoneÀ̶ó´Â »ç¿ëÀÚ¸¦ cvs ±×·ì¿¡ Ãß°¡ÇÑ´Ù¸é ´ÙÀ½°ú °°Àº ÁÙÀÌ /etc/group¿¡ »ý±æ °ÍÀÌ´Ù.

cvs:*:510:minskim,sehkone
ÀÌÁ¦ ´ÙÀ½ ¸í·ÉÀ¸·Î µð·ºÅ丮ÀÇ ±ÇÇÑÀ» ¿­¾î ÁÖ¸é µÈ´Ù.
# chgrp -R cvs /home/cvs
# chmod ug+rwx /home/cvs /home/cvs/CVSROOT
ÀÌÈķδ cvs ±×·ì¿¡ ¼ÓÇÑ °³¹ßÀÚ´Â ÀÌ ÀúÀå¼Ò¸¦ ¸¶À½´ë·Î ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù.


3.2.2. °èÁ¤ÀÌ ¾ø´Â °æ¿ì

°³¹ßÀÚµéÀÌ ¾¾½ºÅÛ¿¡ °èÁ¤À» °®°í ÀÖÁö ¾Ê´Ù¸é CVSÀÇ ¾ÏÈ£ ÀÎÁõ ¹æ½ÄÀ» ÀÌ¿ëÇؼ­ CVS ½á¹ö¿¡ Á¢¼ÓÇÒ ¼ö ÀÖ´Ù. °³¹ßÀÚ °¢°¢Àº CVS °èÁ¤(¾¾½ºÅÛ °èÁ¤°ú´Â ´Ù¸£´Ù)À» ºÎ¿©¹Þ°Ô µÇ¸ç, inetd¸¦ ÅëÇØ Á¤ÇØÁø Æ÷Æ®·Î CVS¸¦ »ç¿ëÇÏ°Ô µÈ´Ù. ¼³Á¤Àº Á¶±Ý º¹ÀâÇÏÁö¸¸ °³¹ßÀڵ鿡°Ô ÀÏÀÏÀÌ ¾¾½ºÅÛ °èÁ¤À» ¹ß±ÞÇÒ ÇÊ¿ä°¡ ¾øÀ¸¹Ç·Î ¾¾½ºÅÛ °ü¸® Ãø¸é¿¡¼­´Â º¸´Ù ³ªÀº ¹æ¹ýÀ̶ó ÇÒ ¼ö ÀÖ´Ù. ƯÈ÷ ºÒƯÁ¤ ´Ù¼ö¿¡ ´ëÇØ CVS·Î ÆÄÀÏÀ» ¹Þ¾Æ°¥ ¼ö ÀÖµµ·Ï ÇØ¾ß ÇÏ´Â °ø°³ ÇÁ·ÎÁ§Æ®ÀÇ °æ¿ì ´ëºÎºÐÀÌ ÀÌ ¹æ½ÄÀ» äÅÃÇÏ°í ÀÖ´Ù. ¾ÆÆÄÄ¡³ª ¸ðÁú¶ó °°Àº °æ¿ì°¡ ´ëÇ¥ÀûÀÎ ¿¹°¡ µÉ °ÍÀÌ´Ù. ¹Ý¸é °³¹ßÀÚµéÀÌ ¾¾½ºÅÛ °èÁ¤À» °®°í ÀÖ´Â °æ¿ì¶óµµ sshÀ̳ª rshÀ» ÅëÇÑ Á¢¼ÓÀ» Çã¿ëÇÏ°í ½ÍÁö ¾ÊÀ» °æ¿ì´Â º°µµÀÇ CVS °èÁ¤À» ¸¸µé¾î ¾ÏÈ£ ÀÎÁõ ¹æ½ÄÀ» ÀÌ¿ëÇÒ ¼öµµ ÀÖ´Ù.

±×·¯¸é inetd·Î CVS Á¢¼ÓÀ» Çã¿ëÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æº¸ÀÚ. ¿ì¼± CVS°¡ »ç¿ëÇÏ´Â Æ÷Æ® ¹øÈ£(2401¹ø)¸¦ µî·ÏÇØ¾ß ÇÑ´Ù. /etc/services¿¡ ´ÙÀ½°ú °°Àº ÁÙÀÌ ÀÖ´ÂÁö »ìÆì º¸ÀÚ.

cvspserver      2401/tcp
¸¸ÀÏ ¾ø´Ù¸é À§ÀÇ ³»¿ëÀ» Ãß°¡ÇÏ¸é µÈ´Ù. ´ÙÀ½Àº ½ÇÁ¦·Î ÇØ´ç Æ÷Æ®¸¦ ¿­¾îÁÙ Â÷·ÊÀε¥, ÀÌ´Â ¾¾½ºÅÛÀÌ inetd¸¦ ¾²°í ÀÖ´ÂÁö, xinetd¸¦ ¾²°í ÀÖ´ÂÁö¿¡ µû¶ó ¼³Á¤ ¹æ¹ýÀÌ ´Ù¸£´Ù. ¸ÕÀú inetdÀÇ °æ¿ì´Â /etc/inetd.conf¿¡ ´ÙÀ½ ³»¿ëÀ» Ãß°¡ÇÑ´Ù.
cvspserver stream tcp nowait root /usr/bin/cvs cvs
   --allow-root=/home/cvs pserver
ÆíÀÇ»ó µÎ ÁÙ·Î ³ªÅ¸³ÂÀ¸³ª, ½ÇÁ¦ ÆÄÀÏ¿¡´Â ÇÑ ÁÙ·Î µé¾î°¡¾ß ÇÑ´Ù. ¸¸¾à tcpd¸¦ »ç¿ëÇÑ´Ù¸é À§ÀÇ ÁÙ ´ë½Å ´ÙÀ½À» Ãß°¡ÇÑ´Ù.
cvspserver stream tcp nowait root /usr/sbin/tcpd /usr/bin/cvs
   --allow-root=/home/cvs pserver
¹°·Ð /usr/bin/cvs³ª /usr/sbin/tcpd´Â ½ÇÁ¦·Î ÀÌµé ¸í·ÉÀÌ À§Ä¡ÇÏ´Â Àý´ë °æ·Î·Î ½á ÁÖ¾î¾ß ÇÑ´Ù.

»õ·Î¿î ¼³Á¤ ³»¿ëÀ» ¹Ý¿µÇÏ·Á¸é inetd¸¦ Àç½ÃÀÛÇÏ¿©¾ß ÇÑ´Ù. inetdÀÇ ÇÁ·Î¼¼½º ID°¡ 357À̶ó¸é ´ÙÀ½°ú °°ÀÌ HUP ½ÅÈ£¸¦ º¸³»¸é µÈ´Ù.

# kill -HUP 357

xinetd¸¦ ¾´´Ù¸é /etc/xinetd.d¿¡ cvspserver¶õ À̸§À¸·Î º°µµÀÇ ÆÄÀÏÀ» ¸¸µé¾î¾ß ÇÑ´Ù. ÆÄÀÏ ³»¿ëÀº ´ÙÀ½°ú °°´Ù.

# default: on
# description: The cvspsever serves CVS Password Server sessions; it uses \
#          unencrypted username/password pairs for authentication.
service cvspserver
{
        disable         = no
        flags           = REUSE
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/cvs
        server_args     = --allow-root=/home/cvs pserver
        log_on_failure  += USERID
}
inetdÀÇ °æ¿ì¿Í ¸¶Âù°¡Áö·Î /usr/bin/cvs´Â cvs ¸í·ÉÀÇ Àý´ë °æ·Î, /home/cvs´Â ÀúÀå¼ÒÀÇ À§Ä¡·Î ¹Ù²ã ÁØ´Ù.

Âü°í·Î, ÀϺΠRedhat ¹öÀü¿¡¼­´Â À§¿Í °°ÀÌ CVS pserver ¸¦ ±¸ÃàÇßÀ»¶§ checkout À» ÇÏ·Á°í ÇÏ¸é °è¼ÓÇؼ­

cvs [server aborted]: can't chdir(/root): Permission denied
¶ó´Â ¿¡·¯°¡ ¹ß»ýÇÑ´Ù. ÀÌ·² ¶§´Â server_args ¿¡ -f ¸¦ Ãß°¡Çϸé ÇØ°áµÈ´Ù. Áï,
server_args = -f --allow-root=/home/cvs pserver
¿Í °°ÀÌ ÇÑ´Ù.

xinetd¸¦ Àç½ÃÀÛÇÏ´Â ¹æ¹ýµµ inetd¿Í µ¿ÀÏÇÏ´Ù. ¿ì¼± xinetdÀÇ ÇÁ·Î¼¼½º ID(357ÀÌ¶ó °¡Á¤ÇÑ´Ù)¸¦ ¾Ë¾Æ³½ ÈÄ, HUP ½ÅÈ£¸¦ º¸³»ÀÚ.

# kill -HUP 357

ÀÌÁ¦ Á¢¼Ó Æ÷Æ®´Â ¿­¾îµÎ¾úÀ¸´Ï, °³¹ßÀڵ鿡°Ô CVS °èÁ¤À» ¹ß±ÞÇÏ´Â Àϸ¸ ³²¾Ò´Ù. ¾ÏÈ£ ÀÎÁõ ¹æ½ÄÀ» ÀÌ¿ëÇÏ´Â °æ¿ì, °èÁ¤°ú ¾ÏÈ£´Â ÀúÀå¼ÒÀÇ CVSROOT µð·ºÅ丮 ¹Ø¿¡ passwd¶õ À̸§ÀÇ ÆÄÀÏ¿¡ ÀúÀåµÈ´Ù. ¿©±â¿¡¼­´Â /home/cvs/CVSROOT/passwd°¡ µÉ °ÍÀÌ´Ù. ÇÏÁö¸¸ ÀÌ ÆÄÀÏÀº óÀ½¿¡´Â Á¸ÀçÇÏÁö ¾Ê´Â´Ù. ±×·¯¹Ç·Î Á÷Á¢ ¸¸µé¾îÁÖ¾î¾ß Çϴµ¥, ¸ÕÀú ¿¹¸¦ Çϳª º¸µµ·Ï ÇÏÀÚ.

minskim:YxNPCzaM/WCp2:cvs
sehkone:Yw2najHG5cLfo:cvs
°¢ ÁÙÀº ÇÑ »ç¿ëÀÚ¿¡ ´ëÇÑ Á¤º¸¸¦ ´ã°í ÀÖ´Ù. ÁÙÀº ':'À» °æ°è·Î ´Ù½Ã ¼¼ ºÎºÐÀ¸·Î ³ª´µ´Âµ¥ ù ºÎºÐÀÌ »ç¿ëÀÚÀÇ CVS °èÁ¤ À̸§(¾¾½ºÅÛ °èÁ¤°ú´Â ¹«°üÇÏ´Ù), ±× ´ÙÀ½Àº ¾ÏÈ£, ±×¸®°í ¸¶Áö¸·Àº ¾¾½ºÅÛ °èÁ¤ À̸§ÀÌ´Ù. Áï, ÀÌ ÆÄÀÏ¿¡´Â ÇöÀç minskim°ú sehkoneÀ̶ó´Â µÎ »ç¿ëÀÚ°¡ µî·ÏµÇ¾î ÀÖ°í, À̵éÀÌ CVS ÀÌ¿ë½Ã¿¡´Â cvs¶õ ¾¾½ºÅÛ °èÁ¤ÀÇ ±ÇÇÑÀ» °®´Â °ÍÀÌ´Ù. ¾ÏÈ£ºÎºÐÀº À¯´Ð½º ¾¾½ºÅÛ¿¡¼­ ÀüÅëÀûÀ¸·Î »ç¿ëµÇ´Â crypt ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© º¯È¯µÈ °ªÀÌ ÀúÀåµÇ¾î ÀÖ´Ù. »õ·Î¿î »ç¿ëÀÚ¸¦ Ãß°¡ÇÏ·Á¸é °°Àº Çü½ÄÀ¸·Î ÇÑ ÁÙÀ» Ãß°¡ÇØ ÁÖ¸é µÈ´Ù.

passwd ¿¡ Ãß°¡ÇÏ´Â ½ºÅ©¸³Æ®´Â ´ÙÀ½°ú °°´Ù

#!/usr/bin/perl
#
# Simple script to take a username and password and
# return a line suitable for pasting into the CVS
# password file
#
($u, $p)=@ARGV;
@d=(A..Z,a..z);
$s=$d[rand(52)].$d[rand52];
print $u.":".crypt($p, $s).":cvs\n";

            
ÀÌ ½ºÅ©¸³Æ®¸¦ /usr/local/bin ¿¡ cvspasswdgen À¸·Î ÀúÀåÇÑ ÈÄ¿¡ ½ÇÇà ±ÇÇÑ ÁÖ°í.
# chmod +x cvspasswdgen 
# cd /home/cvs/CVSROOT
# cvspasswdgen id password >> passwd
Çϸé /home/cvs/CVSROOT/passwd ¶ó´Â È­ÀÏÀÌ »ý±â¸é¼­ id:¾ÏÈ£:cvs ¶ó°í ÀúÀåµÈ´Ù. °°Àº ¹æ¹ýÀ¸·Î °è¼Ó »ç¿ëÀÚ¸¦ Ãß°¡ ÇÏ¸é µÈ´Ù.

¸¶Áö¸·À¸·Î ÇÊ¿äÇÑ °ÍÀº cvs¶õ ¾¾½ºÅÛ °èÁ¤¿¡ ÀúÀå¼Ò¿¡ ´ëÇÑ ÀÐ±â ¹× ¾²±â ±ÇÇÑÀ» ÁÖ´Â °ÍÀÌ´Ù. 3.2.1절°ú ÀÏ°ü¼ºÀ» À¯ÁöÇÏ·Á¸é cvs¶õ ±×·ìÀ» ¸¸µé°í cvs¶õ »ç¿ëÀÚ¸¦ cvs ±×·ì¿¡ Ãß°¡ÇÑ ÈÄ, cvs ±×·ì¿¡ ´ëÇÑ ±ÇÇÑÀ» °°Àº ¹æ¹ýÀ¸·Î ¿­¾îÁÖ¸é µÈ´Ù.

# chgrp -R cvs /home/cvs
# chmod ug+rwx /home/cvs /home/cvs/CVSROOT


4. ±âº»ÀûÀÎ »ç¿ë ¹æ¹ý

ÀúÀå¼Ò°¡ ÃʱâÈ­µÇ¾î ÀÖ°í »ç¿ëÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ÀÖ´Ù¸é cvs ¸í·ÉÀ» ÀÌ¿ëÇؼ­ ¹Ù·Î ÇÁ·ÎÁ§Æ®¸¦ ½ÃÀÛÇÒ ¼ö ÀÖ´Ù. ÀÌ Àý¿¡¼­´Â CVSÀÇ ¸ðµç ±â´ÉÀ» ¼³¸íÇϱ⺸´Ù´Â ÀÚÁÖ »ç¿ëµÇ´Â ±â´ÉÀ» ¿¹¿Í ÇÔ²² ¼³¸íÇÑ´Ù. ¿©±â¿¡¼­ ¼³¸íÇÏ´Â ³»¿ë Á¤µµ¸¸ °¡Áö°íµµ ½ÇÁ¦ ÇÁ·ÎÁ§Æ®¿¡¼­ CVS¸¦ »ç¿ëÇÏ´Â µ¥¿¡´Â ¹«¸®°¡ ¾øÀ» °ÍÀÌ´Ù.

CVS´Â ´ëºÎºÐÀÇ Linux ¹èÆ÷º»¿¡ Æ÷ÇԵǾî ÀÖÀ¸¹Ç·Î Linux¸¦ »ç¿ëÇÏ°í ÀÖ´Ù¸é ÀÌ¹Ì CVS°¡ ¼³Ä¡ µÇ¾î ÀÖÀ» °ÍÀÌ´Ù. ¸¸ÀÏ CVS ¸í·ÉÀÌ ¾ø´Ù¸é http://www.cyclic.com/¿¡¼­ Àû´çÇÑ ÆÄÀÏÀ» ¹Þ¾Æ ¼³Ä¡ÇÏ¸é µÈ´Ù.

CVS¸¦ ÀÌ¿ëÇÏ´Â ¸ðµç °úÁ¤Àº cvs ¸í·ÉÀ» ÅëÇØ ÀÌ·ç¾îÁø´Ù. cvs ¸í·ÉÀÇ ±âº» Çü½ÄÀº ´ÙÀ½°ú °°´Ù.

$ cvs [cvs ¿É¼Ç] ¸í·É [¸í·É ¿É¼Ç°ú ÀÎÀÚ]
¸í·É ºÎºÐ¿¡´Â ½ÇÁ¦·Î cvs¿¡°Ô Áö½ÃÇÒ ¸í·ÉÀÌ ¿À°Ô µÇ¸ç, °¢ ¸í·É¸¶´Ù ¿ä±¸ÇÏ´Â ÀÎÀÚ°¡ ÀÖÀ» ¼ö ÀÖ´Ù. ½ÇÁ¦·Î »ç¿ëµÇ´Â ¸í·ÉÀÇ Á¾·ù¿Í ±â´É¿¡ ´ëÇؼ­´Â »õ·Î¿î ¸í·ÉÀÌ ¼Ò°³µÉ ¶§¸¶´Ù ¾ð±ÞÇϵµ·Ï ÇÏ°Ú´Ù.


4.1. ÀúÀå¼Ò ÀÌ¿ë

¸ðµç CVS ¸í·ÉÀº ÀúÀå¼ÒÀÇ À§Ä¡¸¦ ¾Ë¾Æ¾ß ¼öÇàµÉ ¼ö ÀÖ´Ù. ¾Õ¿¡¼­ º» ÀúÀå¼Ò ÃʱâÈ­ÀÇ ¿¹¿¡¼­µµ init ¸í·ÉÀ» »ç¿ëÇϸ鼭 -d ¿É¼ÇÀ¸·Î ÀúÀå¼ÒÀÇ À§Ä¡¸¦ ¾Ë·Á ÁÖ°í ÀÖ´Ù. CVSÀÇ ´Ù¸¥ ¸í·Éµéµµ °°Àº ¿É¼ÇÀ¸·Î ÀúÀå¼ÒÀÇ À§Ä¡¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ¶Ç´Ù¸¥ ¹æ¹ýÀº CVSROOT¶ó´Â ȯ°æº¯¼öÀÇ °ªÀ¸·Î ÀúÀå¼ÒÀÇ À§Ä¡¸¦ ÁÖ´Â °ÍÀÌ´Ù. ¿¹¸¦ µé¾î ÀúÀå¼ÒÀÇ À§Ä¡°¡ /home/cvsÀÎ °æ¿ì, shÀ̳ª bash¸¦ ¾´´Ù¸é ´ÙÀ½ÀÇ ³»¿ëÀ» ÃʱâÈ­ ÆÄÀÏ(.bash-profile µî)¿¡ ³Ö¾î ³õÀ¸¸é Æí¸®ÇÒ °ÍÀÌ´Ù.

CVSROOT=/home/cvs
export CVSROOT
cshÀ̳ª tcshÀ» ¾´´Ù¸é ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù.
setenv CVSROOT /home/cvs
ÀÌ·¸°Ô ¼³Á¤À» ÇÏ°í ³ª¸é -d ¿É¼Ç°ú ÀúÀå¼ÒÀÇ À§Ä¡¸¦ ¸Å¹ø ÁÙ ÇÊ¿ä ¾øÀÌ ¹Ù·Î cvs µÚ¿¡ ¿øÇÏ´Â ¸í·ÉÀ» ÁÖ¸é µÈ´Ù.

°³¹ßÀÚ°¡ CVS ¸í·ÉÀ» ÀÌ¿ëÇÏ·Á ÇÏ´Â °æ¿ì °í·ÁÇØ¾ß ÇÒ »çÇ×ÀÌ Çϳª ´õ ÀÖ´Ù. °³¹ßÀÚ°¡ ¾î¶² ¹æ½ÄÀ¸·Î ÀúÀå¼Ò°¡ À§Ä¡ÇÑ ±â°è¿¡ ¿¬°áÇϴ°¡ ÇÏ´Â °ÍÀÌ´Ù. CVS´Â ´Ù¾çÇÑ ¿¬°á ¹æ½ÄÀ» Áö¿øÇϴµ¥, ¿©±â¿¡¼­´Â ÁÖ·Î »ç¿ëµÇ´Â ¼¼ °¡Áö ¹æ½Ä¿¡ ´ëÇØ ÀúÀå¼ÒÀÇ À§Ä¡¸¦ ÁöÁ¤ÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ. ÀÌÇÏÀÇ ¿¹¿¡¼­´Â ÆíÀÇ»ó -d ¿É¼ÇÀ¸·Î ÀúÀå¼ÒÀÇ À§Ä¡¸¦ ÁöÁ¤ÇÏ°Ú´Ù. ¹°·Ð -d ¿É¼ÇÀº Ç×»ó CVSROOT ȯ°æº¯¼ö·Î ´ëÄ¡ÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù.


4.1.1. ÀúÀå¼Ò¿Í °³¹ßÀÚ°¡ °°Àº ±â°è¸¦ ¾µ °æ¿ì

¾Õ¿¡¼­ ÀúÀå¼Ò¸¦ ÃʱâÈ­ÇÑ °Í°ú °°Àº °æ¿ìÀÌ´Ù. °°Àº ±â°è¸¦ ¾²±â ¶§¹®¿¡ ÀúÀå¼Ò°¡ ÀÖ´Â µð·ºÅ丮 À̸§À» ÁÖ´Â °ÍÀ¸·Î ÃæºÐÇÏ´Ù. ¾Õ¿¡¼­ ¸¸µç ÀúÀå¼Ò¿¡ CVS ¸í·ÉÀ» ³»¸®·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù.

$ cvs -d /home/cvs ¸í·É


4.1.2. °³¹ßÀÚ°¡ sshÀ̳ª rshÀ» ÀÌ¿ëÇÏ´Â °æ¿ì

°³¹ßÀÚ°¡ ÀúÀå¼Ò¿Í ´Ù¸¥ ±â°è¸¦ »ç¿ëÇÒ °æ¿ì ÀϹÝÀûÀ¸·Î ¾²ÀÌ´Â ¹æ¹ýÀÌ´Ù. ¿©·µÀÌ ÁøÇàÇÏ´Â ÇÁ·ÎÁ§Æ®´Â ´ëºÎºÐ °³¹ßÀÚµéÀÌ ÀÚ½ÅÀÇ ±â°è¿¡¼­ ÀÛ¾÷À» ÇÏ°Ô µÇ´Âµ¥, ÀÌ ¹æ½ÄÀ» ÀÌ¿ëÇÏ¸é ±×·¯ÇÑ °æ¿ì¿¡µµ ½±°Ô ÀúÀå¼Ò¸¦ °øÀ¯ÇÒ ¼ö ÀÖ°Ô ÇØ ÁØ´Ù. ÀÌ ¹æ¹ýÀ» ¾²·Á¸é ¸ÕÀú sshÀ̳ª rshÀ» »ç¿ëÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î ÀúÀå¼Ò´Â cvs.webdox.co.krÀ̶õ ±â°è¿¡ ÀÖ°í, °³¹ßÀÚÀÇ ±â°è´Â birch.webdox.co.krÀ̶ó°í ÇÏÀÚ. °³¹ßÀÚ´Â cvs.webdox.co.kr¿¡ minskimÀ̶õ °èÁ¤À» °®°í ÀÖ°í, birch.webdox.co.kr¿¡ minÀ̶õ °èÁ¤À» °®°í ÀÖ´Ù. ±×·¯¸é ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î sshÀ» ¾µ ¼ö ÀÖ´ÂÁö¸¦ ½ÃÇèÇØ º¼ ¼ö ÀÖ´Ù.

ssh -l minskim cvs.webdox.co.kr 'echo $PATH'
rshÀ» ½ÃÇèÇØ º¸·Á¸é ¸í·É¾î¸¸ rsh·Î ¹Ù²ãÁÖ¸é µÈ´Ù.

À§ÀÇ ¸í·ÉÀÌ ¼öÇàµÈ´Ù¸é ssh(ȤÀº rsh)À» ¾µ ¼ö ÀÖ´Â °ÍÀÌ´Ù. sshÀÌ µ¿ÀÛÇÏÁö ¾Ê´Â´Ù¸é cvs.webdox.co.krÀÇ sshd µ¿ÀÛ ¿©ºÎ¿Í ¼³Á¤ ÆÄÀÏÀ» Á¡°ËÇϵµ·Ï ÇÑ´Ù.

rshÀÌ µ¿ÀÛÇÏÁö ¾Ê´Â´Ù¸é cvs.webdox.co.kr¿¡ ·Î±×ÀÎÇÏ¿© .rhosts¶õ ÆÄÀÏÀ» ¸¸µéÀÚ. .rhosts¿¡´Â ´ÙÀ½°ú °°Àº ³»¿ëÀÌ ÀÖ¾î¾ß ÇÑ´Ù.

birch.webdox.co.kr min
ÀÌÁ¦ ´Ù½Ã ÇÑ ¹ø rsh ¸í·ÉÀ» ½ÃÇèÇغ¸ÀÚ. À̹ø¿¡µµ ¾È µÈ´Ù¸é cvs.webdox.co.kr¿¡¼­ rshÀ» ÅëÇÑ Á¢¼ÓÀ» ¸·¾Æ ³õ¾ÒÀ» °¡´É¼ºÀÌ Å©¹Ç·Î cvs.webdox.co.krÀÇ ³×Æ®¿÷ ¼³Á¤À» Á¡°ËÇϵµ·Ï ÇÑ´Ù.

sshÀ̳ª rshÀ» ¾µ ¼ö ÀÖ´Ù¸é ÀúÀå¼Ò À§Ä¡¿¡ ´ÙÀ½°ú °°ÀÌ °èÁ¤°ú ±â°è À̸§À» Æ÷ÇÔ½ÃÄѼ­ CVS ¸í·ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.

$ cvs -d :ext:minskim@cvs.webdox.co.kr:/home/cvs ¸í·É
¿©±â¼­ :ext:°¡ sshÀ̳ª rshÀ» ÀÌ¿ëÇÑ Á¢¼Ó ¹æ½ÄÀÓÀ» ³ªÅ¸³»´Â ±¸½ÇÀ» ÇÑ´Ù. ´Ù¸¸ ±âº»ÀûÀ¸·Î cvs´Â :ext:·Î ½ÃÀÛÇÏ´Â ÀúÀå¼ÒÀÇ °æ¿ì rshÀ» ÀÌ¿ëÇϹǷÎ, sshÀ» ¾²·Á¸é CVS_RSHÀ̶ó´Â ȯ°æº¯¼ö¸¦ ssh·Î ¼³Á¤ÇØ ÁÖ¾î¾ß ÇÑ´Ù. ¹°·Ð ssh ¿Ü¿¡µµ rsh°ú °°Àº ¹æ½ÄÀ¸·Î µ¿ÀÛÇÏ´Â ´Ù¸¥ ¸í·ÉÀÌ ÀÖ´Ù¸é ±× ¸í·ÉÀ» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. rshÀº Á¦»ïÀÚ°¡ ³×Æ®¿÷À» ÅëÇØ ¾ÏÈ£¸¦ °¡·Îç ¼ö ÀÖÀ¸¹Ç·Î, º¸¾ÈÀÌ Áß¿ä½ÃµÇ´Â ȯ°æÀ̶ó¸é sshÀ» »ç¿ëÇÒ °ÍÀ» ±ÇÇÑ´Ù.


4.1.3. ¾ÏÈ£ ÀÎÁõ ¹æ½Ä ÀÌ¿ë

¾ÏÈ£ ÀÎÁõ ¹æ½ÄÀº ¾ÕÀÇ µÎ ¹æ½Ä°ú´Â ´Þ¸® CVS ¸í·ÉÀ» »ç¿ëÇϱ⿡ ¾Õ¼­ ·Î±×ÀÎÀ» ÇØ¾ß ÇÑ´Ù. CVS·Î ÆÄÀÏÀ» Á¦°øÇÏ´Â °ø°³ ÇÁ·ÎÁ§Æ®µéÀÇ °æ¿ì ȨÆäÀÌÁö¿¡¼­ 'CVSROOT¸¦ ...·Î ¼³Á¤ÇϽʽÿÀ'¶ó´Â ¹®±¸¸¦ º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌ°ÍÀÌ ¹Ù·Î ¾ÏÈ£ ÀÎÁõ ¹æ½ÄÀÇ ÀúÀå¼Ò À§Ä¡ÀÌ´Ù. cvs.webdox.co.krÀ̶õ ±â°èÀÇ /home/cvs¿¡ ÀúÀå¼Ò°¡ À§Ä¡ÇÏ°í minskimÀ̶õ CVS °èÁ¤ÀÌ ¸¸µé¾îÁ® ÀÖ´Ù¸é ´ÙÀ½°ú °°ÀÌ ·Î±×ÀÎÇÒ ¼ö ÀÖ´Ù.

$ cvs -d :pserver:minskim@cvs.webdox.or.kr:/home/cvs login
±×·¯¸é ¾ÏÈ£¸¦ ¹°¾î¿À´Âµ¥ ¾ÏÈ£´Â CVSROOT/passwd¿¡ CVS °èÁ¤À» Ãß°¡ÇÒ ¶§ »ç¿ëÇÑ °Í°ú °°´Ù. ÀúÀå¼Ò À§Ä¡ÀÇ :ext:¸¸ :pserver:·Î ¹Ù²î¾úÀ» »Ó, Çü½ÄÀº sshÀ» ÀÌ¿ëÇÏ´Â °æ¿ì¿Í µ¿ÀÏÇÔÀ» ¾Ë ¼ö ÀÖ´Ù.

ÀÏ´Ü ·Î±×ÀÎÀ» ÇÏ°í ³ª¸é ÀÎÁõ Á¤º¸°¡ .cvspass¶õ ÆÄÀÏ¿¡ ÀúÀåÀÌ µÇ¸ç, ÀÌÈķδ ¾ÏÈ£ ¾øÀÌ CVS ¸í·ÉÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. ¹æ¹ýÀº ´ÙÀ½°ú °°´Ù.

$ cvs -d :pserver:minskim@cvs.webdox.or.kr:/home/cvs ¸í·É


4.2. ÇÁ·ÎÁ§Æ® ÃʱâÈ­

»ç¿ë °¡´ÉÇÑ CVS ÀúÀå¼Ò°¡ ÀÖ°í, ¾î¶»°Ô ÀúÀå¼Ò¸¦ ÀÌ¿ëÇÏ´ÂÁö ¾Ë°í ÀÖ´Ù¸é ÇÁ·ÎÁ§Æ®¸¦ ½ÃÀÛÇÒ ¸ðµç Áغñ°¡ ³¡³­ ¼ÀÀÌ´Ù. ´õ±º´Ù³ª ±âÁ¸ÀÇ ÇÁ·ÎÁ§Æ®¿¡ CVS¸¦ µµÀÔÇÏ·Á´Â °æ¿ì¶ó¸é ÀÌ¹Ì µð·ºÅ丮¿Í ÆÄÀϵéÀÌ ÀÖÀ»Å×´Ï À̸¦ ÀúÀå¼Ò¿¡ ÀúÀåÇÏ´Â ¹æ¹ý¸¸ ¹è¿ì¸é µÈ´Ù. ÇÏÁö¸¸ óÀ½ ½ÃÀÛÇÏ´Â ÇÁ·ÎÁ§Æ®¸¦ CVS·Î °ü¸®ÇÏ·Á ÇÑ´Ù¸é ¸ÕÀú µð·ºÅ丮 ±¸Á¶¸¦ Àß ¼³°èÇØ¾ß ÇÑ´Ù. ¹°·Ð ¾ðÁ¦¶óµµ CVS¸¦ ÀÌ¿ëÇؼ­ ÆÄÀÏÀÇ À§Ä¡¸¦ ¿Å±â°í »õ·Î¿î µð·ºÅ丮¸¦ ¸¸µå´Â µîÀÇ ÀÏÀº °¡´ÉÇÏ´Ù. ÇÏÁö¸¸ óÀ½ºÎÅÍ µð·ºÅ丮 ±¸Á¶¿Í °¢ µð·ºÅ丮¿¡ µé¾î°¥ ÆÄÀϵéÀ» Àß Á¤ÇØ ³õ´Â °ÍÀº Àüü ÇÁ·ÎÁ§Æ® °ü¸®¿¡µµ µµ¿òÀ» ÁֹǷΠµÇµµ·ÏÀÌ¸é ³ªÁß¿¡ ÆÄÀÏÀ̳ª µð·ºÅ丮ÀÇ À§Ä¡ º¯°æÀÌ »ý±âÁö ¾Êµµ·Ï ¼³°è¸¦ ÇÏ°í ÇÁ·ÎÁ§Æ®¸¦ ½ÃÀÛÇϵµ·Ï ÇÏÀÚ.

¸ÕÀú ÇÒ ÀÏÀº ÇÁ·ÎÁ§Æ®ÀÇ À̸§À» Á¤ÇÏ´Â °ÍÀÌ´Ù. ÀÌ À̸§Àº ÀúÀå¼Ò¿¡¼­ ÀÌ ÇÁ·ÎÁ§Æ® °ü·Ã ÆÄÀϵéÀ» ÀúÀåÇÏ´Â µð·ºÅ丮ÀÇ À̸§À¸·Î ¾²ÀδÙ. ¿©±â¿¡¼­´Â myprj¶õ À̸§À¸·Î ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé¾î º¸±â·Î ÇÏ°Ú´Ù. ÀÌÈÄ¿¡ ³ª¿Ã ¸ðµç ¿¹´Â ȯ°æº¯¼ö CVSROOT°¡ Á¦´ë·Î ¼³Á¤µÇ¾î ÀÖ´Ù°í °¡Á¤ÇÑ´Ù. CVSROOT¸¦ ¾î¶»°Ô ¼³Á¤ÇØ¾ß Çϴ°¡¿¡ ´ëÇؼ­´Â 4.1절ÀÇ ³»¿ëÀ» Âü°íÇϱ⠹ٶõ´Ù.

myprj¶õ µð·ºÅ丮°¡ ´ÙÀ½°ú °°ÀÌ µÇ¾î ÀÖ´Ù°í ÇÏÀÚ.

$ cd myprj
$ ls
Hello.java     README
ÀúÀå¼Ò¿¡ »õ ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé°í ÀÌ µÎ ÆÄÀÏÀ» ÀúÀåÇϱâ À§Çؼ­´Â import ¸í·ÉÀ» »ç¿ëÇÑ´Ù. import ¸í·ÉÀÇ »ç¿ë¹ýÀº ´ÙÀ½°ú °°´Ù.
$ cvs import -m "¸Þ½ÃÁö" ÇÁ·ÎÁ§Æ®À̸§ vender_tag release_tag
'¸Þ½ÃÁö'´Â ÇÁ·ÎÁ§Æ®¸¦ ½ÃÀÛÇϸ鼭 ÀúÀå¼Ò¿¡ ±â·ÏÇÏ°í ½ÍÀº ³»¿ëÀ» Àû¾îÁÖ¸é µÈ´Ù. CVS´Â ÆÄÀÏÀ» ÀúÀåÇÒ ¶§¸¶´Ù ¸Þ½ÃÁö¸¦ Àûµµ·Ï ÇÏ°í ÀÖ´Ù. ÀÌ ³»¿ëÀ» ¿øÇÏ´Â ¶§¿¡ ´Ù½Ã º¼ ¼ö ÀÖÀ¸¹Ç·Î °³¹ßÀÚ°¡ ¾î¶² ÀÛ¾÷À» Çß´ÂÁö¸¦ Àû¾î ³õÀ¸¸é ´Ù¸¥ °³¹ßÀÚµéÀÌ ÆÄÀÏÀÇ º¯°æ ³»¿ë, ÀÛ¾÷ Áøô »óȲµîÀ» ÆľÇÇϴµ¥¿¡ µµ¿òÀ» ÁÙ ¼ö ÀÖ´Ù. µÚÀÇ µÎ ű״ Áö±Ý ´Ü°è¿¡¼­´Â º° Àǹ̰¡ ¾øÀ¸¹Ç·Î Àû´çÇÑ ¸»À» ½á ÁÖ¸é µÈ´Ù. myprj¶õ ÇÁ·ÎÁ§Æ®¸¦ ÀúÀå¼Ò¿¡ ¸¸µé±â À§Çؼ­´Â ´ÙÀ½ ¸í·ÉÀ» »ç¿ëÇÑ´Ù.
$ cvs import -m "ÇÁ·ÎÁ§Æ® ½ÃÀÛ" myprj webdox start
N myprj/Hello.java
N myprj/README

No conflicts created by this import
¾Õ¿¡ ¸»ÇßµíÀÌ µÚÀÇ µÎ ´Ü¾î´Â º° Àǹ̰¡ ¾øÀ¸¹Ç·Î Å©°Ô ½Å°æ¾²Áö ¸»±â ¹Ù¶õ´Ù. ÀÌ ¸í·ÉÀ» ½ÇÇàÇϸé CVS´Â ÀúÀå¼Ò¿¡ myprj¶õ µð·ºÅ丮¸¦ ¸¸µé°í, °Å±â¿¡ README¿Í Hello.java¸¦ ÀúÀåÇÑ´Ù. ÀÌ ¿Ü¿¡µµ ¿É¼ÇÀ¸·Î ÁØ ¸Þ½ÃÁö¿Í °¢ ÆÄÀÏÀÇ ºÎ°¡ÀûÀÎ Á¤º¸¸¦ ±â·ÏÇÏ°Ô µÈ´Ù. Ãâ·ÂµÇ´Â ¸Þ½ÃÁö¸¦ º¸¸é °¢ ÆÄÀÏ À̸§ ¾Õ¿¡ NÀ̶õ ±ÛÀÚ°¡ ÀÖ´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. CVS´Â ƯÁ¤ ¸í·É ¼öÇà½Ã¿¡ ÆÄÀϺ°·Î ¼öÇà °á°ú¸¦ ³ªÅ¸³½´Ù. NÀº »õ·Î¿î ÆÄÀÏÀÌ Ãß°¡µÈ °ÍÀ» ÀǹÌÇÑ´Ù. ÀÌÈÄÀÇ ¿¹¿¡¼­ ´Ù¸¥ °æ¿ìµéµµ º¸°Ô µÉ °ÍÀÌ´Ù. ¸¶Áö¸· ÁÙ¿¡¼­ conflict¶õ ÇöÀç µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀÏÀ» ÀúÀå¼Ò¿¡ ÀúÀåÇÏ°Ô µÇ¸é ¾î¶² ÀÌÀ¯·Î ÀÌ¹Ì ÀúÀå¼Ò¿¡ ÀÖ´Â ÆÄÀÏ°ú Ãæµ¹À» ÀÏÀ¸Å°´Â °æ¿ì¸¦ ¶æÇÑ´Ù. ´Ù¸¥ »ç¶÷ÀÌ ÀÛ¾÷Çؼ­ ÀúÀå¼Ò¿¡ ÀúÀåÇØ ³õÀº °ÍÀ» µ¤¾î¾²·Á ÇѴٰųª ÇÏ´Â °æ¿ìÀε¥, ÀÚ¼¼ÇÑ °ÍÀº µÚ¿¡¼­ conflict°¡ ¹ß»ýÇÏ´Â °æ¿ì¸¦ ¿¹·Î µé¾î ¼³¸íÇÏ°Ú´Ù. ¿©±â¿¡¼­´Â ÀúÀå¼Ò¿¡ ¾Æ¹« ÆÄÀϵµ ¾øÀ¸¹Ç·Î Ãæµ¹(conflict)ÀÌ »ý±âÁö ¾Ê´Â °ÍÀÌ ´ç¿¬ÇÏ´Ù.

import ¸í·ÉÀ¸·Î ÇÁ·ÎÁ§Æ®¸¦ ÃʱâÈ­ÇÏ°í ³ª¸é ´õ ÀÌ»ó ÇöÀç µð·ºÅ丮¿¡ °®°í ÀÖ´Â °ÍµéÀ» »ç¿ëÇÏ¸é ¾È µÈ´Ù. ÇöÀç µð·ºÅ丮¿¡´Â CVS¿¡ °ü·ÃµÈ Á¤º¸°¡ ¾Æ¹« °Íµµ ¾ø±â ¶§¹®ÀÌ´Ù. ´ë½Å ÀúÀå¼Ò¿¡ ¸ðµç ³»¿ëÀÌ µé¾î ÀÖÀ¸¹Ç·Î myprj µð·ºÅ丮 ÀÚü¸¦ ¿ÏÀüÈ÷ Áö¿ö¹ö·Áµµ ±¦Âú´Ù. ´ÙÀ½ Àý¿¡¼­ ¼Ò°³ÇÒ ¸í·ÉµéÀ» ÀÌ¿ëÇؼ­ ¾ðÁ¦¶óµµ ´Ù½Ã ºÒ·¯¿Ã ¼ö°¡ ÀÖ´Ù. ÀÌ»óÀ¸·Î ÇÁ·ÎÁ§Æ® ÃʱâÈ­´Â ¸ðµÎ ³¡³­ °ÍÀ̸ç, ÀÌÈķδ °¢ °³¹ßÀÚµéÀÌ CVS¸¦ ÀÌ¿ëÇÏ¿© ÇÁ·ÎÁ§Æ®¸¦ ÁøÇà½ÃÅ°´Â Àϸ¸ÀÌ ³²¾Æ ÀÖ´Ù.


4.3. ÇÁ·ÎÁ§Æ® ÁøÇà

ÀÌÁ¦ ÇÁ·ÎÁ§Æ®¿¡ Âü¿©ÇÏ´Â °³¹ßÀÚÀÇ ÀÔÀå¿¡¼­ ÇÁ·ÎÁ§Æ®¸¦ ¹Ù¶óº¸ÀÚ. ¸ðµç ÇÊ¿äÇÑ ÆÄÀϵéÀº ÀúÀå¼Ò¿¡ °®Ãß¾îÁ® ÀÖ°í, ÇÁ·ÎÁ§Æ® °ü¸®ÀڷκÎÅÍ ÀúÀå¼ÒÀÇ À§Ä¡¿Í ÇÁ·ÎÁ§Æ® À̸§µµ Å뺸¹Þ¾Ò´Ù. ±×·¯¸é °³¹ßÀÚ´Â ¾ÕÀ¸·ÎÀÇ ÀÛ¾÷À» À§ÇØ ÀúÀå¼ÒÀÇ À§Ä¡¸¦ ȯ°æº¯¼ö CVSROOT¿¡ ÀúÀåÇÏ°í, ÀÛ¾÷À» ½ÃÀÛÇÏ¸é µÈ´Ù. ´Ü, CVS´Â ÆÄÀÏÀÇ º¯°æ ½Ã°¢À» ÂüÁ¶ÇÏ´Â °æ¿ì°¡ ¸¹À¸¹Ç·Î °¢ °³¹ßÀÚµéÀÌ »ç¿ëÇÏ´Â ±â°èÀÇ ½Ã°£À» ¼­·Î ¸ÂÃß¾î ³õÀ» ÇÊ¿ä°¡ ÀÖ´Ù.


4.3.1. ÀÛ¾÷ °ø°£ »ý¼º (checkout)

ÀÛ¾÷À» ½ÃÀÛÇϱâ À§Çؼ­´Â ÆÄÀÏÀ» ¸¶À½´ë·Î º¯°æÇÏ°í ÀúÀåÇÏ¿© Å×½ºÆ®ÇØ º¼ ¼ö ÀÖ´Â ÀÛ¾÷ °ø°£ÀÌ ÇÊ¿äÇÏ´Ù. ÀúÀå¼Ò¿¡ ÀÖ´Â ÆÄÀϵéÀ» ºÒ·¯¿Í ³ª¸¸ÀÇ ÀÛ¾÷ °ø°£À» ¸¸µå´Â ¸í·ÉÀÌ checkoutÀÌ´Ù. ¾Õ¿¡¼­ ¸¸µç myprj¸¦ checkout ¸í·ÉÀ¸·Î ºÒ·¯ ¿ÀÀÚ.

$ cvs checkout myprj
cvs checkout: Updating myprj
U myprj/Hello.java
U myprj/README
checkout ´ë½Å co¸¸ ½á Á־ µÈ´Ù. ¾Õ¿¡ ºÙÀº U´Â ÆÄÀÏÀÌ °»½Å(update)µÇ¾úÀ½À» ÀǹÌÇÑ´Ù. ¸í·ÉÀ» ¼öÇàÇÏ°í ³ª¸é ÇöÀç µð·ºÅ丮¿¡ myprj¶õ µð·ºÅ丮°¡ »ý±ä´Ù. ÀÌ µð·ºÅ丮°¡ ¹Ù·Î ÀÛ¾÷ °ø°£ÀÌ´Ù. ÀÌ ¾È¿¡¼­ ÇÊ¿ä¿¡ µû¶ó ÆÄÀϵéÀ» ¼öÁ¤ÇÏ°í, À̸¦ ´Ù½Ã ÀúÀå¼Ò·Î ÀúÀåÇÏ¸é µÇ´Â °ÍÀÌ´Ù. ±×·¯¸é µð·ºÅ丮 ¾È¿¡´Â ¾î¶² ÆÄÀϵéÀÌ µé¾î ÀÖÀ»±î?
$ cd myprj
$ ls
CVS    Hello.java    README
ÇÁ·ÎÁ§Æ®¸¦ ÃʱâÈ­ÇÒ ¶§ ÀÖ´ø ÆÄÀϵéÀÌ ±×´ë·Î µé¾î ÀÖ´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ Çϳª ´Þ¶óÁø °ÍÀÌ ÀÖ´Ù. CVS¶õ µð·ºÅ丮°¡ ¹Ù·Î ±×°ÍÀÌ´Ù. ¹Ù·Î ÀÌ µð·ºÅ丮¿¡ CVS°¡ ÆÄÀϵéÀ» °ü¸®Çϴµ¥¿¡ ÇÊ¿äÇÑ Á¤º¸°¡ ±â·ÏµÈ´Ù. ¿¹¸¦ µé¸é °¢ ÆÄÀϵéÀÇ ¹öÁ¯, ÃÖÁ¾ ¼öÁ¤ ½Ã°¢, ÀúÀå¼ÒÀÇ À§Ä¡ µîÀÌ ÀÌ¿¡ ¼ÓÇÑ´Ù. ¾ÕÀ¸·Î ¿©·¯ CVS ¸í·ÉµéÀ» »ç¿ëÇÏ°Ô µÇ´Âµ¥, ±×¶§¸¶´Ù CVS´Â ÀÌ µð·ºÅ丮ÀÇ Á¤º¸¸¦ Âü°íÇÏ¿© °¢ ¸í·ÉÀ» ¼öÇàÇÑ´Ù. ÇÏÁö¸¸ °³¹ßÀÚ°¡ ÀÌ µð·ºÅ丮ÀÇ ³»¿ë¿¡ ½Å°æ¾µ ÇÊ¿ä´Â ÀüÇô ¾ø´Ù. °ü½ÉÀÌ ÀÖ´Ù¸é »ìÆ캸´Â °ÍÀº ÁÁÁö¸¸, ³»¿ëÀ» ÀÓÀÇ·Î º¯°æÇѴٰųª Çؼ­´Â ¾È µÈ´Ù.


4.3.2. ÀÛ¾÷ ³»¿ëÀÇ ÀúÀå (commit)

¸¸µé¾îÁø ÀÛ¾÷ °ø°£¿¡¼­ ÀÛ¾÷À» ½ÃÀÛÇغ¸ÀÚ. Hello.javaÀÇ ³»¿ëÀÌ ´ÙÀ½°ú °°´Ù°í ÇÏÀÚ.

public class Hello {
    public static void main(String args[]) {
    }
}
¿©±â¿¡ Àλ縻À» Ãâ·ÂÇÏ´Â ºÎºÐÀ» Ãß°¡Çغ¸ÀÚ. ¾Æ¹« ÆíÁý±â·Î³ª ÆÄÀÏÀ» ¿­¾î ÀÛ¾÷ÇÏ¸é µÈ´Ù. CVS¸¦ »ç¿ëÇÑ´Ù°í Çصµ Ưº°ÇÑ ¿¡µðÅͳª ÅëÇÕ °³¹ß ȯ°æÀ» ÇÊ¿ä·Î ÇÏÁö´Â ¾Ê´Â´Ù. Hello.java¿¡ '¾È³çÇϼ¼¿ä?'¶ó°í Ãâ·ÂÇÏ´Â ¹®ÀåÀ» Ãß°¡Çß´Ù°í ÇÏÀÚ.
public class Hello {
    public static void main(String args[]) {
        System.out.println("¾È³çÇϼ¼¿ä?");
    }
}
ÄÄÆÄÀÏÀ» Çؼ­ ½ÇÇàÀ» ÇØ º¸°í ¿¹»ó´ë·Î ½ÇÇàµÈ´Ù¸é ÀÌÁ¦ ÀÛ¾÷ ³»¿ëÀ» ÀúÀå¼Ò¿¡ ÀúÀåÇØ¾ß ÇÑ´Ù. ±×·¡¾ß ´Ù¸¥ °³¹ßÀڵ鵵 Àλ縻ÀÌ Ãß°¡µÇ¾ú´Ù´Â °ÍÀ» ¾Ë°Ô µÉ °ÍÀÌ´Ù. ÆÄÀÏÀÇ º¯µ¿ »çÇ×À» ÀúÀå¼Ò¿¡ ÀúÀåÇÏ´Â ¸í·ÉÀº commitÀÌ´Ù.
$ cvs commit -m "Àλ縻 Ãß°¡" Hello.java
Checking in Hello.java;
/home/cvs/myprj/Hello.java,v  <--  Hello.java
new revision: 1.2; previous revision: 1.1
done
¾î¶² ¸í·ÉÀÎÁö ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. -mÀº ¾ÕÀÇ ¿¹¿Í ¸¶Âù°¡Áö·Î ¸Þ½ÃÁö¸¦ ÀǹÌÇÑ´Ù. ÀÌ ¸í·ÉÀ¸·Î Hello.java´Â 'Àλ縻 Ãß°¡'¶õ ¸Þ½ÃÁö¿Í ÇÔ²² ÀúÀå¼Ò¿¡ ÀúÀåµÈ´Ù. ±×·¸´Ù°í ÀÌÀüÀÇ Hello.java°¡ ¾ø¾îÁö´Â °ÍÀº ¾Æ´Ï´Ù. CVS´Â °¢ ¹öÁ¯ÀÇ º¯°æ ³»¿ëÀ» ÆľÇÇÏ¿© ¾ðÁ¦¶óµµ °³¹ßÀÚ°¡ ¿øÇÏ´Â ¹öÁ¯À» ²¨³» ÁÙ ¼ö ÀÖµµ·Ï ÆÄÀϵéÀ» ÀúÀåÇÑ´Ù. Ãâ·Â °á°ú¸¦ º¸¸é ¿ø·¡ ÀÖ´ø Hello.java´Â 1.1ÀÌ°í, »õ·Î ÀúÀåµÈ Hello.java´Â 1.2ÀÓÀ» ¾Ë ¼ö ÀÖ´Ù. ÀÌ ¹øÈ£´Â CVS°¡ ÀÚµ¿À¸·Î ºÙÀÌ´Â °ÍÀÌ¸ç º¯°æ »çÇ×ÀÌ ÀúÀåµÉ ¶§¸¶´Ù ¿Ã¶ó°¡¹Ç·Î °¢ ÆÄÀϸ¶´Ù ´Ù¸¦ ¼ö ÀÖ´Ù. ³ªÁß¿¡ ƯÁ¤ ¹öÁ¯ÀÌ ÇÊ¿äÇÏ´Ù¸é ÀÌ ¹øÈ£¸¦ ÀÌ¿ëÇؼ­ ºÒ·¯ ¿À¸é µÈ´Ù.

¸Ç ³¡ÀÇ ÆÄÀÏ À̸§Àº »ý·«ÇÒ ¼ö ÀÖ´Ù. ÆÄÀÏ À̸§À» ÁÖÁö ¾ÊÀ¸¸é CVS°¡ º¯°æµÈ ÆÄÀÏÀ» ¸ðµÎ ã¾Æ ÀúÀå¼Ò¿¡ ÀúÀåÇÑ´Ù. À̶§ ÀúÀåµÇ´Â ¸ðµç ÆÄÀÏ¿¡´Â °°Àº ¸Þ½ÃÁö°¡ ºÙ°Ô µÈ´Ù. ÇÏÁö¸¸ ÆÄÀϸ¶´Ù ´Ù¸¥ ¸Þ½ÃÁö¸¦ ºÙÀÌ°í ½Í´Ù°Å³ª ƯÁ¤ ÆÄÀÏÀÇ º¯°æ ³»¿ë¸¸À» ÀúÀåÇÏ°í ½Í´Ù¸é À§ÀÇ ¿¹Ã³·³ ÆÄÀÏ À̸§À» ¸í½ÃÇØ ÁÖ¾î¾ß ÇÑ´Ù.

commitÀ» ÇÒ ¶§ ÁÖÀÇÇÒ Á¡Àº ¹Ýµå½Ã Á¦´ë·Î µ¿ÀÛÇϴ°¡¸¦ È®ÀÎÇÏ°í commitÀ» ÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. ÀÏ´Ü commitÀ» ÇÏ¸é ´Ù¸¥ °³¹ßÀڵ鵵 ³ªÀÇ ÀÛ¾÷ °á°ú¸¦ ¹Þ¾Æ°¥ ¼ö ÀÖ´Ù. ±×·¯¹Ç·Î ³»°¡ Á¦´ë·Î ÄÄÆÄÀÏÁ¶Â÷ µÇÁö ¾Ê´Â ÆÄÀÏÀ» commitÀ¸·Î ÀúÀå¼Ò¿¡ ÀúÀåÇϸé ÀÌ ÆÄÀÏÀ» ¹Þ¾Æ°£ ´Ù¸¥ °³¹ßÀڵ鵵 ÄÄÆÄÀÏÀÌ ¾È µÇ´Â °á°ú¸¦ °¡Á®¿Ã °ÍÀÌ´Ù. ƯÈ÷³ª ¿©·¯ ÆÄÀÏÀ» º¯°æÇÏ°í ÀϺΠÆÄÀϸ¸À» commitÇÏ´Â °æ¿ì¶ó¸é ´õ¿í ÁÖÀÇÇØ¾ß ÇÑ´Ù. °øµ¿ ÀÛ¾÷À» ÇÏ´Â °æ¿ì¶ó¸é ÀÌ·¸°Ô ÀÚ½ÅÀÇ ºÎÁÖÀÇ·Î ´Ù¸¥ °³¹ßÀڵ鿡°Ô ÇÇÇظ¦ ÀÔÈ÷´Â ÀÏÀº Àý´ë·Î »ï°¡¾ß ÇÑ´Ù. ´ë°³ÀÇ °æ¿ì º¯°æ ³»¿ë Àüü°¡ ¼­·Î °ü·ÃÀÌ ÀÖ´Â °æ¿ì°¡ ¸¹À¸¹Ç·Î ƯÁ¤ÇÑ ÀÎÀÚ¸¦ ÁÖÁö ¾Ê°í commit ¸í·ÉÀ» »ç¿ëÇÏ¿© ÀÛ¾÷ °ø°£ ÀüüÀÇ º¯°æ ³»¿ëÀÌ ÇѲ¨¹ø¿¡ ÀúÀå¼Ò¿¡ ÀúÀåµÇµµ·Ï ÇÏ´Â °ÍÀÌ ÁÁ´Ù.


4.3.3. ÀúÀå¼ÒÀÇ ÆÄÀÏ ¹Þ¾Æ¿À±â (update)

°øµ¿ ÀÛ¾÷¿¡¼­ ÀÚ½ÅÀÇ ÀÛ¾÷ °á°ú¸¦ ÀúÀåÇÏ´Â ÀÏ ¸øÁö ¾Ê°Ô Áß¿äÇÑ ÀÏÀº ´Ù¸¥ »ç¶÷ÀÇ ÀÛ¾÷ °á°ú¸¦ ¹Þ¾Æ¿À´Â ÀÏÀÌ´Ù. ÀÚ½ÅÀÌ ÀÛ¾÷ÇÑ ³»¿ëÀ» ¸ðµÎ ÀúÀåÇÑ »óŶó¸é ÀÛ¾÷ µð·ºÅ丮¸¦ Áö¿ö¹ö¸®°í checkout ¸í·ÉÀ¸·Î »õ·Î¿î ÀÛ¾÷ °ø°£À» ¸¸µå´Â °Íµµ ÇÑ ¹æ¹ýÀÌ µÉ °ÍÀÌ´Ù. ÇÏÁö¸¸ ÀÌ´Â ¸ðµç ÆÄÀÏÀ» »õ·Î ¹Þ¾Æ¿À¹Ç·Î ÀúÀå¼Ò¿ÍÀÇ ¿¬°áÀÌ ´À¸± °æ¿ì¿¡´Â »ó´çÇÑ ½Ã°£À» ±â´Ù·Á¾ß ÇÒ ¼öµµ ÀÖ´Ù. º¸´Ù ÁÁÀº ¹æ¹ýÀº update ¸í·ÉÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ÀÛ¾÷ÁßÀÌ´ø µð·ºÅ丮¿¡¼­ ÀÌ ¸í·ÉÀ» ¾²¸é CVS¿¡ ÀúÀåµÈ ÆÄÀϵé Áß ³»°¡ ¹Þ¾Æ¿Â ÀÌÈÄ·Î º¯°æµÈ °Íµé¸¸À» ´Ù½Ã ¹Þ¾Æ ¿Â´Ù.

$ cvs update
cvs update: Updating .
ÇöÀç ÀÛ¾÷ °ø°£¿¡ ÀÖ´Â ÆÄÀϵéÀÌ ÀúÀå¼Ò¿¡ ÀÖ´Â ÆÄÀÏ°ú ¸ðµÎ µ¿ÀÏÇϸé À§¿Í °°ÀÌ º°´Ù¸¥ Ãâ·Â ¾øÀÌ ³¡³¯ °ÍÀÌ´Ù. ±×·¸´Ù¸é ÀÛ¾÷ °ø°£¿¡ ÀÖ´Â ÆÄÀÏÀ» ¼öÁ¤ÇÏ°í commitÀ» ÇÏÁö ¾ÊÀº »óŶó¸é ¾î¶² °á°ú°¡ ³ª¿À´ÂÁö º¸±â À§ÇØ Hello.java¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤Çغ¸ÀÚ.
public class Hello {
    public static void main(String args[]) {
        System.out.println("¾È³çÇϼ¼¿ä?");
	System.out.println("¹Ý°©½À´Ï´Ù.");
    }
}
¿ø·¡ÀÇ ÆÄÀÏ¿¡ "¹Ý°©½À´Ï´Ù."¸¦ Ãâ·ÂÇÏ´Â ¹®ÀåÀ» Ãß°¡ÇÏ¿´´Ù. ÀÌÁ¦ update ¸í·ÉÀ» ½ÇÇàÇÏ¸é ´ÙÀ½°ú °°ÀÌ ³ª¿Ã °ÍÀÌ´Ù.
$ cvs update
cvs update: Updating .
M Hello.java
ÆÄÀÏ À̸§ ¾Õ¿¡ ÀÖ´Â ¿µ¹®ÀÚ(ÀÌ °æ¿ì´Â M)°¡ °¢ ÆÄÀϺ° »óŸ¦ ¾Ë·ÁÁØ´Ù. MÀº ÆÄÀÏÀÌ º¯°æµÈ(modified) »óÅÂÀÓÀ» ÀǹÌÇÑ´Ù. Áï, ÆÄÀÏÀÇ ³»¿ëÀÌ ¿ø·¡ ÀúÀå¼Ò¿¡ ÀÖ´Â °Í°ú ´Þ¶óÁ³À» ¶§ MÀ» ½á¼­ Ç¥½ÃÇÏ°Ô µÈ´Ù.

ÀúÀå¼ÒÀÇ ÆÄÀÏ°ú ÀÛ¾÷ °ø°£ÀÇ ÆÄÀÏÀÌ ´Þ¶óÁú ¼ö ÀÖ´Â ¶Ç ´Ù¸¥ °æ¿ì´Â ´Ù¸¥ »ç¶÷ÀÌ ÆÄÀÏÀ» º¯°æÇÏ¿© commit ¸í·ÉÀ¸·Î ÀúÀå¼Ò¿¡ ÀúÀåÇÑ °æ¿ìÀÌ´Ù. ¿¹¸¦ µé¾î ¿ø·¡ÀÇ README ÆÄÀÏÀÌ ´ÙÀ½°ú °°¾Ò´Ù°í ÇÏÀÚ.

$ cat README
ÀÌ ÆÄÀÏÀº ¸Å¿ì Áß¿äÇÑ ³»¿ëÀ» ´ã°í ÀÖ½À´Ï´Ù.
±×·±µ¥ ´Ù¸¥ °³¹ßÀÚ°¡ README ÆÄÀÏÀ» ´ÙÀ½°ú °°ÀÌ º¯°æÇÏ¿© ÀúÀå¼Ò¿¡ ÀúÀåÇÏ¿´´Ù.
$ cat README
ÀÌ ÆÄÀÏÀº ¸Å¿ì Áß¿äÇÑ ³»¿ëÀ» ´ã°í ÀÖ½À´Ï´Ù.
1999³â 12¿ù 11ÀÏ
$ cvs commit -m "³¯Â¥ Ãß°¡" README
Checking in README;
/home/cvs/myprj/README,v  <--  README
new revision: 1.2; previous revision: 1.1
done
ÀÌÁ¦ ³»°¡ update¸¦ ÇÏ¸é ´ÙÀ½°ú °°Àº °á°ú¸¦ º¼ ¼ö ÀÖ´Ù.
$ cat README
ÀÌ ÆÄÀÏÀº ¸Å¿ì Áß¿äÇÑ ³»¿ëÀ» ´ã°í ÀÖ½À´Ï´Ù.
$ cvs update
cvs update: Updating .
M Hello.java
U README
README ¾Õ¿¡ ºÙÀº U´Â ÆÄÀÏÀÌ °»½ÅµÈ(updated) °ÍÀ» ÀǹÌÇÑ´Ù. ÀÌÁ¦ ³» ÀÛ¾÷ °ø°£ÀÇ README°¡ ÀúÀå¼Ò¿¡ ÀúÀåµÈ ³»¿ë°ú °°°Ô °»½ÅµÈ °ÍÀ» º¼ ¼ö ÀÖ´Ù.
$ cat README
ÀÌ ÆÄÀÏÀº ¸Å¿ì Áß¿äÇÑ ³»¿ëÀ» ´ã°í ÀÖ½À´Ï´Ù.
1999³â 12¿ù 11ÀÏ

±×·¸´Ù¸é ÀÌ µÎ °æ¿ì°¡ È¥ÇÕµÈ °æ¿ì´Â ¾î¶² ÀÏÀÌ ¹ß»ýÇÒ±î? Áï, ´Ù¸¥ °³¹ßÀÚ°¡ ¼öÁ¤ÇÏ¿© ÀúÀå¼Ò¿¡ ÀúÀåÇÑ ÆÄÀÏÀ» ³ª ¿ª½Ã ¼öÁ¤ÇÑ ÈÄ update¸¦ ÇÏ´Â °æ¿ìÀÌ´Ù. ´Ù¸¥ °³¹ßÀÚ°¡ Hello.java¸¦ ´ÙÀ½°ú °°ÀÌ main ÇÔ¼ö ¾Õ¿¡ ÁÖ¼®À» ÇÑ ÁÙ Ãß°¡ÇÏ¿© commitÀ» Çß´Ù°í »ý°¢Çغ¸ÀÚ.

$ cat Hello.java
public class Hello {
    // main ÇÔ¼ö
    public static void main(String args[]) {
        System.out.println("¾È³çÇϼ¼¿ä?");
    }
}
$ cvs commit -m "ÁÖ¼® Ãß°¡" Hello.java
Checking in Hello.java;
/home/cvs/myprj/Hello.java,v  <--  Hello.java
new revision: 1.3; previous revision: 1.2
done
±×·± ´ÙÀ½ ³»°¡ update¸¦ ÇÏ¸é ´ÙÀ½°ú °°ÀÌ µÈ´Ù.
$ cat Hello.java
public class Hello {
    public static void main(String args[]) {
        System.out.println("¾È³çÇϼ¼¿ä?");
	System.out.println("¹Ý°©½À´Ï´Ù.");
    }
}
$ cvs update
cvs update: Updating .
RCS file: /home/cvs/myprj/Hello.java,v
retrieving revision 1.2
retrieving revision 1.3
Merging differences between 1.2 and 1.3 into Hello.java
M Hello.java
¿©±â¼­ update ¸í·ÉÀº ÇöÀç µð·ºÅ丮ÀÇ Hello.java´Â 1.2¿¡¼­ ¼öÁ¤µÈ »óÅÂÀÌ°í, ÀúÀå¼Ò¿¡ ÀÖ´Â Hello.java´Â 1.3À̱⠶§¹®¿¡ ÀúÀå¼ÒÀÇ ³»¿ëÀ» °¡Áö°í 1.2¿Í 1.3ÀÇ Â÷À̸¦ ÆľÇÇÏ°Ô µÈ´Ù. ±× Â÷ÀÌ°¡ ÇÑ ÁÙÀÌ Ãß°¡µÈ °ÍÀÓÀ» ¹ß°ßÇÏ°í ³ª¸é ±× Â÷À̸¦ ÇöÀç µð·ºÅ丮ÀÇ Hello.java¿¡ ¹Ý¿µÇÑ´Ù. ÇÏÁö¸¸ Hello.java¿¡´Â "¹Ý°©½À´Ï´Ù."¸¦ Ãâ·ÂÇÏ´Â ÁÙµµ µé¾î Àֱ⠶§¹®¿¡ ¿©ÀüÈ÷ ÀúÀå¼Ò¿¡ ÀÖ´Â ÆÄÀÏ°ú´Â ´Ù¸¥ »óÅÂÀÌ´Ù. µû¶ó¼­ ÀúÀå¼Ò¿¡ ÀÖ´Â ³»¿ë¿¡¼­ º¯°æµÇ¾ú´Ù´Â ÀǹÌÀÇ MÀ» Ãâ·ÂÇÏ´Â °ÍÀÌ´Ù. ½ÇÁ¦·Î Hello.javaÀÇ ³»¿ëÀ» º¸¸é ´ÙÀ½°ú °°ÀÌ ¹Ù²ï °ÍÀ» º¼ ¼ö ÀÖ´Ù.
$ cat Hello.java
public class Hello {
   // main ÇÔ¼ö
   public static void main(String args[]) {
      System.out.println("¾È³çÇϼ¼¿ä?");
      System.out.println("¹Ý°©½À´Ï´Ù.");
   }
}
´Ù¸¥ °³¹ßÀÚ°¡ Ãß°¡ÇÑ ÁÖ¼®ÀÌ µé¾î ÀÖÀ¸¸é¼­ ³»°¡ Ãß°¡ÇÑ ÁÙµµ ±×´ë·Î ÀÖÀ½À» º¼ ¼ö ÀÖ´Ù. ÀÌ°ÍÀÌ CVSÀÇ °­·ÂÇÑ ÀåÁ¡ÀÌ´Ù. Áï, ¼­·Î ´Ù¸¥ µÎ °³¹ßÀÚ°¡ °°Àº ÆÄÀÏÀ» ¼öÁ¤ÇÏ¿´´Âµ¥µµ, ¼­·ÎÀÇ ÀÛ¾÷À» Çϳª·Î ÇÕÃÄÁÖ´Â °ÍÀÌ´Ù. ÇÑ°¡Áö ÁÖÀÇÇÒ Á¡Àº, ¸¸ÀÏ update¸¦ ¼öÇàÇÒ ¶§ Hello.java¸¦ ¿¡µðÅÍ¿¡¼­ ºÒ·¯ ÀÛ¾÷ÁßÀ̾ú´Ù¸é, °è¼Ó ¿¡µðÅÍ·Î ÀÛ¾÷À» ÇÑ ÈÄ ÀúÀåÇÒ ¶§ update¿¡ ÀÇÇØ º¯°æµÈ ³»¿ëÀ» µ¤¾î ¾µ ¼ö°¡ ÀÖ´Ù´Â °ÍÀÌ´Ù. ´ëºÎºÐÀÇ ¿¡µðÅÍ´Â ÀÛ¾÷ÇÏ°í ÀÖ´Â ÆÄÀÏÀÌ ´Ù¸¥ ÇÁ·Î±×·¥¿¡ ÀÇÇØ º¯°æµÇ¸é ÀÌ »ç½ÇÀ» »ç¿ëÀÚ¿¡°Ô ¾Ë¸®°í, º¯°æµÈ ÆÄÀÏÀ» ´Ù½Ã ºÒ·¯¿Ã ¼ö ÀÖµµ·Ï ÇÏÁö¸¸, °£È¤ ±×·¸Áö ¸øÇÑ ¿¡µðÅ͵µ ÀÖÀ» ¼ö ÀÖÀ¸¹Ç·Î Á¶½ÉÇϱ⠹ٶõ´Ù.


4.3.4. Ãæµ¹ÀÇ ÇØ°á

ºñ·Ï CVS°¡ µÎ °³¹ßÀÚÀÇ ÀÛ¾÷ ³»¿ëÀ» ÇÕÃÄ ÁÖ±â´Â ÇÏÁö¸¸ ¿©±â¿¡µµ ÇÑ°è´Â ÀÖ´Ù. µÎ °³¹ßÀÚ°¡ °°Àº ºÎºÐÀ» ¼öÁ¤ÇÑ´Ù¸é CVS´Â ´©±¸ÀÇ º¯°æ ³»¿ëÀ» ÅÃÇØ¾ß ÇÏ´ÂÁö ¾Ë µµ¸®°¡ ¾ø´Ù. ÀÌ·± °æ¿ì¸¦ Ãæµ¹(conflict)À̶ó Çϸç, CVS´Â ÀÌ »ç½ÇÀ» °³¹ßÀÚ¿¡°Ô ¾Ë·Á °³¹ßÀÚ°¡ ÀûÀýÇÑ Á¶Ä¡¸¦ ÃëÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.

À§ÀÇ ¿¹¿¡¼­ ´Ù¸¥ °³¹ßÀÚ°¡ ÀÛ¾÷À» °è¼ÓÇÏ¿© "ȯ¿µÇÕ´Ï´Ù."¸¦ Ãâ·ÂÇϵµ·Ï ¸¸µé°í, À̸¦ ÀúÀå¼Ò¿¡ ÀúÀåÇß´Ù°í ÇÏÀÚ. ±×·¯¸é ÀúÀå¼Ò¿¡´Â ´ÙÀ½°ú °°Àº ³»¿ëÀÌ µé¾î ÀÖÀ» °ÍÀÌ´Ù.

public class Hello {
   // main ÇÔ¼ö
   public static void main(String args[]) {
      System.out.println("¾È³çÇϼ¼¿ä?");
      System.out.println("ȯ¿µÇÕ´Ï´Ù.");
   }
}
ÀÌ ¶§ ³»°¡ update¸¦ Çϸé Ãæµ¹ÀÌ ¹ß»ýÇÑ´Ù.
$ cvs update
cvs update: Updating .
RCS file: /home/cvs/myprj/Hello.java,v
retrieving revision 1.3
retrieving revision 1.4
Merging differences between 1.3 and 1.4 into Hello.java
rcsmerge: warning: conflicts during merge
cvs update: conflicts found in Hello.java
C Hello.java
ÇöÀç µð·ºÅ丮ÀÇ Hello.java´Â 1.3¿¡¼­ º¯°æµÈ »óÅÂ("¹Ý°©½À´Ï´Ù." Ãâ·Â Ãß°¡)ÀÌ´Ù. ÀúÀå¼Ò¿¡ ÀúÀåµÇ¾î ÀÖ´Â °ÍÀº 1.4À̹ǷΠCVS´Â ÀúÀå¼Ò¿¡ ÀÖ´Â 1.3°ú 1.4ÀÇ Â÷À̸¦ »ìÇÉ´Ù. µÑÀÇ Â÷ÀÌ´Â ´Ù¸¥ °³¹ßÀÚ¿¡ ÀÇÇØ "ȯ¿µÇÕ´Ï´Ù."¸¦ Ãâ·ÂÇÏ´Â ÁÙÀÌ Ãß°¡µÈ °ÍÀÌ´Ù. À̸¦ ÇöÀçµð·ºÅ丮ÀÇ Hello.java¿¡ Ãß°¡ÇÏ·Á°í ½ÃµµÇÏÁö¸¸, ±× À§Ä¡¿¡ ÀÌ¹Ì ´Ù¸¥ ³»¿ë("¹Ý°©½À´Ï´Ù." Ãâ·Â)ÀÌ µé¾î°¡ ÀÖÀ½À» ¾Ë°Ô µÈ´Ù. °á±¹ CVS´Â Ãæµ¹(C·Î Ç¥½Ã)ÀÌ »ý°åÀ½À» ¾Ë¸®°í ¼öÇàÀ» ¸¶Ä£´Ù. Hello.javaÀÇ ³»¿ëÀ» º¸¸é ¾îµð¿¡¼­ ¾î¶² Ãæµ¹ÀÌ ¹ß»ýÇß´ÂÁö CVS°¡ Ç¥½ÃÇØ ³õÀº °ÍÀ» ¹ß°ßÇÒ ¼ö ÀÖ´Ù.
$ cat Hello.java
public class Hello {
   // main ÇÔ¼ö
   public static void main(String args[]) {
      System.out.println("¾È³çÇϼ¼¿ä?");
<<<<<<< Hello.java
      System.out.println("¹Ý°©½À´Ï´Ù.");
=======
      System.out.println("ȯ¿µÇÕ´Ï´Ù.");
>>>>>>> 1.4
   }
}
<<<<<<<¿Í >>>>>>> »çÀÌ°¡ Ãæµ¹ÀÌ ÀϾ ºÎºÐÀÌ´Ù. ±× ºÎºÐÀº ´Ù½Ã µÎ ºÎºÐÀ¸·Î ³ª´µ´Âµ¥, ======= ÀÌÀü±îÁö°¡ ÇöÀç µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀÏÀÇ ³»¿ëÀÌ°í, ±× ÀÌÈÄ°¡ ÀúÀå¼Ò¿¡ ÀÖ´Â ÆÄÀÏÀÇ ³»¿ëÀÌ´Ù. °³¹ßÀÚ´Â ÀÌ°É º¸°í ¾î´À ÇÑ ÂÊÀ» ¾ø¾Ö°Å³ª µÎ ³»¿ëÀ» ÀûÀýÈ÷ ÇÕÄ£ ÈÄ ´Ù½Ã commitÀ» ÇØ ÁÖ¸é µÈ´Ù. ÀÌ °æ¿ì "¹Ý°©½À´Ï´Ù."°¡ ´õ ¸¶À½¿¡ µé¾î "ȯ¿µÇÕ´Ï´Ù."¸¦ »èÁ¦Çϱâ·Î Çß´Ù¸é ´ÙÀ½°ú °°ÀÌ °íÄ¡°í commitÀ» ÇÑ´Ù.
$ cat Hello.java
public class Hello {
   // main ÇÔ¼ö
   public static void main(String args[]) {
      System.out.println("¾È³çÇϼ¼¿ä?");
      System.out.println("¹Ý°©½À´Ï´Ù.");
   }
}
$ cvs commit -m "Àλ縻 º¯°æ" Hello.java
Checking in Hello.java;
/home/cvs/myprj/Hello.java,v  <--  Hello.java
new revision: 1.5; previous revision: 1.4
done
ÇÏÁö¸¸ ´Ù¸¥ °³¹ßÀÚ°¡ ¼öÁ¤ÇÑ ³»¿ëÀ» ±×´ë·Î ³ö µÎ°í ³»°¡ °íÄ£ ºÎºÐÀ» ¾ø¾Ö±â·Î Çß´Ù¸é µû·Î commitÀ» ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ÀÌ¹Ì ÀúÀå¼Ò¿¡ ±× ³»¿ëÀÌ µé¾î Àֱ⠶§¹®ÀÌ´Ù.

Ãæµ¹Àº commit ½Ã¿¡µµ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. ¾ÕÀÇ ¿¹¿¡¼­ ´Ù¸¥ °³¹ßÀÚ°¡ "ȯ¿µÇÕ´Ï´Ù." Ãâ·Â ¹®ÀåÀ» Ãß°¡ÇÏ¿© commitÀ» ÇÑ ÈÄ, ³»°¡ update ´ë½Å commitÀ» ÇÏ·Á Çß´Ù¸é, CVS´Â ´ÙÀ½°ú °°ÀÌ Ãæµ¹ÀÌ ¹ß»ýÇßÀ½À» ¾Ë·Á ÁÙ °ÍÀÌ´Ù.

$ cvs commit -m "¹Ý°©½À´Ï´Ù Ãß°¡" Hello.java
cvs commit: Up-to-date check failed for `Hello.java'
cvs [commit aborted]: correct above errors first!
ÀÌ·± ¸Þ½ÃÁö¸¦ º¸°Ô µÇ¸é update ¸í·ÉÀ¸·Î ¾îµð¿¡¼­ Ãæµ¹ÀÌ ¹ß»ýÇß´ÂÁö¸¦ È®ÀÎÇÏ¸é µÈ´Ù. ±× °á°ú¿Í ¼öÁ¤ ¹æ¹ýÀº ¾Õ¿¡¼­ ³ª¿Â °Í°ú µ¿ÀÏÇÏ´Ù.


4.3.5. ÆÄÀÏÀÇ Ãß°¡/»èÁ¦ (add/delete)

Áö±Ý±îÁö´Â ÀúÀå¼Ò¿¡ ÀÖ´Â ÆÄÀÏÀ» ¼öÁ¤ÇÏ°í, ±× °á°ú¸¦ ´Ù½Ã ÀúÀåÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æº¸¾Ò´Ù. ÇÏÁö¸¸ ÀÛ¾÷À» ÇÏ´Ù º¸¸é »õ·Î¿î ÆÄÀÏÀ» ¸¸µé°Å³ª ±âÁ¸ÀÇ ÆÄÀÏÀ» Áö¿ö¾ß ÇÒ °æ¿ì°¡ »ý±ä´Ù. ÀÌ·± °æ¿ì¿¡ »ç¿ëÇÏ´Â ¸í·ÉÀÌ add¿Í deleteÀÌ´Ù. »ç¿ë ¹æ¹ýÀº ¸Å¿ì °£´ÜÇÏ´Ù. Test.java¶õ ÆÄÀÏÀ» »õ·Î ¸¸µé·Á¸é ¸ÕÀú ÇöÀç µð·ºÅ丮¿¡ Test.java¸¦ »ý¼ºÇÑ ÈÄ ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù.

$ cvs add Test.java
cvs add: scheduling file `Test.java' for addition
cvs add: use 'cvs commit' to add this file permanently
¸Þ½ÃÁö¿¡¼­ ¾Ë ¼ö ÀÖµíÀÌ add ¸í·É¸¸À¸·Î´Â ÀúÀå¼Ò¿¡ Test.java°¡ »ý±âÁö ¾Ê´Â´Ù. ÀúÀå¼Ò¸¦ º¯°æÇÏ´Â °ÍÀº commit ¸í·É»ÓÀÌ´Ù. add ¸í·ÉÀº ´ÜÁö commit ¸í·É½Ã¿¡ Test.java¸¦ Ãß°¡ÇØ¾ß ÇÑ´Ù´Â °ÍÀ» ±â·ÏÇØ ³õÀ» »ÓÀÌ´Ù. ÀÌ »ç½ÇÀº update·Î È®ÀÎÇØ º¼ ¼öµµ ÀÖ´Ù.
$ cvs update
cvs update: Updating .
A Test.java
¾ÕÀÇ A´Â Ãß°¡µÉ(added) ÆÄÀÏÀÓÀ» ÀǹÌÇÑ´Ù. ±×·¯¹Ç·Î Test.java´Â ³ªÁß¿¡ ÀÛ¾÷ ³»¿ë Àüü¸¦ commitÇÒ ¶§ ÀúÀå¼Ò¿¡ Ãß°¡µÉ °ÍÀÌ´Ù. ¾Æ´Ï¸é ¹Ì¸® Test.java¸¦ ÀÎÀÚ·Î commitÀ» ÇÏ¿© ¹Ù·Î Ãß°¡µÇµµ·Ï ÇÒ ¼öµµ ÀÖ´Ù.
$ cvs commit -m "»õ ÆÄÀÏ" Test.java
RCS file: /home/cvs/myprj/Test.java,v
done
Checking in Test.java;
/home/cvs/myprj/Test.java,v  <--  Test.java
initial revision: 1.1
done
Ãß°¡µÈ ÆÄÀÏÀº ´Ù¸¥ °³¹ßÀÚ°¡ update¸¦ ÇÒ ¶§ ±× °³¹ßÀÚÀÇ ÀÛ¾÷ °ø°£¿¡µµ »ý°Ü³ª¸ç, ÆÄÀÏ ³»¿ëÀÌ °»½ÅµÇ´Â °Í°ú ¸¶Âù°¡Áö·Î U¸¦ ½á¼­ Ç¥½ÃÇÑ´Ù.

$ cvs update
cvs update: Updating .
U Test.java

ÆÄÀÏÀ» Áö¿ì´Â °Íµµ ¸¶Âù°¡ÁöÀÌ´Ù. Test.java¸¦ Áö¿ì·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù.

$ rm Test.java
$ cvs delete Test.java
cvs remove: scheduling `Test.java' for removal
cvs remove: use 'cvs commit' to remove this file permanently
delete ¸í·ÉÀ» »ç¿ëÇϱâ Àü¿¡ ¹Ýµå½Ã ¸ÕÀú ÆÄÀÏÀ» ÀÛ¾÷ °ø°£¿¡¼­ »èÁ¦ÇÏ¿©¾ß ÇÑ´Ù. ÀÌÁ¦ commit ¸í·ÉÀ» »ç¿ëÇϸé Test.java´Â ÀúÀå¼Ò¿¡¼­ »èÁ¦µÉ °ÍÀÌ´Ù. À̰͵µ update·Î È®ÀÎÇØ º»´Ù¸é ´ÙÀ½°ú °°ÀÌ ³ª¿Ã °ÍÀÌ´Ù.
$ cvs update
cvs update: Updating .
R Test.java
RÀº »èÁ¦µÉ(removed) ÆÄÀÏÀÓÀ» ³ªÅ¸³½´Ù. ÀÌÁ¦ commitÀ¸·Î ¿ÏÀüÈ÷ »èÁ¦ÇØ º¸ÀÚ.
$ cvs commmit -m "»èÁ¦" Test.java
Removing Test.java;
/home/cvs/myprj/Test.java,v  <--  Test.java
new revision: delete; previous revision: 1.1
done
ÀÌ·¸°Ô »èÁ¦µÈ ÆÄÀÏÀº ÀÌÈÄ·Î ´Ù¸¥ °³¹ßÀÚ°¡ update¸¦ ÇÏ°Ô µÇ¸é ´ÙÀ½°ú °°Àº ¸Þ½ÃÁö¸¦ Ãâ·ÂÇϸ鼭 ±× °³¹ßÀÚÀÇ ÀÛ¾÷ µð·ºÅ丮¿¡¼­µµ »èÁ¦µÈ´Ù.
$ cvs update
cvs update: Updating .
cvs update: warning: Test.java is not (any longer) pertinent


4.3.6. ÀÛ¾÷ ±â·Ï ¿­¶÷ (log)

±× µ¿¾ÈÀÇ ¿¹¿¡¼­ º» ¹Ù¿Í °°ÀÌ CVS´Â ÀÛ¾÷ ³»¿ëÀ» ÀúÀå¼Ò¿¡ ÀúÀåÇÒ ¶§¸¶´Ù ¸Þ½ÃÁö¸¦ Àûµµ·Ï ÇÏ°í ÀÖ´Ù. ÀÌ ³»¿ëÀº ÀúÀå¼Ò¿¡ ÇÔ²² ÀúÀåµÇ¾î log ¸í·ÉÀ» ÀÌ¿ëÇÏ¸é ¾ðÁ¦¶óµµ ²¨³» º¼ ¼ö ÀÖ´Ù. Hello.java¸¦ ¿¹·Î µé¾î º¸ÀÚ.

$ cvs log Hello.java

RCS file: /home/cvs/myprj/Hello.java,v
Working file: Hello.java
head: 1.5
branch:
locks: strict
access list:
symbolic names:
        start: 1.1.1.1
        webdox: 1.1.1
keyword substitution: kv
total revisions: 6;    selected revisions: 6
description:
----------------------------
revision 1.5
date: 1999/12/12 04:04:23;  author: minskim;  state: Exp;  lines: +1 -0
Àλ縻 º¯°æ
----------------------------
revision 1.4
date: 1999/12/12 04:03:50;  author: sehkone;  state: Exp;  lines: +0 -1
ȯ¿µÇÕ´Ï´Ù Ãß°¡
----------------------------
revision 1.3
date: 1999/12/12 04:01:40;  author: sehkone;  state: Exp;  lines: +2 -1
ÁÖ¼® Ãß°¡
----------------------------
revision 1.2
date: 1999/12/12 03:51:36;  author: minskim;  state: Exp;  lines: +1 -0
Àλ縻 Ãß°¡
----------------------------
revision 1.1
date: 1999/12/12 03:50:48;  author: minskim;  state: Exp;
branches:  1.1.1;
Initial revision
----------------------------
revision 1.1.1.1
date: 1999/12/12 03:50:48;  author: minskim;  state: Exp;  lines: +0 -0
ÇÁ·ÎÁ§Æ® ½ÃÀÛ
=============================================================================
¸Å¹ø commitÀ» ÇÒ ¶§¸¶´Ù ³¯Â¥¿Í ½Ã°¢, ÀúÀåÇÑ »ç¶÷, ¸Þ½ÃÁö µîÀÌ ±â·ÏµÇ´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ÀÌ·¸°Ô log ¸í·ÉÀ» ¾²¸é ¾ðÁ¦ ´©°¡ ¾î¶² ÀÛ¾÷À» Çß´ÂÁö¸¦ ÇÑ´«¿¡ ¾Ë ¼ö Àֱ⠶§¹®¿¡ ±×°£ÀÇ ÀÛ¾÷ ³»¿ëÀ» ½±°Ô ÆľÇÇÒ ¼ö ÀÖ´Ù. ÀÌ ±â´ÉÀ» Àß È°¿ëÇϱâ À§Çؼ­´Â ¹«¾ùº¸´Ùµµ ¸Å¹ø commitÀ» ÇÒ ¶§ ¾Ë±â ½±°í ÀÛ¾÷ ³»¿ëÀ» Àß ¹Ý¿µÇÒ ¼ö ÀÖ´Â ¸Þ½ÃÁö¸¦ Àû´Â °ÍÀÌ Áß¿äÇÏ´Ù.


5. ÀúÀå¼Ò °ü¸®

5.1. ¾ÏÈ£ ÀÎÁõ ¹æ½ÄÀÇ Á¢±Ù Á¦¾î

°¡Àå ³Î¸® ¾²ÀÌ´Â ¾ÏÈ£ ÀÎÁõ ¹æ½ÄÀÇ ¿¹´Â Àбâ Àü¿ë »ç¿ëÀÚ°¡ ÇÊ¿äÇÒ ¶§ÀÏ °ÍÀÌ´Ù. ¸¹Àº °ø°³ ÇÁ·ÎÁ§Æ®µéÀÌ ÀÌ·¯ÇÑ Àбâ Àü¿ë °èÁ¤À» Á¦°øÇÏ¿© ´©±¸³ª ÆÄÀϵéÀ» ¹Þ¾Æ°¥ ¼ö ÀÖµµ·Ï ÇÏ°í ÀÖ´Ù. ±×·¸´Ù¸é ÀúÀå¼Ò¿¡ ´ëÇÑ Á¢±Ù ±ÇÇÑÀ» Á¦¾îÇÒ ¼ö ÀÖ´Ù´Â ¹æ¹ýÀÌ ÀÖ´Ù´Â ¾ê±âÀε¥, ÀÌ·¯ÇÑ °ÍÀº ¾îµð¿¡¼­ ¼³Á¤ÇØ ÁÙ ¼ö ÀÖÀ»±î? CVS´Â Á¢±Ù Á¦¾î¸¦ À§ÇØ µÎ °¡Áö ¹æ¹ýÀ» Á¦°øÇÑ´Ù. CVSROOT µð·ºÅ丮¿¡ À§Ä¡ÇÑ readers¿Í writers¶õ ÆÄÀÏÀÌ ¹Ù·Î ±×°ÍÀÌ´Ù. ÀÌ ÆÄÀϵéÀº passwd¿Í ¸¶Âù°¡Áö·Î óÀ½¿¡´Â Á¸ÀçÇÏÁö ¾Ê´Â´Ù. ±â´ÉÀÌ ÇÊ¿äÇÏ´Ù¸é Á÷Á¢ ¸¸µé¾î ÁÖ¾î¾ß ÇÏ´Â ÆÄÀϵéÀÎ °ÍÀÌ´Ù. Çü½ÄÀº ¸Å¿ì °£´ÜÇؼ­, CVS °èÁ¤ À̸§À» ÇÑ ÁÙ¿¡ Çϳª¾¿ ³ª¿­Çϱ⸸ ÇÏ¸é µÈ´Ù.

Àбâ Àü¿ë °èÁ¤À» ¸¸µé°í ½Í´Ù¸é readers¸¦ ÀÌ¿ëÇÑ´Ù. sehkone°ú changÀ̶õ CVS °èÁ¤À» Àбâ Àü¿ëÀ¸·Î ÇÏ°í ½Í´Ù¸é CVSROOT µð·ºÅ丮¿¡ ´ÙÀ½°ú °°ÀÌ readers¸¦ ¸¸µç´Ù.

sehkone
chang
¸¶Áö¸· ÁÙ ³¡¿¡ °³Ç๮ÀÚ¸¦ ²À ³Ö¾î ÁÖ¾î¾ß ÇÔÀ» À¯³äÇϱ⠹ٶõ´Ù. ÀÌ·¸°Ô Çϸé sehkone°ú changÀ̶õ »ç¿ëÀÚ´Â Àб⸸ÀÌ Çã¿ëµÇ¸ç, ³ª¸ÓÁö ¸ðµç »ç¿ëÀÚ´Â Àбâ¿Í ¾²±â°¡ ¸ðµÎ °¡´ÉÇÏ´Ù.

ÇÏÁö¸¸ writers ÆÄÀÏÀÌ ÀÖ´Ù¸é »çÁ¤ÀÌ ÀüÇô ´Þ¶óÁø´Ù. writers¿¡ À̸§ÀÌ ¿Ã¶ó ÀÖ´Â °èÁ¤¿¡ ÇÑÇؼ­¸¸ Àбâ¿Í ¾²±â°¡ Çã¿ëµÇ¸ç, ³ª¸ÓÁö´Â ¸ðµÎ Àбâ Àü¿ë °èÁ¤ÀÌ µÈ´Ù. ±×·¸´Ù¸é readers¿Í writers°¡ ¸ðµÎ ÀÖ´Â °æ¿ì´Â ¾î¶»°Ô µÉ±î? ÀÌ °æ¿ì readers¿¡´Â À̸§ÀÌ ¾ø°í writers¿¡¸¸ À̸§ÀÌ ÀÖ´Â °èÁ¤Àº Àбâ¿Í ¾²±â ±ÇÇÑÀ», ³ª¸ÓÁö ¸ðµç °èÁ¤Àº Àбâ Àü¿ë ±ÇÇѸ¸À» ¾ò´Â´Ù.


ID
Password
Join
Like winter snow on summer lawn, time past is time gone.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2007-02-12 16:21:06
Processing time 0.0017 sec