1Chapter. ÀúÀå¼Ò °ü¸®
1.1.SubversionÀÇ ÀúÀå¼Ò´Â º¹¼öÀÇ ÇÁ·ÎÁ§Æ®¸¦ À§ÇÑ ¹öÀü °ü¸®µÈ µ¥ÀÌÅ͸¦ º¸°üÇÏ´Â Áß½ÉÀûÀÎ Àå¼ÒÀÔ´Ï´Ù. ÀÌ·± ÀÌÀ¯·Î ÀúÀå¼Ò´Â °ü¸®ÀÚ¿¡°Ô À־ ¸ðµç ¾ÖÁ¤°ú °ü½ÉÀ» ½ñÀ» ´ë»óÀÌ µÉÁöµµ ¸ð¸¨´Ï´Ù. ÇÏÁö¸¸ ÀúÀå¼Ò´Â ÀϹÝÀûÀ¸·Î´Â ±×¸¸Å º¹ÀâÇÑ °ü¸®°¡ ÇÊ¿äÇÏÁö ¾Ê½À´Ï´Ù. ÀáÀçÀûÀÎ ¹®Á¦¸¦ ÇÇÇϰųª ½ÇÁ¦·Î ÀϾ´Â ¹®Á¦¸¦ ¾ÈÀüÇÏ°Ô ÇØ°áÇϱâ À§Çؼ´Â ¾î¶»°Ô ÇÏ¸é ¿Ã¹Ù¸£°Ô ¼³Á¤ÇÏ°í °ü¸®ÇÒ ¼ö ÀÖ´ÂÁö ÀÌÇØÇÏ´Â °ÍÀÌ Áß¿äÇÕ´Ï´Ù. ÀÌ Àå¿¡¼´Â SubversionÀÇ ÀúÀå¼Ò¸¦ ¾î¶»°Ô ¸¸µé°í ¼³Á¤ÇÏ´ÂÁö ±×¸®°í ÀúÀå¼Ò¸¦ ³×Æ®¿öÅ©·Î Á¢±ÙÇϱâ À§Çؼ´Â ¾î¶»°Ô Çϸé ÁÁÀºÁö¿¡ ´ëÇØ ³íÀÇÇÕ´Ï´Ù. svnlook°ú svnadmin µµ±¸(ÀÌ µÑÀº SubversionÀÌ Á¦°øÇÏ´Â ÅøÀÔ´Ï´Ù)ÀÇ ÀÌ¿ë ¹æ¹ýÀ» Æ÷ÇÔÇؼ ÀúÀå¼Ò °ü¸®¿¡ ´ëÇؼµµ À̾߱âÇÒ °ÍÀÔ´Ï´Ù. ÀÚÁÖ ÀÖ´Â Áú¹®°ú ½Ç¼ö¸¦ ¾ð±ÞÇÏ°í ÀúÀå¼Ò¿¡¼ ¾î¶»°Ô µ¥ÀÌÅ͸¦ ¹èÄ¡ÇÏ´Â°Ô ÁÁÀºÁö µµ¿ÍÁÙ °ÍÀÔ´Ï´Ù. ¸¸¾à Subversion ÀúÀå¼ÒÀÇ ¹öÀü °ü¸®ÇÏ¿¡ ÀÖ´Â µ¥ÀÌÅÍ¿¡ »ç¿ëÀڷμ Á¢±ÙÇÒ »ÓÀ̶ó¸é (Áï Subversion Ŭ¶óÀ̾ðÆ®¸¸ »ç¿ëÇÑ´Ù¸é) ÀÌ ÀåÀº ±×³É Áö³ªÃĵµ µË´Ï´Ù. ±×·¯³ª Subversion ÀúÀå¼Ò¸¦ °ü¸®ÇÏ°í ½Í´Ù¸é [1] ÀÌ ÀåÀ» Ưº°È÷ ÁÖÀÇÇؼ º¸¼¼¿ä. ¹°·Ð °ü¸®ÇÒ ÀúÀå¼Ò°¡ Çϳªµµ ¾øÀ¸¸é ÀúÀå¼Ò °ü¸®ÀÚ°¡ µÉ ¼ö ¾ø½À´Ï´Ù. 1.1. ÀúÀå¼ÒÀÇ ±âÃÊ1.1.1. Æ®·£Àè¼Ç(transaction)°ú ¸®ºñÀüÀÇ ÀÌÇØ°³³äÀûÀ¸·Î ¸»Çϸé Subversion ÀúÀå¼Ò´Â µð·ºÅ丮 Æ®¸®ÀÇ ¿¬¼ÓÀÔ´Ï´Ù. °¢°¢ÀÇ Æ®¸®´Â ÀúÀå¼Ò¿¡ ÀÖ´Â ÆÄÀÏÀ̳ª µð·ºÅ丮°¡ ƯÁ¤ ¼ø°£¿¡ ¾î¶»°Ô º¸ÀÌ´ÂÁö¿¡ ´ëÇÑ ¼ø°£Æ÷Âø »çÁø(snapshot)ÀÔ´Ï´Ù. Ŭ¶óÀ̾ðÆ®ÀÇ Á¶ÀÛ¿¡ ÀÇÇØ ¸¸µé¾îÁö´Â ¼ø°£Æ÷Âø »çÁøÀ» ¸®ºñÀü(revision)À̶ó°í ÇÕ´Ï´Ù. °¢°¢ÀÇ ¸®ºñÀüÀº Æ®·£Àè¼Ç(transaction) Æ®¸®·Î¼ ž´Ï´Ù. Ä¿¹ÔÇϸé Ŭ¶óÀ̾ðÆ®´Â ·ÎÄÿ¡¼ÀÇ º¯°æ »çÇ×(°ú Ŭ¶óÀ̾ðÆ®ÀÇ Ä¿¹Ô 󸮸¦ ½ÃÀÛÇÒ ¶§ ÀúÀå¼Ò¿¡ ÀϾ´Â ºÎ°¡ÀûÀÎ º¯°æ »çÇ×)À» ¹Ý¿µÇÑ Subversion Æ®·£Àè¼ÇÀ» ¸¸µé¾î ±× Æ®¸®°¡ ÀÏ·ÃÀÇ ¿¬¼ÓÆ÷Âø »çÁø Áß ¸¶Áö¸·ÀÌ µÇµµ·Ï ÀúÀå¼Ò¿¡ ÀúÀåÇ϶ó°í ¸í·ÉÇÕ´Ï´Ù. Ä¿¹ÔÀÌ ¼º°øÇϸé Æ®·£Àè¼ÇÀº »õ·Î¿î ¸®ºñÀü Æ®¸®·Î ½Â°ÝµÇ°í »õ·Î¿î ¸®ºñÀü ¹øÈ£¸¦ ¹Þ½À´Ï´Ù. Ä¿¹ÔÀÌ ¾î¶² ÀÌÀ¯·Î ½ÇÆÐÇϸé Æ®·£Àè¼ÇÀº Æı«µÇ°í Ŭ¶óÀ̾ðÆ®´Â ½ÇÆÐÇß´Ù´Â ÅëÁö¸¦ ¹Þ½À´Ï´Ù. °»½Å 󸮵µ ÀÌ¿Í °°ÀÌ µ¿ÀÛÇÕ´Ï´Ù. Ŭ¶óÀ̾ðÆ®´Â ÀÛ¾÷ Ä«ÇÇ »óŸ¦ ¹Ý¿µÇÑ Àӽà Ʈ·£Àè¼Ç Æ®¸®¸¦ ¸¸µì´Ï´Ù. ÀúÀå¼Ò´Â ±× Æ®·£Àè¼Ç Æ®¸®¿Í ¿äûµÈ ¹öÀüÀÇ ¸®ºñÀü Æ®¸®(º¸ÅëÀº ÃÖ½ÅÀÇ È¤Àº "°¡Àå »õ·Î¿î" Æ®¸®)¿Í ºñ±³Çؼ ÀÛ¾÷ Ä«ÇǸ¦ ±× ¸®ºñÀüÀÇ Æ®¸®·Î º¯ÇüÇÏ·Á¸é ¾î¶°ÇÑ º¯°æÀÌ ÇÊ¿äÇÑÁö Á¤º¸¸¦ µÇµ¹·ÁÁÝ´Ï´Ù. °»½ÅÀÌ ¿Ï·áµÈ ÈÄ Àӽà Ʈ·£Àè¼ÇÀº »èÁ¦µË´Ï´Ù. Æ®·£Àè¼Ç Æ®¸®¸¦ ÀÌ¿ëÇÏ´Â °ÍÀÌ ÀúÀå¼Ò¿¡¼ °ü¸®µÇ´Â ÆÄÀÏ ½Ã½ºÅÛÀ» º¯°æÇÏ´Â À¯ÀÏÇÑ ¹æ¹ýÀÔ´Ï´Ù. ±×·¯³ª Æ®·£Àè¼ÇÀÇ »ýÁ¸ ½Ã°£ÀÌ ¿ÏÀüÈ÷ ÀÓÀÇÀÎ °ÍÀ» ÀÌÇØÇÏ´Â °ÍÀÌ Áß¿äÇÕ´Ï´Ù. °»½ÅÀÇ °æ¿ì Æ®·£Àè¼ÇÀº °ð¹Ù·Î ¼Ò¸êÇÏ´Â ÀϽÃÀûÀÎ Æ®¸® ÀÔ´Ï´Ù. Ä¿¹ÔÀÇ °æ¿ì´Â Æ®·£Àè¼ÇÀº ¿µ±¸ÀûÀÎ ¸®ºñÀüÀ¸·Î ¹Ù²ò´Ï´Ù(Ä¿¹ÔÀÌ ½ÇÆÐÇßÀ» ¶§´Â »èÁ¦µËÁö¸¸). ¿¡·¯³ª ¹ö±×°¡ ÀÖÀ¸¸é Æ®·£Àè¼ÇÀº ÀúÀå¼Ò¿¡ ³²°ÜÁ® ¹ö¸±Áöµµ ¸ð¸¨´Ï´Ù(±×·¯³ª ÀÌ°ÍÀº µð½ºÅ© ¿ë·®À» Â÷ÁöÇÒ »Ó ³ª»Û ¿µÇâÀ» ÁÖÁö´Â ¾Ê½À´Ï´Ù). ÀÌ·ÐÀûÀ¸·Î ¾ðÁ¨°¡´Â ÅëÇÕµÈ ÀÛ¾÷ ȯ°æÀ» Áö¿øÇÏ´Â ¾îÇø®ÄÉÀ̼ÇÀº Æ®·£Àè¼ÇÀÇ »ýÁ¸ ±â°£À» Á» ´õ À¯¿¬ÇÏ°Ô °ü¸®ÇÒ ¼ö ÀÖ°Ô µÉÁöµµ ¸ð¸¨´Ï´Ù. Ŭ¶óÀ̾ðÆ®°¡ ÀúÀå¼Ò¿¡ ´ëÇÑ ¼öÁ¤ ³»¿ëÀÇ ±â¼úÀ» ³¡³½ ÈÄ¿¡µµ ¸®ºñÀüÀÌ µÉ Èĺ¸ Æ®·£Àè¼ÇÀÌ Á¤ÁöÇÑ »óÅ¿¡ ¸Ó¹«¸£´Â ½Ã½ºÅÛÀ» »ý°¢ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ°ÍÀº »õ·Î¿î Ä¿¹ÔÀ» ´Ù¸¥ »ç¶÷ ¿¹¸¦ µé¾î °ü¸®ÀÚ³ª ¿£Áö´Ï¾î¸µ QAÆÀÀÌ Àç°ËÅäÇÏ´Â °ÍÀ» °¡´ÉÇÏ°Ô Çؼ ±× Æ®·£Àè¼ÇÀ» ¸®ºñÀüÀ¸·Î ½Â°Ý½ÃÅ°°Å³ª öȸÇϰųª ÇÒ ¼ö°¡ ÀÖ°Ô µÇ°ÚÁö¿ä. ÀúÀå¼Ò¸¦ °ü¸®ÇÒ ¶§ ¹Ýµå½Ã ÇÏÁö ¾ÊÀ¸¸é ¾È µÇ´Â °ÍÀº ¹«¾ùÀϱî¿ä? ´ë´äÀº °£´ÜÇÕ´Ï´Ù. Subversion ÀúÀå¼Ò¸¦ °ü¸®ÇÑ´Ù¸é ÀúÀå¼ÒÀÇ »óŸ¦ »ìÇÇ´Â ÀÏÀÇ ÀϺημ ¸®ºñÀü°ú Æ®·£Àè¼ÇÀ» Á¶»çÇØ¾ß ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. 1.1.2. ¹öÀüÈ µÇÁö ¾Ê´Â ¼Ó¼ºSubversion ÀúÀå¼Ò¿¡¼ Æ®·£Àè¼Ç°ú ¸®ºñÀüÀº ±×°Í¿¡ µþ¸° ¼Ó¼ºÀ» °¡Áú ¼ö°¡ ÀÖ½À´Ï´Ù. ±×·¯ÇÑ ¼Ó¼ºÀº ÀϹÝÀûÀÎ Å°¡¤°ªÀÇ ´ëÀÀÀ¸·Î °ü·ÃÇÑ Æ®¸®¿¡ ´ëÇÑ Á¤º¸¸¦ º¸°üÇϴµ¥ ÀÌ¿ëµË´Ï´Ù. ¼Ó¼ºÀÇ À̸§°ú °ªÀº ³ª¸ÓÁö Æ®¸® µ¥ÀÌÅÍ¿Í ÇÔ²² ÀúÀå¼ÒÀÇ ÆÄÀÏ ½Ã½ºÅÛ¿¡ º¸°üµË´Ï´Ù. ¸®ºñÀü°ú Æ®·£Àè¼ÇÀÇ ¼Ó¼ºÀº ÀÛ¾÷ Ä«ÇÇ¿¡ ÀÇÇØ °ü¸®µÉ ¼ö ¾ø´Â Á¤º¸µé °°ÀÌ ÆÄÀÏÀ̳ª µð·ºÅ丮¿¡ °ÇÏ°Ô °ü·ÃµÇÁö ¾ÊÀº Æ®¸®ÀÇ Á¤º¸¸¦ ±â¾ïÇØ µÎ´Âµ¥ Æí¸®ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î »õ·Î¿î Ä¿¹Ô Æ®·£Àè¼ÇÀÌ ÀúÀå¼Ò¿¡ ¸¸µé¾îÁö¸é SubversionÀº ±× Æ®·£Àè¼Ç¿¡ svn:date¶ó´Â ¼Ó¼ºÀ» Ãß°¡ÇÕ´Ï´Ù. Æ®·£Àè¼ÇÀÌ ¸¸µé¾îÁø ½Ã°¢À» ³ªÅ¸³»´Â Ç¥½ÃÀÔ´Ï´Ù. Ä¿¹ÔÀÌ ¿Ï·áµÇ¾î Æ®·£Àè¼ÇÀÌ ¿µ±¸ÀûÀÎ ¸®ºñÀüÀÌ µÉ ¶§ Æ®¸®¿¡´Â ¸®ºñÀü ÀÛ¼ºÀÚÀÇ À̸§(svn:author)°ú ¸®ºñÀü¿¡ ºÙ¿©Áø ·Î±× ¸Þ¼¼Áö(svn:log)¶ó´Â ¼Ó¼ºÀÌ Ãß°¡µË´Ï´Ù. ¸®ºñÀü°ú Æ®·£Àè¼ÇÀÇ ¼Ó¼ºÀº ¹öÀüÈ µÇÁö ¾Ê´Â ¼Ó¼ºÀÔ´Ï´Ù. ¼Ó¼ºÀº ¼öÁ¤µÇ¸é ±× ÀÌÀüÀÇ °ªÀ» ¿µ±¸È÷ ÀÒ°Ô µË´Ï´Ù. ¸¶Âù°¡Áö·Î ¸®ºñÀü Æ®¸® ÀÚ½ÅÀº ºÒº¯ÀÔ´Ï´Ù¸¸ Æ®¸®ÀÇ ¼Ó¼ºÀº ±×·¸Áö ¾Ê½À´Ï´Ù. ¾ðÁ¦¶óµµ ¸®ºñÀü ¼Ó¼ºÀ» Ãß°¡, »èÁ¦, ¼öÁ¤ ÇÒ ¼ö ÀÖ½À´Ï´Ù. »õ·Î¿î ¸®ºñÀüÀ» Ä¿¹ÔÇÑ ÈÄ¿¡ À߸øÇÑ Á¤º¸°¡ Àְųª ·Î±× ¸Þ¼¼Áö¿¡ ¿ÀŸ°¡ ÀÖ´Â °ÍÀ» ¾Ë¾ÒÀ» ¶§¿¡´Â ´ÜÁö svn:log ¼Ó¼ºÀÇ °ªÀ» ¿Ã¹Ù¸¥ ·Î±× ¸Þ¼¼Áö·Î ¹Ù²Ù±â¸¸ ÇÏ¸é µË´Ï´Ù. 1.2. ÀúÀå¼Ò ÀÛ¼º°ú ¼³Á¤Subversion ÀúÀå¼Ò¸¦ ÀÛ¼ºÇÏ´Â ÀÏÀº ¸Å¿ì °£´ÜÇÑ ÀÛ¾÷ÀÔ´Ï´Ù. svnadmin À¯Æ¿¸®Æ¼¿¡ ÀúÀå¼Ò¸¦ ¸¸µå´Â ¼ºê Ä¿¸Çµå°¡ ÀÖ½À´Ï´Ù. »õ ÀúÀå¼Ò¸¦ ¸¸µå·Á¸é ´ÜÁö ´ÙÀ½°ú °°Àº ¸í·É¸¸ ¾²¸é µË´Ï´Ù.
ÀÌ°ÍÀ¸·Î path/to/repos µð·ºÅ丮¿¡ »õ ÀúÀå¼Ò°¡ ¸¸µé¾îÁý´Ï´Ù. »õ ÀúÀå¼Ò´Â ¸®ºñÀü 0À¸·Î ž´Ï´Ù. ¸®ºñÀü ¹øÈ£ 0¹ø¿¡´Â ÃÖ»óÀ§ ·çÆ®(/) ÆÄÀÏ ½Ã½ºÅÛ µð·ºÅ丮¸¸ ÀÖ½À´Ï´Ù. Ãʱ⠻óÅ¿¡¼ ¸®ºñÀü 0Àº ¸®ºñÀü ¼Ó¼ºÀ» Çϳª¸¸ °¡Áö°í ÀÖÀ¸¸ç, ±×°ÍÀº svn:date ÀÔ´Ï´Ù. ÀÌ ¼Ó¼ºÀº ÀúÀå¼Ò°¡ ¸¸µé¾îÁø ½Ã°£À» ³ªÅ¸³À´Ï´Ù. svnadminÀÇ Àμö·Î Àü´ÞµÇ´Â °æ·Î´Â ÀϹÝÀûÀÎ ÆÄÀϽýºÅÛ °æ·ÎÀÌÁö svn Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥ÀÌ ÀúÀå¼Ò¸¦ ÂüÁ¶ÇÒ ¶§ »ç¿ëÇÏ´Â URLÀÌ ¾Æ´ÔÀ» ÁÖÀÇÇϼ¼¿ä. svnadmin°ú svnlookµµ ¼¹öÃøÀÇ À¯Æ¿¸®Æ¼¶ó°í »ý°¢Çϼ¼¿ä. ÀÌ µÑÀº ÀúÀå¼Ò°¡ ¼³Ä¡µÈ ÄÄÇ»ÅÍ¿¡¼ ÀúÀå¼Ò¸¦ Á¶»çÇϰųª »óŸ¦ º¯°æÇϴµ¥ »ç¿ëµÇ°í, ³×Æ®¿öÅ©¸¦ ÅëÇؼ ÀÛ¾÷À» ¼öÇàÇÒ ¼ö´Â ¾ø½À´Ï´Ù. Subversion ÃʽÉÀÚ°¡ ÀÚÁÖ ÇÏ´Â ½Ç¼ö´Â ÀÌ ÇÁ·Î±×·¥µé¿¡ URLÀ» »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù. (ȤÀº "·ÎÄÃ" URLÀ̶ó´Â Àǹ̷Πfile:À̶ó°í ÁöÁ¤ÇØ ¹ö¸®´Â °ÍÀÔ´Ï´Ù. ) svnadmin create ¸í·ÉÀ» ½ÇÇàÇϸé ÁöÁ¤µÈ µð·ºÅ丮¿¡´Â ¹Ý¦¹Ý¦ ºû³ª´Â »õ Subversion ÀúÀå¼Ò°¡ »ý±é´Ï´Ù. ±× µð·ºÅ丮¿¡ ½ÇÁ¦·Î ¹«¾ùÀÌ »ý°å´ÂÁö µé¿©´Ù º¾½Ã´Ù.
README.txt ÆÄÀÏÀ» Á¦¿ÜÇϸé ÀúÀå¼Ò µð·ºÅ丮´Â ÇÏÀ§ µð·ºÅ丮ÀÇ ¸ðÀÓÀÔ´Ï´Ù. SubversionÀÇ ÀϹÝÀûÀÎ ¼³°è »ç»ó°ú °°ÀÌ ¸ðµâÈ¿¡ ¸¹ÀÌ ½Å°æÀ» ¾´ °ÍÀÔ´Ï´Ù. °èÃþÀûÀ¸·Î ±¸Á¶È µÈ °ÍÀÌ ¾îÁö·´°Ô Èð¾îÁ® ÀÖ´Â »óź¸´Ù ¹Ù¶÷Á÷ÇÕ´Ï´Ù. »õ ÀúÀå¼Ò µð·ºÅ丮¿¡ ÀÖ´Â Ç׸ñµé¿¡ ´ëÇؼ °£´ÜÈ÷ ¼³¸íÇÏ°Ú½À´Ï´Ù.
ÀϹÝÀûÀ¸·Î "Á÷Á¢" ÀúÀå¼Ò¸¦ °Çµå·Á¼´Â ¾ÈµË´Ï´Ù. svnadmin µµ±¸´Â ÀúÀå¼Ò¸¦ º¯°æÇϴµ¥ ÃæºÐÇÑ ±â´ÉÀ» Á¦°øÇϸç, ÀúÀå¼Ò¸¦ ±¸¼ºÇÏ´Â ÀϺκÐÀ» Á¶Á¤ÇÏ´Â µ¥¿¡´Â (Berkeley DBÀÇ µµ±¸ ÇÑ ¹ú µûÀ§ÀÇ) ¼µåÆÄƼ µµ±¸¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¡µµ ¸î¸î ¿¹¿Ü°¡ ÀÖÀ¸¸ç Â÷Â÷ ¼³¸íÇÏ°Ú½À´Ï´Ù. 1.2.1. ÈÅ ½ºÅ©¸³Æ®(Hook Scripts)ÈÅ(hook)Àº »õ ¸®ºñÀüÀÌ »ý¼ºµÇ°Å³ª ¹öÀüȵÇÁö ¾ÊÀº ¼Ó¼ºÀÌ ¼öÁ¤µÇ´Â ÀÏ(event)ÀÌ ÀϾÀ» ¶§ ½ÇÇàµÇ´Â ÇÁ·Î±×·¥ÀÔ´Ï´Ù. °¢°¢ÀÇ ÈÅÀº ¾î¶² ÀÏÀÌ ÀϾ´ÂÁö, ÀÛ¾÷ ´ë»óÀº ¹«¾ùÀÎÁö, ±× ÀÏÀ» ÇÑ »ç¶÷Àº ´©±¸ÀÎÁö ¾Ë ¼ö ÀÖ´Â ÃæºÐÇÑ Á¤º¸¸¦ Àü´Þ ¹Þ½À´Ï´Ù. ÈÅÀÇ Ãâ·ÂÀ̳ª ¹Ýȯ°ª¿¡ µû¶ó ÈÅ ÇÁ·Î±×·¥Àº 󸮸¦ °è¼ÓÇϰųª Á¾·áÇϰųª ¸î °¡Áö ¹æ¹ýÀ¸·Î ÀϽà Áß´ÜÇϰųª ÇÕ´Ï´Ù. ±âº»°ª¿¡ µû¸£¸é hooks µð·ºÅ丮¿¡´Â ´Ù¾çÇÑ ÀúÀå¼Ò ÈÅÀÇ ÅÛÇø´ÀÌ ÀÖ½À´Ï´Ù.
SubversionÀÌ °¡Áö°í ÀÖ´Â ÈÅ¿¡´Â °¢°¢ ÇϳªÀÇ ÅÛÇø´ÀÌ ÀÖ°í, ÅÛÇø´ ½ºÅ©¸³Æ®ÀÇ ³»¿ëÀ» º¸¸é ±× ½ºÅ©¸³Æ®°¡ ¾î¶² Æ®¸®°Å(trigger)¸¦ ½ÇÇàÇÏ´ÂÁö, ¾î¶² µ¥ÀÌÅÍ°¡ ±× ½ºÅ©¸³Æ®¿¡ Àü´ÞµÇ´ÂÁö ¾Ë ¼ö ÀÖ½À´Ï´Ù. ¶Ç ¸¹Àº ÅÛÇø´µé¿¡´Â À¯¿ëÇÑ ÀÛ¾÷À» ¼öÇàÇϱâ À§Çؼ SubversionÀÌ Á¦°øÇÏ´Â ´Ù¸¥ ÇÁ·Î±×·¥µé°ú ÈÅ ½ºÅ©¸³Æ®¸¦ ¾î¶»°Ô °áÇÕÇؼ ¾²´ÂÁö º¸¿©ÁÖ´Â ¿¹Á¦°¡ ÀÖ½À´Ï´Ù. ½ÇÁ¦·Î ÈÅÀ» ¼³Ä¡ÇÏ´Â °ÍÀº repos/hooks µð·ºÅ丮¿¡ ÈÅÀÇ À̸§À¸·Î (start-commitÀ̳ª post-commit °°ÀÌ) ½ÇÇà ÇÁ·Î±×·¥À̳ª ½ºÅ©¸³Æ®¸¦ µÎ±â¸¸ ÇÏ¸é µË´Ï´Ù. À¯´Ð½º(Unix)¿¡¼´Â ÀÌ ¸»ÀÇ Àǹ̴ ½ºÅ©¸³Æ®³ª ÇÁ·Î±×·¥(½© ½ºÅ©¸³Æ®, ÆÄÀ̽ã ÇÁ·Î±×·¥, ÄÄÆÄÀÏµÈ C ½ÇÇàÆÄÀÏ µî)À» Á¤È®ÇÏ°Ô ÈÅÀÇ À̸§°ú ¶È°°Àº À̸§À¸·Î °¡Á®´Ù ³õÀ¸¶ó´Â ¸»ÀÔ´Ï´Ù. ¹°·Ð ÅÛÇø´ ÆÄÀϵéÀÌ Á¤º¸¸¦ Á¦°øÇϱâ À§ÇÑ ¸ñÀû¸¸À¸·Î Á¦°øµÇ´Â °ÍÀº ¾Æ´Õ´Ï´Ù. À¯´Ð½º¿¡¼ ÈÅÀ» ¼³Ä¡ÇÏ´Â °¡Àå °£´ÜÇÑ ¹æ¹ýÀº ÅÛÇø´ ÆÄÀÏÀ» .tmpl È®ÀåÀÚ¸¦ ¶¾ »õ ÆÄÀÏ·Î º¹»çÇؼ ³»¿ëÀ» °íÄ¡°í ±× ÆÄÀÏ¿¡ ½ÇÇà±ÇÇÑÀ» ÁÖ´Â °ÍÀÔ´Ï´Ù. ±×·¯³ª À©µµ¿ìÁî(Windows)¿¡¼´Â ½ÇÇà°¡´ÉÇÑ ÆÄÀÏÀÓÀ» ³ªÅ¸³»±â À§Çؼ Ư¼öÇÑ È®ÀåÀÚ¸¦ »ç¿ëÇϱ⠶§¹®¿¡, ½ÇÇà ÇÁ·Î±×·¥¿¡´Â ÈÅÀÇ À̸§ µÚ¿¡ .exe³ª .com¸¦ ºÙÀÌ°í ÀÏ°ýÀÛ¾÷(batch) ÆÄÀÏ¿¡´Â .bat¸¦ ºÙ¿©¾ß ÇÕ´Ï´Ù. ÇöÀç Subversion ÀúÀå¼Ò¿¡´Â ´Ù¼¸ Á¾·ùÀÇ ÈÅÀÌ ±¸ÇöµÇ¾î ÀÖ½À´Ï´Ù.
SubversionÀº ÀúÀå¼Ò¿¡ Á¢±ÙÇÏ´Â ÇÁ·Î¼¼½ºÀÇ ¼ÒÀ¯Àڷμ ÈÅÀ» ½ÇÇàÇÏ·Á°í ÇÕ´Ï´Ù. ´ëºÎºÐÀÇ °æ¿ì »ç¿ëÀÚ´Â ¾ÆÆÄÄ¡(Apache) HTTP ¼¹ö¿Í mod_dav_svnÀ» ÅëÇؼ ÀúÀå¼Ò¿¡ Á¢±ÙÇϹǷÎ, ÈÅÀ» ½ÇÇàÇÏ´Â »ç¿ëÀÚ´Â ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÏ´Â »ç¿ëÀÚ¿Í °°½À´Ï´Ù. ÈÅÀ» ½ÇÇàÇÏ·Á´Â »ç¿ëÀÚ°¡ ½ÇÇàÇÒ ¼ö ÀÖµµ·Ï OS ¼öÁØ¿¡¼ ÈÅ¿¡ ½ÇÇà ±ÇÇÑÀ» ÁÖ¾î¾ßÇÕ´Ï´Ù. ¶Ç ±× ¸»Àº ÈÅÀÌ Á÷¡¤°£Á¢ÀûÀ¸·Î Á¢±ÙÇÏ´Â ¸ðµç ÆÄÀÏÀ̳ª ÇÁ·Î±×·¥(Subversion ÀúÀå¼Òµµ Æ÷ÇÔÇÏ¿©)¿¡ °°Àº »ç¿ëÀÚ·Î Á¢±ÙÇÑ´Ù´Â ¶æÀÔ´Ï´Ù. ÈÅÀÌ ÁöÁ¤µÈ ÀÛ¾÷À» ¼öÇàÇϴµ¥ ±ÇÇÑ ¼³Á¤¿¡ °ü·ÃµÈ ¹®Á¦°¡ ÀϾ °¡´É¼ºÀÌ ÀÖÀ¸¹Ç·Î ÁÖÀÇÇϽñ⠹ٶø´Ï´Ù. 1.2.2. ¹öŬ¸® DB ¼³Á¤¹öŬ¸®(Berkeley) DB ȯ°æ¿¡´Â ÇÑ ¹ø¿¡ ¸î °³ÀÇ Àá±Ý(lock)ÀÌ Çã¿ëµÇ´ÂÁö, Àú³Î¸µ ·Î±× ÆÄÀÏÀÇ Å©±â Á¦ÇÑÀº ¾ó¸¸ÅÀÎÁö µî¿¡ ´ëÇÑ ±âº» ¼³Á¤°ªÀÌ ÀÖ½À´Ï´Ù. °Å±â¿¡ ´õÇؼ SubversionÀÇ ÆÄÀÏ ½Ã½ºÅÛ Äڵ尡 ¼³Á¤ÇسõÀº Berkeley DB ¼³Á¤ÀÇ ±âº»°ªÀÌ ÀÖ½À´Ï´Ù. ±×·¯³ª Ư¡ÀûÀÎ µ¥ÀÌÅͳª Á¢±Ù ÆÐÅÏÀ» °¡Áö´Â ÀúÀå¼Ò°¡ ÀÖÀ» °ÍÀÌ°í, ±×·± ÀúÀå¼Ò´Â ´Ù¸¥ ¼³Á¤°ªÀ» °¡Áö´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÕ´Ï´Ù. SleepycatÀÇ »ç¶÷µé(¹öŬ¸® DBÀÇ Á¦ÀÛÀÚµé)Àº ´Ù¸¥ µ¥ÀÌÅͺ£À̽º´Â ´Ù¸¥ ¿ä±¸¸¦ ó¸®ÇØ¾ß ÇÑ´Ù´Â °ÍÀ» ¾Ë°íÀֱ⠶§¹®¿¡, ½ÇÇà½Ã¿¡ ¹öŬ¸® DBÀÇ ¼³Á¤°ªÀ» ¹Ù²Ü ¼ö ÀÖ´Â ¹æ¹ýÀ» Á¦°øÇØ¿Ô½À´Ï´Ù. ¹öŬ¸® DB´Â ȯ°æ µð·ºÅ丮¿¡ DB_CONFIG ÆÄÀÏÀÌ ÀÖ´ÂÁö È®ÀÎÇÏ°í, ±× ÆÄÀÏ¿¡ ÀÖ´Â ¿É¼ÇÀ» »ç¿ëÇÕ´Ï´Ù. ´ç½ÅÀÇ ÀúÀå¼ÒÀÇ ¹öŬ¸® DB ¼³Á¤ ÆÄÀÏÀº db ¶ó´Â ȯ°æ µð·ºÅ丮 ¾ÈÀÇ repos/db/DB_CONFIG ÆÄÀÏÀÔ´Ï´Ù. SubversionÀÌ ÀúÀå¼Ò¸¦ ¸¸µé ¶§ ÀÌ ÆÄÀϵµ ¸¸µé¾îÁý´Ï´Ù. ÀÌ ÆÄÀÏ¿¡´Â ±âº» ¼³Á¤°ú ÇÔ²² ¹öŬ¸® DBÀÇ ¿Â¶óÀÎ ¹®¼°¡ ¾îµðÀÖ´ÂÁö¿¡ ´ëÇÑ Á¤º¸µµ ÀÖÀ¸¹Ç·Î, ¾î´À ¿É¼ÇÀÌ ¾î¶² ±â´ÉÀ» ÇÏ´ÂÁö¿¡ ´ëÇØ Àо ¼ö ÀÖ½À´Ï´Ù. ¹°·Ð Áö¿øµÇ´Â ¾î¶² ¿É¼ÇÀÌ¶óµµ DB_CONFIG¿¡ Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù. SubversionÀº ±× ÆÄÀÏÀÇ ³»¿ëÀ» Àаųª Çؼ®ÇÏÁöµµ ¾Ê°í ±× ÆÄÀÏ¿¡ ¼³Á¤µÈ °ªÀ» ÀüÇô »ç¿ëÇÏÁöµµ ¾ÊÁö¸¸, SubversionÀÇ ³ª¸ÓÁö Äڵ尡 ¿¹ÃøÇÒ ¼ö ¾ø´Â ¹æ½ÄÀ¸·Î ¹öŬ¸® DB°¡ ÀÛµ¿ÇÒ ¼ö ÀÖ´Â ¼³Á¤Àº ÇÇÇØÁÖ¼¼¿ä. DB_CONFIG¿¡ ´ëÇÑ º¯°æÀº µ¥ÀÌÅͺ£À̽º ȯ°æÀ» º¹±¸ÇÒ ¶§±îÁö(svnadmin recover ¸¦ »ç¿ëÇÏ¿©)´Â È¿·ÂÀ» ¹ß»ýÇÏÁö ¾Ê½À´Ï´Ù. 1.3. ÀúÀå¼ÒÀÇ À¯Áöº¸¼ö1.3.1. °ü¸®ÀÚ¿ë µµ±¸ ¸ðÀ½1.3.1.1. svnlooksvnlookÀº ÀúÀå¼Ò¿¡ ÀÖ´Â ´Ù¾çÇÑ ¸®ºñÀü°ú Æ®·£Àè¼ÇÀ» Á¶»çÇϴµ¥ »ç¿ëµÇ´Â µµ±¸ÀÔ´Ï´Ù. ÀÌ ÇÁ·Î±×·¥Àº "Àбâ Àü¿ë" µµ±¸À̹ǷΠÀúÀå¼Ò¸¦ ÀüÇô º¯°æÇÏÁö ¾Ê½À´Ï´Ù. ÀüÇüÀûÀ¸·Î svnlookÀº Ä¿¹ÔµÉ º¯°æ »çÇ×À» º¸°íÇϰųª(pre-commit ÈÅ) ¹æ±Ý Ä¿¹ÔµÈ °ÍÀÌ ¹«¾ùÀÎÁö º¸°íÇÏ´Â(post-commit ÈÅ) ÈÅ¿¡ ÀÇÇؼ »ç¿ëµË´Ï´Ù. ÀúÀå¼Ò °ü¸®ÀÚ´Â ÀúÀå¼Ò Áø´ÜÀ» À§Çؼ ÀÌ ÅøÀ» »ç¿ëÇÒ °ÍÀÔ´Ï´Ù. svnlookÀº »ç¿ë¹ýÀÌ ´Ü¼øÇÕ´Ï´Ù.
svnlookÀÇ ÇÏÀ§ ¸í·É¾î ´ëºÎºÐÀº ¸®ºñÀüÀ̳ª Æ®·£Àè¼Ç
Æ®¸®¸¦ ´Ù·ç¸ç, Æ®¸® ÀÚü¿¡ ´ëÇÑ Á¤º¸¸¦ º¸¿©Áְųª ÀúÀå¼ÒÀÇ ¿¹Àü
¸®ºñÀüµé°ú ¾î¶»°Ô ´Ù¸¥Áö º¸¿©ÁÝ´Ï´Ù. ¸®ºñÀüÀ̳ª Æ®·£Àè¼ÇÀ» ÁöÁ¤Çϱâ
À§Çؼ
ÀÌ ±ÔÄ¢¿¡ ´ëÇÑ À¯ÀÏÇÑ ¿¹¿Ü´Â svnlook youngestÀÔ´Ï´Ù. ÀÌ°ÍÀº ¾Æ¹« ¿É¼Çµµ ÃëÇÏÁö ¾Ê°í, HEAD ¸®ºñÀüÀÇ ¹øÈ£¸¦ Ç¥½ÃÇÒ »ÓÀÔ´Ï´Ù.
svnlookÀÇ Ãâ·ÂÀº »ç¶÷ÀÌ ÀÐÀ» ¼öµµ ÀÖ°í ÄÄÇ»ÅÍ°¡ ÀÚµ¿À¸·Î ó¸®ÇÒ ¼öµµ ÀÖµµ·Ï ¼³°èµÇ¾ú½À´Ï´Ù. ÇÏÀ§ ¸í·É¾î info¸¦ º¾½Ã´Ù.
info ÇÏÀ§ ¸í·É¾îÀÇ Ãâ·ÂÀº ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾî ÀÖ½À´Ï´Ù.
ÀÌ Ãâ·ÂÀº Àΰ£ÀÌ ÀÐÀ» ¼ö°¡ ÀÖ½À´Ï´Ù. ÀÏÀÚÀÇ Å¸ÀÓ ½ºÅÆÇÁ µîÀº ¹«¾ùÀΰ¡ ¹ÙÀ̳ʸ® Ç¥Çö°ú °°Àº °ÍÀÌ ¾Æ´Ï°í ÅؽºÆ® Çü½ÄÀÌ µÇ¾î ÀÖ½À´Ï´Ù. ±×·¯³ª ÀÌ°ÍÀº ¶Ç ¸Ó½Åµµ Çؼ®ÇÒ ¼ö ÀÖ´Â Çü½ÄÀÇ °ÍÀÔ´Ï´Ù ·Î±× ¸Þ¼¼Áö´Â º¹¼öÇà¿¡ °ÉÄ¥ ¼ö°¡ ÀÖ¾î ±æÀÌÀÇ Á¦ÇÑÀÌ ¾ø±â ¶§¹®¿¡ svnlook ´Â ¸Þ¼¼Áö ÀÚ½ÅÀÇ ¾Õ¿¡ ±× ±æÀ̸¦ Ç¥½ÃÇÕ´Ï´Ù. ÀÌ°ÍÀ¸·Î ÀÌ Ä¿¸àµåÀÇ ½ºÅ©¸³Æ®³ª ´Ù¸¥ ·¡ÆÛ ÇÁ·Î±×·¥Àº ¿µ¸®ÇÑ ÆÇ´ÜÀ» ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. ¿¹¸¦ µé¾î ¸Þ¼¼Áö¿¡ ¾ó¸¶³ªÀÇ ¸Þ¸ð¸®¸¦ ÇÒ´çÇϸé ÁÁÀºÁö ¶óµçÁö À̺¥Æ®Áß¿¡¼ Àû¾îµµ ¸î ¹ÙÀÌÆ® ½ºÅµ Çصµ µ¥ÀÌÅÍ ½ºÆ®¸²ÀÌ ³¡³ª°Ô µÇÁö ¾Ê´ÂÁö µîÀ» ¾Æ´Â °ÍÀÌ ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÚÁÖ ÀÖ´Â ´Ù¸¥ svnlook ÀÇ »ç¿ë¹ýÀº ¸®ºñÀü ¶Ç´Â Æ®·£Àè¼Ç(transaction) Æ®¸®ÀÇ ½ÇÁ¦ÀÇ ³»¿ëÀ» º¸´Â °ÍÀÔ´Ï´Ù. svnlook tree Ä¿¸àµåÀÇ Ãâ·ÂÀ» Á¶»çÇØ ÁöÁ¤ÇÑ Æ®¸® ³»ºÎÀÇ µð·ºÅ丮¿Í ÆÄÀÏÀ» Ç¥½Ã½ÃÅ°¸é(±×¸®°í ¿É¼ÇÀ¸·Î¼ °¢°¢ÀÇ ÆнºÀÇ ÆÄÀÏ ½Ã½ºÅÛ ¸®ºñÀü ID¸¦ Ç¥½Ã½ÃÅ°¸é) °ü¸®ÀÚ´Â Á×¾î ¹ö¸° °Íó·³ º¸ÀÌ´Â Æ®·£Àè¼Ç(transaction)¸¦ ¾ÈÀü¿¡ Áö¿ï ¼ö ÀÖÀ»±î Á¦¹ßÀ» ÆÇ´ÜÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ¶Ç Subversion °³¹ßÀÚµµ ÆÄÀÏ ½Ã½ºÅÛ ¿¡ °ü·ÃÇÑ ¹®Á¦ÀÇ Áø´ÜÀ» ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
svnlookÀº ±× ¹Û¿¡µµ ¾Õ¿¡¼ »ìÆ캻 Á¤º¸ÀÇ ÀϺθ¦ Ç¥½ÃÇϰųª, ÁöÁ¤ÇÑ ¸®ºñÀüÀ̳ª Æ®·£Àè¼Ç¿¡¼ ¾î´À °æ·Î°¡ ¼öÁ¤µÇ¾ú´ÂÁö¸¦ º¸°íÇϰųª, ÆÄÀÏÀ̳ª µð·ºÅ丮¿¡ ´ëÇÑ ÅؽºÆ®³ª ¼Ó¼ºÀÇ Â÷ÀÌÁ¡À» Ç¥½ÃÇϰųª ÇÏ´Â µîÀÇ ¿©·¯°¡Áö ¹®ÀǸ¦ ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¾Æ·¡¿¡ svnlookÀÌ Á¦°øÇÏ´Â ÇÏÀ§ ¸í·É¾îÀÇ ¸ñ·ÏÀÌ ÀÖ½À´Ï´Ù.
1.3.1.2. svnadminsvnadminÀº ÀúÀå¼Ò °ü¸®ÀÚ°¡ °¡Àå ÀÚÁÖ ÀÌ¿ëÇÏ´Â ÇÁ·Î±×·¥ÀÔ´Ï´Ù. Subversion ÀúÀå¼Ò¸¦ ÀÛ¼ºÇÏ´Â °Í ¿Ü¿¡µµ ÀÌ ÇÁ·Î±×·¥Àº ÀúÀå¼Ò¸¦ À¯Áöº¸¼ö Çϴµ¥ ¾²ÀÌ´Â ´Ù¾çÇÑ Á¶ÀÛÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù. svnadminÀÇ »ç¿ë¹ýÀº svnlook°ú ºñ½ÁÇÕ´Ï´Ù.
ÀÌ¹Ì ¾Õ¿¡¼ svnadminÀÇ ÇÏÀ§ ¸í·É¾î create¸¦ º¸¾Ò½À´Ï´Ù(>ÂüÁ¶). ´Ù¸¥ ÇÏÀ§ ¸í·É¾îÀÇ ´ëºÎºÐÀ» ÀÌ Àå¿¡¼ ¼³¸íÇÕ´Ï´Ù. ÀÏ´Ü ÀÌ¿ë °¡´ÉÇÑ ÇÏÀ§ ¸í·É¾î Àüü¸¦ »ìÆ캾½Ã´Ù.
1.3.1.3. svnshell.pySubversion ¼Ò½º Æ®¸®¿¡´Â ÀúÀå¼Ò¿¡ ´ëÇÑ ½© ºñ½ÁÇÑ ÀÎÅÍÆäÀ̽ºµµ ÀÖ½À´Ï´Ù. svnshell.py Python ½ºÅ©¸³Æ®(¼Ò½º Æ®¸®ÀÇ tools/examples/¿¡ ÀÖ½À´Ï´Ù)´Â ÀúÀå¼Ò¿Í ÆÄÀÏ ½Ã½ºÅÛ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®¿¡ Á¢¼ÓÇϱâ À§Çؼ SubversionÀÇ ¾ð¾î Á¦ÈÞ(language bindings, ÀÌ°ÍÀ» µ¿ÀÛ½ÃÅ°·Á¸é ÄÄÆÄÀÏ°ú ÀνºÅçÀ» ÀûÀýÈ÷ ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù¸¸)¸¦ »ç¿ëÇÕ´Ï´Ù. ½ÇÇàÇϸé ÀÌ ÇÁ·Î±×·¥Àº ½© ÇÁ·Î±×·¥°ú °°ÀÌ µ¿ÀÛÇϸç, ÀúÀå¼ÒÀÇ ´Ù¾çÇÑ µð·ºÅ丮¸¦ »ìÆ캼 ¼ö ÀÖ½À´Ï´Ù. Ãʱ⠻óÅ¿¡¼´Â ÀúÀå¼Ò HEAD ¸®ºñÀüÀÇ ·çÆ® µð·ºÅ丮¿¡ "À§Ä¡Çϸç", ÀÌ »óÅ·Π¸í·É prompt°¡ Ç¥½ÃµË´Ï´Ù. ¾ðÁ¦¶óµµ help ¸í·ÉÀ¸·Î »ç¿ë °¡´ÉÇÑ ¸í·É¾î ¸ñ·ÏÀ» Ç¥½ÃÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀúÀå¼ÒÀÇ µð·ºÅ丮 ±¸Á¶¸¦ µ¹¾Æ´Ù´Ï´Â ¹æ¹ýÀº º¸Åë Unix³ª Windows ½©¿¡¼¿Í °°ÀÌ cd¸í·É¾î¸¦ »ç¿ëÇÕ´Ï´Ù. ¸í·É prompt´Â Ç×»ó Áö±Ý º¸°í ÀÖ´Â °ÍÀÌ ¾î´À ¸®ºñÀü(prefixed by rev:)ÀÎÁö ¶Ç´Â ¾î´À Æ®·£Àè¼Ç(prefixed by txn:)ÀÎÁö, ¶Ç ±× ¾È¿¡¼ ¾î´À °æ·Î¿¡ ¿ÍÀÖ´ÂÁö¸¦ Ç¥½ÃÇÕ´Ï´Ù. ÇöÀçÀÇ ¸®ºñÀüÀ̳ª Æ®·£Àè¼ÇÀº °¢°¢setrev ¿Í settxn¸í·É¾î·Î º¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù. Unix ½©°ú °°ÀÌ ÇöÀç µð·ºÅ丮ÀÇ ³»¿ëÀ» Ç¥½ÃÇϴµ¥ ls¸í·É¾î¸¦, ÆÄÀÏ ³»¿ëÀ» º¸´Âµ¥cat¸í·ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. Example 1-1. svnshellÀ» ÀÌ¿ëÇÏ¿© ÀúÀå¼Ò µÑ·¯º¸±â
¿¹Á¦¿¡¼ º¼ ¼ö ÀÖ´Â °Íó·³ º¹¼öÀÇ ¸í·É¾î¸¦ ¼¼¹ÌÄÝ·ÐÀ¸·Î ±¸ºÐÇÏ¿© ÇÑ ÁÙ¿¡ ¾µ ¼ö ÀÖ½À´Ï´Ù. ¶Ç svnshellÀº »ó´ë °æ·Î¿Í Àý´ë °æ·ÎÀÇ °³³äÀ» ÀÌÇØÇÒ ¼ö ÀÖÀ¸¹Ç·Î ". " ".."°°ÀÌ Æ¯º°ÇÑ µð·ºÅ丮 À̸§µµ ÀÌÇØÇÒ ¼ö ÀÖ½À´Ï´Ù. youngest ¸í·É¾î´Â ÃֽŠ¸®ºñÀü ¹øÈ£¸¦ Ç¥½ÃÇÕ´Ï´Ù.
ÀÌ°ÍÀº setrev ¸í·É¾î·Î ÁöÁ¤ÇÏ´Â ÀμöÀÇ ¸®ºñÀü
¹üÀ§¸¦ ¾Æ´Âµ¥ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. 0(¿µ)ºÎÅÍ youngest »çÀÌÀÇ ¸ðµç
¸®ºñÀü(¸®ºñÀü ¹øÈ£´Â Á¤¼öÀÎ °ÍÀ» ±â¾ïÇϼ¼¿ä)À» ¿¶÷ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
¿¶÷ °¡´ÉÇÑ Æ®·£Àè¼ÇÀÇ ¹üÀ§¸¦ ¾Æ´Âµ¥´Â °£´ÜÇÑ ¹æ¹ýÀÌ ¾ø½À´Ï´Ù.
lstxns ¸í·ÉÀ» ÀÌ¿ëÇÏ¿© ¿¶÷ÇÒ ¼ö ÀÖ´Â
Æ®·£Àè¼ÇÀÇ ¸ñ·ÏÀ» Á¶»çÇϼ¼¿ä. ÀÌ ¸ñ·ÏÀº svnadmin
lstxns ¸í·ÉÀÌ º¸¿©ÁÖ´Â °Í°ú °°Àº ¸ñ·ÏÀÌ°í,
svnlookÀÇ ½©ÀÇ ÀÌ¿ëÀ» Á¾·áÇÏ·Á¸é exit ¸í·É¾î¸¦ »ç¿ëÇÕ´Ï´Ù. ¶Ç´Â Control-D(Win32 Python ÆÐÅ°Áö¿¡¼´Â Windows Ç¥ÁØÀÎ Control-Z¸¦ »ç¿ëÇÕ´Ï´Ù)¸¦ ´·¯ EOF(ÆÄÀÏ ³¡)¹®ÀÚ¸¦ º¸³»µµ µË´Ï´Ù. 1.3.1.4. Berkeley DB À¯Æ¿¸®Æ¼ÇöÀç Subversion ÀúÀå¼Ò´Â µ¥ÀÌÅͺ£À̽º ¹é¿£µå·Î Berkeley DB¸¦ »ç¿ëÇÕ´Ï´Ù. ¸ðµç ÆÄÀÏ ½Ã½ºÅÛ ±¸Á¶¿Í µ¥ÀÌÅÍ´Â ÀúÀå¼ÒÀÇ db¶ó´Â µð·ºÅ丮 ¾È¿¡ Å×À̺íµé·Î º¸°üµË´Ï´Ù. ÀÌ µð·ºÅ丮´Â ÀϹÝÀûÀÎ Berkeley DB ȯ°æ µð·ºÅ丮À̹ǷΠBerkeley µ¥ÀÌŸº£À̽º µµ±¸¸¦ ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù(SleepyCat ÀÇ À¥ »çÀÌÆ® http://www.sleepycat.com/ ¿¡¼ ÀÌ·¯ÇÑ µµ±¸ÀÇ ¹®¼¸¦ º¼ ¼ö°¡ ÀÖ½À´Ï´Ù). ÀÏ»óÀûÀÎ Subversion ÀÛ¾÷¿¡¼´Â ÀÌ·¯ÇÑ µµ±¸´Â ºÒÇÊ¿äÇÕ´Ï´Ù. ±×·¯³ª SubversionÀÌ ÀÚüÀûÀ¸·Î Á¦°øÇÏÁö ¾Ê´Â Áß¿äÇÑ ±â´ÉÀÌ ¸î °¡Áö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î SubversionÀº Berkeley DBÀÇ ·Î±× ±â´ÉÀ» »ç¿ëÇÏ°í ÀÖÀ¸¹Ç·Î µ¥ÀÌÅͺ£À̽º´Â ÀÏ´Ü Áö±ÝºÎÅÍ ÇÏ·Á°í ÇÏ´Â º¯°æ¿¡ °üÇÑ ³»¿ëÀ» ·Î±×¿¡ ¾´ ÈÄ ½ÇÁ¦ º¯°æÀ» ½ÇÇàÇÕ´Ï´Ù. ÀÌ ¹æ½ÄÀº ¹«¾ùÀΰ¡ Àß µÇÁö ¾Ê¾ÒÀ» ¶§¿¡ µ¥ÀÌÅͺ£À̽º ½Ã½ºÅÛÀÌ Á÷ÀüÀÇ Ã¼Å© Æ÷ÀÎÆ®(½Ã½ºÅÛ¿¡ ÀÌ»óÀÌ ¾ø´Â ÁöÁ¡)·Î µ¹¾Æ°¥ ¼ö ÀÖµµ·Ï º¸ÀåÇÏ°í µ¥ÀÌÅ͸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ´Â »óÅ°¡ µÉ ¶§±îÁö Æ®·£Àè¼ÇÀ» ´Ù½Ã ½ÇÇàÇÒ ¼ö ÀÖµµ·Ï ÇÕ´Ï´Ù. ÀÌ°ÍÀº subversionÀÌ µ¥ÀÌŸº£À̽º·Î¼ Berkeley DB¸¦ »ç¿ëÇÏ´Â ÁÖµÈ ÀÌÀ¯ÀÔ´Ï´Ù. ½Ã°£ÀÌ Áö³²¿¡ µû¶ó ·Î±× ÆÄÀϵéÀÌ °è¼Ó ½×ÀÔ´Ï´Ù. ÀÌ°ÍÀº µ¥ÀÌÅͺ£À̽º ½Ã½ºÅÛÀÇ ±â´É Áß¿¡ ÇϳªÀÔ´Ï´Ù. ·Î±× ÆÄÀϸ¸À» »ç¿ëÇؼ µ¥ÀÌÅͺ£À̽º Àüü¸¦ ´Ù½Ã ¸¸µé ¼ö°¡ ÀÖÀ¸¹Ç·Î, ·Î±× ÆÄÀÏÀº ±«¸êÀûÀÎ µ¥ÀÌÅͺ£À̽º Æı«¸¦ º¹±¸Çϴµ¥ ¸Å¿ì Áß¿äÇÕ´Ï´Ù. ±×·¯³ª ´ë°³ µð½ºÅ©¸¦ °ø°£À» È®º¸Çϱâ À§Çؼ Berkeley DB °¡ ÀÌ¿ëÇÏ°í ÀÖÁö ¾ÊÀº ·Î±× ÆÄÀÏÀ» ´Ù¸¥ °÷¿¡ º¸°üÇÏ°í ±× ÈÄ µð½ºÅ©·ÎºÎÅÍ »èÁ¦ÇÏ°í ½Í´Ù°í »ý°¢ÇÒ °ÍÀÔ´Ï´Ù. Berkeley DB´Â ƯÁ¤ÇÑ µ¥ÀÌÅͺ£À̽º¿Í ¿¬°üµÈ ·Î±× ÆÄÀÏ°ú ´õÀÌ»ó ÀÌ¿ëÇÏÁö ¾Ê´Â ·Î±× ÆÄÀÏÀÇ ¸ñ·ÏÀ» Ç¥½ÃÇÏ´Â db_archive À¯Æ¿¸®Æ¼¸¦ ¸¦ Á¦°øÇÕ´Ï´Ù. ÀÌ ¹æ¹ýÀ¸·Î ¾î´À ÆÄÀÏÀ» º¸°üÇÏ°í Áö¿öµµ µÇ´ÂÁö ¾Ë ¼ö ÀÖ½À´Ï´Ù. svnadmin µµ±¸´Â ÀÌ Berkeley DB µµ±¸ÀÇ Æí¸®ÇÑ ·¡ÆÛ(wrapper)¸¦ Á¦°øÇÏ°í ÀÖ½À´Ï´Ù.
SubversionÀÇ ÀúÀå¼Ò´Â post-commit ÈÅ ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÕ´Ï´Ù. post-commit ÈÅÀº ÀúÀå¼ÒÀÇ "¿Â¶óÀÎ ¹é¾÷(hot backup)"À» ½ÇÇàÇÑ ÈÄ ºÒÇÊ¿äÇÑ ·Î±× ÆÄÀÏÀ» »èÁ¦ÇÕ´Ï´Ù. SubversionÀÇ ¼Ò½º Æ®¸®¿¡ ÀÖ´Â tools/backup/hot-backup.py ½ºÅ©¸³Æ®´Â Berkeley DB µ¥ÀÌÅͺ£À̽º ȯ°æÀÌ µ¿ÀÛÇÏ´Â µ¿¾È¿¡µµ ±× ³»¿ëÀ» ¾ÈÀüÇÏ°Ô ¹é¾÷ÇÏ´Â ¹æ¹ýÀ» º¸¿©ÁÝ´Ï´Ù. svnadmin hotcopy ¸í·ÉÀ» »ç¿ëÇϼ¼¿ä. ÀϹÝÀûÀ¸·Î ¸»ÇØ Á¤¸»·Î ÆíÁýÁõÀÌ ÀÖ´Â »ç¶÷À̳ª Ä¿¹ÔÀÌ ÀϾ ¶§¸¶´Ù ÀúÀå¼Ò Àüü¸¦ ¹é¾÷ÇÒ °ÍÀÔ´Ï´Ù. ±×·¯³ª ÀúÀå¼Ò°¡ ´Ù¸¥ ÀåȲ¼ºÀ» À¯ÁöÇÏ´Â ±¸Á¶¸¦ °¡Á® ¾î´À Á¤µµÀÇ »ç¼ÒÇÑ ÀÔµµ¸¦(Ä¿¹Ô ¸¶´ÙÀÇ email¿Í °°ÀÌ) °¡Áö°í ÀÖÀ¸¸é µ¥ÀÌŸº£À̽ºÀÇ ¿Â¶óÀÎ ¹é¾÷Àº ÀúÀå¼Ò(repository) °ü¸®ÀÚ°¡ ¸ÅÀÏ Àú³á ÇÏ´Â ½Ã½ºÅÛ ¹é¾÷ÀÇ ÀÏ°üÀ¸·Î¼ ÇÏ°í ½Í¾îÁúÁöµµ ¸ð¸¨´Ï´Ù. ÇÑÃþ ´õ ÀÚÁÖ ÀÖ´Â »óȲ¿¡¼´Â ÀúÀå¼Ò(repository)ÀÇ Ä¿¹Ô email¸¸ÀÇ ¾îÄ«À̺ê(archive)´Â º¹±¸ÀÇ ÃæºÐÇÑ ¹ÙÅÁÀ¸·Î µÇ°í Àû¾îµµ ¸¶Áö¸· ¸îȸÀΰ¡ ÀÇ Ä¿¹Ô¿¡ ´ëÇؼ´Â ±×·¸°ÚÁö¿ä. ±×·¯³ª ¾î·µç ±×°ÍÀº ´ç½ÅÀÇ µ¥ÀÌÅÍÀÎ (¶æ)ÀÌÀ¯·Î ÁÁ¾ÆÇÒ »Ó(¸¸Å) ÃæºÐÇÑ ¹é¾÷À» ÃëÇØ ÁÖ¼¼¿ä. Berkeley DB ´Â ¶Ç µ¥ÀÌŸº£À̽º Å×À̺íÀ» ASCII ÅؽºÆ® ÆÄÀÏ·Î º¯È¯Çϰųª ±× ¿ªÀÇ º¯È¯À» ÇÏ´Â À¯Æ¿¸®Æ¼¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. db_dump ¿Í db_load ÇÁ·Î±×·¥Àº Berkeley DB µ¥ÀÌŸº£À̽º ÀÇ Å°¿Í °ªÀ» Ç¥ÇöÇÏ´Â Ä¿½ºÅÒ Çü½Ä ÆÄÀÏÀÇ ÀÐ°í ¾²±â¸¦ ½ÇÇàÇÕ´Ï´Ù. Berkeley µ¥ÀÌŸº£À̽º´Â ¸Ó½Å ¾ÆÅ°ÅØÃĸ¦ ¶Ç ÀÖ°í´Ù ȣȯ¼º (ÀÌ)°¡ ÀÖÀ¸¹Ç·Î ÀÌ Çü½ÄÀº ¾ÆÅ°ÅØÃijª OSÀÇ Â÷À̸¦ ÀǽÄÇÏÁö ¾Ê°í µ¥ÀÌŸº£À̽º ¸Ó½Å°£¿¡ Àü¼Û Çϴµ¥ Æí¸®ÇÑ ¹æ¹ýÀÔ´Ï´Ù. 1.3.2. ÀúÀå¼Ò û¼ÒSubversion ÀúÀå¼Ò´Â ÀϹÝÀûÀ¸·Î ÀÏ´Ü ÇÑ ¹ø ¼³Á¤ÇÏ¸é ±×´ÙÁö ÁÖÀǸ¦ ±â¿ïÀÏ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. ±×·¯³ª °ü¸®ÀÚ¿¡ ÀÇÇÑ ¸î°³ÀÇ º¸Á¶°¡ ÇÊ¿äÇÒÁöµµ ¸ð¸¨´Ï´Ù. svnadmin À¯Æ¿¸®Æ¼ ¿¡´Â ´ÙÀ½°ú °°Àº ÀÛ¾÷À» µ½±â À§ÇÑ ±â´ÉÀÌ ÀÖ½À´Ï´Ù.
svnadminÀÇ ÇÏÀ§ ¸í·É¾î·Î °¡Àå ÀÚÁÖ »ç¿ëµÇ´Â °ÍÀº ¾Æ¸¶ setlogÀÏ °ÍÀÔ´Ï´Ù. Æ®·£Àè¼ÇÀÌ ÀúÀå¼Ò(repository)¿¡ Ä¿¹ÔµÇ¾î »õ·Î¿î ¸®ºñÀüÀ» ¸¸µé¾úÀ» ¶§, ·Î±× ¸Þ½ÃÁö´Â ±× ¸®ºñÀü ÀÚüÀÇ ¹öÀüÈ µÇÁö ¾ÊÀº ¼Ó¼ºÀ¸·Î¼ ÀúÀåµË´Ï´Ù. ¹Ù²Ù¾î ¸»Çϸé ÀúÀå¼Ò´Â ±× ¼Ó¼ºÀÇ ¸¶Áö¸· °ª¸¸À» ±â¾ïÇÏ°í ÀÖ°í ÀÌÀü °ÍÀº ¹ö¸®°Ô µË´Ï´Ù. °¡²û »ç¿ëÀÚ´Â ·Î±× ¸Þ¼¼Áö¿¡¼ ½Ç¼ö¸¦ ã¾Æ³À´Ï´Ù(¿ÀÀÚ³ª À߸øµÈ Á¤º¸ µî). ¸¸¾à ÀúÀå¼Ò°¡( pre-revprop-change ¿Í post-revprop-change ÈÅÀ» »ç¿ëÇØ. >ÂüÁ¶) Ä¿¹Ô ¿Ï·á ÈÄ ÀÌ ·Î±× ¸Þ½ÃÁöÀÇ º¯°æÀ» ¹Þ¾ÆµéÀ̵µ·Ï ¼³Á¤µÇ¾ú´Ù¸é »ç¿ëÀÚ´Â svn ÇÁ·Î±×·¥ÀÇ propset ¸í·É¾î¸¦ »ç¿ëÇØ ·Î±× ¸Þ½ÃÁö¸¦ ¿ø°ÝÀ¸·Î "¼öÁ¤" ÇÒ ¼ö ÀÖ½À´Ï´Ù. (>ÂüÁ¶) ±×·¯³ª, Á¤º¸°¡ ¿µ¿øÈ÷ ¾ø¾îÁö´Â ÀÏÀ» ¸·±â À§ÇØ Subversion ÀúÀå¼Ò´Â ±âº»°ªÀ¸·Î ±× ±â´ÉÀÌ ²¨Á®ÀÖ½À´Ï´Ù. ¹öÀüÈ µÇÁö ¾Ê´Â ¼Ó¼ºÀº °ü¸®ÀÚ¸¸ º¯°æÇÒ ¼ö ÀÖµµ·Ï ±âº»°ªÀ¸·Î ¼³Á¤µÇ¾î ÀÖ½À´Ï´Ù. ¸¸¾à °ü¸®ÀÚ°¡ ·Î±× ¸Þ½ÃÁö¸¦ º¯°æÇÒ ÇÊ¿ä°¡ ÀÖ´Â °æ¿ì svnadmin setlog¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ ¸í·É¾î´Â ÀúÀå¼Ò(repository)ÀÇ ÁöÁ¤ÇÑ ¸®ºñÀüÀÇ ·Î±× ¸Þ¼¼Áö(svn:log ¼Ó¼º )À» ÁöÁ¤ÇÑ ÆÄÀϷκÎÅÍ ÀоîµéÀÎ °ªÀ¸·Î ¹Ù²ß´Ï´Ù.
´Ù¸¥ ÀÚÁÖ ÀÖ´Â svnadmin ÀÇ »ç¿ë¹ýÀº Á¾·áÇÏ°í ÀÖÁö ¾Ê´Ù ¾Æ¸¶ Á×¾î ¹ö¸°Subversion Æ®·£Àè¼Ç(transaction)¿¡ °üÇÑ ÀúÀå¼Ò(repository)¿¡ÀÇ ¹®ÀÇÀÔ´Ï´Ù. Ä¿¹ÔÀÌ ½ÇÆÐÇßÀ» ¶§ º¸Åë Æ®·£Àè¼Ç(transaction)´Â ¿¹»Ú°Ô ¼Ò°ÅµË´Ï´Ù. Áï Æ®·£Àè¼Ç(transaction) (Àº)´Â ÀúÀå¼Ò(repository)·ÎºÎÅÍ »èÁ¦µÇ¾î ±× Æ®·£Àè¼Ç(transaction)¿¡(ÀÎ ¸¸Å) °ü·ÃÇß´Ù µ¥ÀÌÅ͵µ ÀÌ¿Í °°ÀÌ »èÁ¦µË´Ï´Ù. ±×·¯³ª, ÀÚÁÖ Æ®·£Àè¼Ç(transaction)ÀÇ Ã»¼Ò°¡ ÀϾÁö ¾Ê°í ½ÇÆÐÇÏ´Â °ÍÀÌ ÀÖ½À´Ï´Ù. ÀÌ°Í¿¡´Â ¸î°³ÀÇ ÀÌÀ¯°¡ »ý°¢µË´Ï´Ù: ¾Æ¸¶ Ŭ¶óÀ̾ðÆ®ÀÇ Á¶ÀÛÀÌ À¯Àú¿¡ ÀÇÇØ ³ÆøÇÏ°Ô Á¾·áµÇ¾ú´ÂÁö ³×Æ®¿öÅ©ÀÇ ÀÌ»óµîÀÌ Ã³¸®ÀÇ µµÁß¿¡ ÀϾÀ» °æ¿ìÀÔ´Ï´Ù. ÀÌÀ¯¿¡ °ü°è¾øÀÌ ÀÌ·¯ÇÑ Á×¾ú´Ù Æ®·£Àè¼Ç(transaction)´Â ÀúÀå¼Ò(repository)¸¦ ¾îÁú·¯ µð½ºÅ©¸¦ ¸ÔÀ» »ÓÀÔ´Ï´Ù. svnadminÀÇlstxns Ä¿¸àµå (À»)¸¦ »ç¿ëÇØ ±× ½ÃÁ¡¿¡¼ÀÇ ¹Ì¿Ï·áÀÇ Æ®·£Àè¼Ç(transaction)ÀÇ À̸§ÀÇ À϶÷Ç¥½Ã ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
Ãâ·Â °á°úÀÇ °¢°¢ÀÇ Ç׸ñÀºsvnlook
(¿Í ±×
ÀÌ·¯ÇÑ µÎ ÇÏÀ§ ¸í·É¾î¸¦ »ç¿ëÇÏ´Â °æ¿ì ÀúÀå¼Ò(repository)¸¦ ÀϽÃÀûÀ¸·Î Ŭ¶óÀ̾ðÆ®·ÎºÎÅÍ ¾×¼¼½º ÇÒ ¼ö ¾ø°Ô ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ÀÌ°ÍÀ¸·Î ¾Æ¹«µµ ´ç½ÅÀÌ Å¬¸° ¾÷À» ½ÃÀÛÇϱâ Àü¿¡ ¿Ã¹Ù¸¥ Æ®·£Àè¼Ç(transaction) (À»)¸¦ °³½ÃÇÒ ¼ö ¾ø°Ô µË´Ï´Ù. ÀÌÇÏ´Â ÀúÀå¼Ò(repository)³»ÀÇ ¹ÌÇØ°áÀÇ Æ®·£Àè¼Ç(transaction) ÀÇ °¢°¢ ºÙÀº Á¤º¸¸¦ Àçºü¸£°Ô »ý¼ºÇϱâ À§ÇÑ ¾à°£ÀÇ ½ºÅ©¸³Æ®ÀÔ´Ï´Ù: Example 1-2. txn-info.sh (¹ÌÇØ°á Æ®·£Àè¼Ç(transaction)ÀÇ Ç¥½Ã)
ÀÌ ½ºÅ©¸³Æ®¸¦ /path/to/txn-info.sh /path/to/repos¿Í °°ÀÌ ÇØ ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. Ãâ·ÂÀº ±âº»ÀûÀ¸·Î´Âsvnlook info Ãâ·ÂÀÇ ¿©·¯°¡Áö ´ÜÆíÀ» ÀÌÀº °Í °°Àº °ÍÀÌ µË´Ï´Ù. (>ÂüÁ¶) ÀÌÇÏ¿Í °°Àº ´À³¦ÀÔ´Ï´Ù:
º¸ÅëÀº ·Î±× ¸Þ¼¼Áö¸¦ °®°í ÀÖÁö ¾ÊÀº Á×Àº Æ®·£Àè¼Ç(transaction)°¡ º¸ÀÌ´Â °æ¿ì °»½Å(ȤÀº °Å±â¿¡ ´àÀº) Á¶ÀÛ¿¡ ½ÇÆÐÇÑ °á°úÀÔ´Ï´Ù. ÀÌ·¯ÇÑ Á¶ÀÛÀº ÀÛ¾÷ Ä«ÇÇ »óÅ°¡(hood to mimic)»óÅÂÇÏ ±×¸®°í SubversionÀÇ Æ®·£Àè¼Ç(transaction)¸¦ ÀÌ¿ëÇÕ´Ï´Ù. Ä¿¹ÔÇÏ´Â Àǵµ°¡ ÀüÇô ¾ø±â ¶§¹®¿¡ SubversionÀº ±×·¯ÇÑ Æ®·£Àè¼Ç(transaction)¿¡ ´ëÇÑ´Ù ·Î±× ¸Þ¼¼Áö¸¦ ¿ä±¸ÇÏÁö ¾Ê½À´Ï´Ù. ·Î±× ¸Þ¼¼Áö°¡ µµÂøÇÑ Æ®·£Àè¼Ç(transaction) (Àº)´Â ¾Æ¸¶ È®½ÇÈ÷ ¾î¶² Á¾·ùÀÇ Ä¿¹Ô¿¡ ½ÇÆÐÇßÀ» °æ¿ìÀÔ´Ï´Ù. ¶Ç Æ®·£Àè¼Ç(transaction)ÀÇ Å¸ÀÓ ½ºÅÆÇÁ´Â Èï¹Ì·Î¿î Á¤º¸°¡ µË´Ï´Ù ¿¹¸¦ µé¾î ¾î°¼ 9°³¿ùÀ̳ª Àü¿¡ ½ÃÀÛÇÑ Á¶ÀÛÀÌ ¾ÆÁ÷ ¾×ƼºêÇÏ°ÚÁö Àΰ¡? ±×·¸´Ù°í ÇÏ´Â »óÅÂÀÔ´Ï´Ù. °£´ÜÇÏ°Ô ¸»ÇØ Æ®·£Àè¼Ç(transaction)ÀÇ Å¬¸° ¾÷ÀÇ °áÁ¤Àº ¹«ºÐº°ÇÏ°Ô ÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. ¿©·¯°¡Áö Á¤º¸¿ø¾ÆÆÄÄ¡ÀÇ ¿¡·¯ ·Î±×³ª ¾×¼¼½º ·Î±× ¼º°øÇÑ SubversionÀÇ Ä¿¹Ô ·Î±× µî µî°¡ ¾î¶»°Ô Çϸé ÁÁÀº°¡¸¦ °áÁ¤Çϴµ¥ ÀÖ¾î¼ µµ¿òÀÌ µË´Ï´Ù. ¸¶Áö¸·À¸·Î °ü¸®ÀÚ´Â ÀÚÁÖ Á×Àº Æ®·£Àè¼Ç(transaction)ÀÇ ¼ÒÀ¯ÀÚ¶ó°í »ý°¢µÇ´Â »ç¶÷°ú(emailµîÀ¸·Î) ±× Á×À½¿¡ °É¸° Æ®·£Àè¼Ç(transaction) »óŸ¦ È®ÀÎÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. 1.3.3. ÀúÀå¼Ò(repository)ÀÇ º¹±¸ÀúÀå¼Ò(repository)ÀÇ µ¥ÀÌÅ͸¦ ÁöÅ°±â À§Çؼ µ¥ÀÌŸº£À̽º ¿¬±¸ ÃÖÁ¾ ´Ü°è´Â ¶ôÀÇ ±¸Á¶¸¦ ÀÌ¿ëÇÕ´Ï´Ù. ÀÌ ±¸Á¶´Â µ¥ÀÌŸº£À̽º°¡ ÀÖ´Ù ºÎºÐÀº º¹¼öÀÇ µ¥ÀÌŸº£À̽º¿¡ ¾×¼¼½º ÇÏ°í ÀÖ´Â »ç¶÷À¸·ÎºÎÅÍ µ¿½Ã¿¡ º¯°æµÇ´Â °ÍÀÌ ¾ø´Â °ÍÀ» ÇÁ·ÎÅؼÇÇØ °¢°¢ÀÇ ÇÁ·Î¼¼½º´Â µ¥ÀÌŸº£À̽º (À¸)·ÎºÎÅÍ ÀÐÈù µ¥ÀÌÅÍ°¡ Ç×»ó ¿Ã¹Ù¸¥ »óÅ¿¡ ÀÖ´Â °Íó·³ º¸ÀÌ´Â °ÍÀ» ÇÁ·ÎÅؼÇÇÕ´Ï´Ù. ÇÁ·Î¼¼½º°¡ µ¥ÀÌŸº£À̽ºÁßÀÇ ¹«¾ùÀΰ¡¸¦ º¯°æÇÒ ÇÊ¿ä°¡ ÀÖ´Ù °æ¿ì ±×°ÍÀº ¿ì¼± ¸ñÀûÀÇ µ¥ÀÌÅÍ°¡ ¶ôµÇ¾î ÀÖÁö ¾ÊÀºÁö ¾î¶²Áö¸¦ È®ÀÎ ÇÕ´Ï´Ù. ¸¸¾à µ¥ÀÌÅÍ°¡ ¶ôµÇ¾î ÀÖÁö ¾ÊÀ¸¸é ±× ÇÁ·Î¼¼½º´Â µ¥ÀÌÅ͸¦ Àá±×¾î ÇÊ¿äÇÑ º¯°æÀ» ´õÇØ ¸¶Áö¸·¿¡ ¶ôÀ» ¶Á´Ï´Ù. ´Ù¸¥ ÇÁ·Î¼¼½º´Â µ¥ÀÌŸº£À̽ºÀÇ ±× ºÎºÐ¿¡ ¾×¼¼½º ÇÏ´Â Çã°¡¸¦ ¾ò´Â´Ù Àü¿¡ ¶ôÀÇ ÇØÁ¦¸¦ ±â´Ù¸®´Â °ÍÀ» °¿ä´çÇÕ´Ï´Ù. Subversion ÀúÀå¼Ò(repository)¸¦ »ç¿ëÇϴµ¥ ÀÖ¾î¼ Ä¡¸íÀûÀÎ ¿¡·¯(µð½ºÅ©°¡ °¡µæ µÇ°Å³ª ¸Þ¸ð¸®°¡ ¾ø¾îÁö°Å³ª)³ª ¼¼Ä¡±â¿¡ ÀÇÇØ µ¥ÀÌŸº£À̽º¿¡ °ÉÄ£ ¶ôÀ» »èÁ¦ÇÒ ±âȸ¸¦ ¾ø¾Ö ¹ö¸®´Â ÀÏÀÌ ÀÖ½À´Ï´Ù. ±× °á°ú ¿¬±¸ ÃÖÁ¾ ´Ü°èÀÇ µ¥ÀÌŸº£À̽º´Â"±»¾îÁ®"¹ö¸³´Ï´Ù. ÀÌ·¸°Ô µÇ¾úÀ» ¶§¿¡´Â ÀúÀå¼Ò(repository)¿¡ÀÇ ¾î¶°ÇÑ ¾×¼¼½ºµµ ¿µ±¸È÷ ±â´Ù¸®°Ô µÈ´Ù °ÍÀ¸·Î µÇ¾î ¹ö¸³´Ï´Ù. (¶ó°í ÇÏ´Â °ÍÀº ¸ðµç »õ·Î¿î ¾×¼¼½º´Â ¶ô ÇÏÁö¸¸ ÇØÁ¦µÇ´Â °ÍÀ» ±â´Ù¸³´Ï´Ù¸¸ ±×°ÍÀº °áÄÚ ¿ÀÁö ¾Ê±â ¶§¹®ÀÔ´Ï´Ù) ¿ì¼± ±×·± °ÍÀÌ ÀúÀå¼Ò(repository)¿¡ ÀϾµµ ºñ¸íÀ» Áö¸£Áö ¸¶ ÁÖ¼¼¿ä. SubversionÀÇ ÆÄÀÏ ½Ã½ºÅÛÀº µ¥ÀÌÅͺ£ÀÕ Æ®·»¼½¼Ç (¿Í)°ú üũ Æ÷ÀÎÆ® °Å±â¿¡ »çÀü Àú³Î ±âÀÔÀÇ ±¸Á¶¸¦ Àß ÀÌ¿ëÇÏ°í ÀÖ¾î Á¤¸»·Î ÆĸêÀûÀÎ »ç°Ç ÀÌ¿Ü´Â [2] µ¥ÀÌŸº£À̽º ȯ°æÀ» ¿µ±¸È÷ ¸ÅÀåÇØ ¶°³¯ ¼ö ¾ø´Â °ÍÀ» ÇÁ·ÎÅؼÇÇÕ´Ï´Ù. ÃæºÐÈ÷ ½Å°æÁúÀûÀÎ ÀúÀå¼Ò(repository) °ü¸®ÀÚ´Â ¹«½¼ÀÀµîÀ̳ª ¹æ¹ýÀ¸·Î ÀúÀå¼Ò(repository) µ¥ÀÌÅÍÀÇ ¿ÀÇÁ ¶óÀÎ ¹é¾÷À» ÃëÇÏ°í ÀÖÀ»Áöµµ ¸ð¸£Áö ¾Ê½À´Ï´Ù¸¸ ¹é¾÷ Å×ÀÌÇÁ¸¦ restore ÇØ ÁÖ°í¿Í ½Ã½ºÅÛ °ü¸® Ã¥ÀÓÀÚ¸¦ ºÎ¸£´Â °ÍÀº ¾ÆÁ÷ÀÔ´Ï´Ù. ´ÙÀ½¿¡ ÀÌÇÏÀÇ ¼ø¼¸¦ »ç¿ëÇØ ÀúÀå¼Ò(repository)ÀÇ"º¹±¸" (À»)¸¦ ½ÃÇèÇØ º¸¼¼¿ä:
ÀÌ ¹æ¹ýÀº ´ëºÎºÐÀÇ ÀúÀå¼Ò(repository) ¶ôÀ» ÇؼÒÇÕ´Ï´Ù. ÀÌ Ä¿¸àµå´Â ´ÜÁö root°¡ µÇ´Â °ÍÀÌ ¾Æ´Ï¶ó µ¥ÀÌŸº£À̽º (À»)¸¦ ¼ÒÀ¯ÇØ °ü¸®ÇÏ°í ÀÖ´Â À¯Àú·Î ½ÇÇàÇÏ´Â °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä. º¹±¸ ÀÛ¾÷Àº »óó¸¦ ÀÔÀº ¿©·¯°¡Áö µ¥ÀÌŸº£À̽º ÆÄÀÏ (À¸)·ÎºÎÅÍÀÇ ÀçÀÛ¼ºÀÇ ÀÛ¾÷µµ Æ÷ÇÔÇÕ´Ï´Ù. (¿¹¸¦ µé¾î °øÀ¯ ¸Þ¸ð¸® area µîÀÔ´Ï´Ù) root ¿¡¼ÀÇ º¹±¸´Â root °¡ ¼ÒÀ¯ÇÏ°í ÀÖ´Â ÆÄÀÏÀ» ÀÛ¼ºÇÏ´Â °ÍÀ¸·Î ÀÌ°ÍÀº ÀúÀå¼Ò(repository)¿¡ÀÇ Á¢¼Ó »óȲÀÌ º¹±¸ÇÑ ´ÙÀ½¿¡µµ Åë»óÀÇ À¯Àú´Â ÀÌ°Í¿¡ ´ëÇؼ ¾×¼¼½º ÇÑ´Ù ÀÏÀ» ÇÒ ¼ö ¾ø´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. ¸¸¾à Áö±Ý ¸»ÇÑ ÀÛ¾÷ÀÌ ¹«¾ùÀΰ¡ÀÇ ÀÌÀ¯·Î Àß ÀúÀå¼Ò(repository)¸¦ Á¤»óÀûÀ¸·Î
µÇµ¹¸± ¼ö ¾ø´Â °æ¿ì µÑÀ» ÇØ¾ß ÇÕ´Ï´Ù. ¿ì¼± ¸Á°¡Áø ÀúÀå¼Ò(repository)¸¦
Ä¡¿ö ¸¶Áö¸· ¹é¾÷À» restore ÇÕ´Ï´Ù. ±×¸®°í Subversion
ÀÇ °³¹ß ¸®½ºÆ®¿¡ email ÇÕ´Ï´Ù. (ÀÌ°ÍÀº
1.3.4. ÀúÀå¼Ò(repository)ÀÇ ÀÌÇàSubversion ÆÄÀÏ ½Ã½ºÅÛÀº ´Ù¾çÇÑ µ¥ÀÌŸº£À̽º Å×ÀÌºí¿¡ ºÐ»êµÇ¾ú´Ù µ¥ÀÌÅ͸¦ °¡Áý´Ï´Ù¸¸ ÀÌ°ÍÀº ÀϹÝÀûÀ¸·Î´Â Subversion °³¹ßÀÚ¸¸ÀÌ ¾Ë°í ÀÖ´Ù (¶ó°í Èï¹Ì°¡ ÀÖ´Ù) ÀÏÀÔ´Ï´Ù. ±×·¯³ª ¸ðµç ȤÀº ÀϺÎÀÇ µ¥ÀÌÅ͸¦ ÇϳªÀÇ ¿î¹Ý¿¡ Æí¸®ÇÑ ´Ü¼øÇÑ ÆÄÀÏ Çü½Ä¿¡ Á¤¸®ÇÏ°í ½ÍÀº °ÍÀÌ ÀÖ½À´Ï´Ù. Subversion ´Â ±×·¯ÇÑ ±¸Á¶¸¦svnadmin ÇÏÀ§ ¸í·É¾î ÀÇ Á¶¿¡ ÀÇÇØ ½ÇÀåÇÏ°í ÀÖ½À´Ï´Ù: dump ¿Í loadÀÔ´Ï´Ù. Subversion ÀúÀå¼Ò(repository)¸¦ ´ýÇÁ Çϰųª ·ÎµåÇϰųª ÇÏ´Â Á¦ÀÏ ÀÚÁÖ ÀÖ´Â ÀÌÀ¯´Â Subversion ÀÚ½ÅÀÇ º¯°æ¿¡ ÀÖ½À´Ï´Ù. SubversionÀÌ ¿Ï¼º¿¡ °¡±î¿öÁö´Â °Í¿¡ µû¶ó ¾î¶² Á¾·ùÀÇ º¯°æÀÌ ¿¬±¸ ÃÖÁ¾ ´Ü°è µ¥ÀÌŸº£À̽ºÀÇ schema·Î º¯°æµÉ ¶§ ÀúÀå¼Ò(repository)ÀÇ ÀüÀÇ ¹öÀü°úÀÇ È£È¯¼ºÀÌ ¾ø¾îÁ® ¹ö¸³´Ï´Ù. ÀÌ·¯ÇÑ È£È¯¼ºÀÇ °æ°è¸¦ ³Ñ¾î ¾÷±×·¹À̵å ÇÒ °æ¿ì¿¡ ±ÇÇÏ´Â ¹æ¹ýÀº ºñ±³Àû ´Ü¼øÇÑ °ÍÀÔ´Ï´Ù:
svnadmin dump ´Â ÀúÀå¼Ò(repository) ¸®ºñÀüÀÌ ÀÖ´Ù ¹üÀ§¸¦ Ãâ·ÂÇÕ´Ï´Ù¸¸ ±×°ÍÀº SubversionÀÇ Ä¿½ºÅÒ ÆÄÀÏ ½Ã½ºÅÛ ´ýÇÁ Çü½ÄÀÌ µÇ¾î ÀÖ´Â °ÍÀÔ´Ï´Ù. ´ýÇÁ Çü½ÄÀº Ç¥ÁØ Ãâ·Â¿¡ Ç¥½ÃµÇ¾î ÁøÇà »óȲµîÀÇ ¸Þ¼¼Áö´Â Ç¥ÁØ ¿¡·¯ Ãâ·Â¿¡ Ç¥½ÃµË´Ï´Ù. ÀÌ°ÍÀ¸·Î Ãâ·ÂÀ» ÆÄÀÏ¿¡ ¸®µð·ºÆ® ÇÒ ¼ö°¡ ÀÖ¾î ±× ÇÑÆíÀ¸·Î ½ºÅ×ÀÌÅͽº ÀÇ Ãâ·Â¿¡ ´ëÇؼ´Â ´Ü¸» À©µµ¿ì»ó¿¡¼ º¼ ¼ö°¡ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î:
ó¸®ÀÇ ÃÖÈÄ·Î ÁöÁ¤ÇÑ ¹üÀ§ÀÇ ÀúÀå¼Ò(repository) ¸®ºñÀüÀÇ µ¥ÀÌÅÍ ¸ðµÎ ÇÏÁö¸¸ º¸Á¸µÈ ÇϳªÀÇ ÆÄÀÏ(ÀüÀÇ ¿¹¿¡¼´Â dumpfile) (À»)¸¦ ¼Õ¿¡ ³ÖÀ» ¼ö°¡ ÀÖ½À´Ï´Ù. Á¶°¡ µÈ ÀÌÁ¦(¹ú½á) ÇÑÆíÀÇ ÇÏÀ§ ¸í·É¾îÀÎsvnadmin load´Â Ç¥ÁØ ÀÔ·ÂÀ» Subversion ÀúÀå¼Ò(repository)ÀÇ ´ýÇÁ ÆÄÀÏ°ú ÇØ Çؼ®ÇØ ´ýÇÁ µÈ ¸®ºñÀüÀ» ¸ñÀûÀÇ ÀúÀå¼Ò(repository)¿¡ ÀçÇöÇÕ´Ï´Ù. ±×°ÍÀº ¶Ç °æ°ú Á¤º¸µîÀ» µ¹·ÁÁÝ´Ï´Ù¸¸ ÀÌÂÊÀº Ç¥ÁØ Ãâ·Â¿¡ Ç¥½ÃÇÕ´Ï´Ù:
svnadmin ´Â Ç¥ÁØ ÀԷ°ú Ç¥ÁØ Ãâ·ÂÀ» ÀúÀå¼Ò(repository)ÀÇ ´ýÇÁ (¿Í)°ú ·Îµå 󸮿¡ »ç¿ëÇϹǷΠ¸ÚÀÌ ÀÖ´Â »ç¶÷Àº ÀÌÇÏ¿Í °°Àº ¹æ½ÄÀ» ½ÃÇèÇÑ´Ù Àϵµ ÇÒ ¼ö ÀÖ½À´Ï´Ù(¾Æ¸¶ ÆÄÀÌÇÁÀÇ ¾çÃøÀÇsvnadmin (Àº)´Â ´Ù¸¥ ¹öÀüÀÏÁöµµ ¸ð¸¨´Ï´Ù):
Àü¿¡ ÁÖÀÇÇÑ °Íó·³svnadmin
dump ´Â ¸®ºñÀüÀÇ ¹üÀ§¸¦ Ãâ·ÂÇÕ´Ï´Ù.
SubversionÀº °¢°¢ÀÇ »õ·Î¿î ¸®ºñÀüÀ» ´ýÇÁ ÇϹǷΠ±× Ãâ·Â¿¡´Â ´ÙÀ½¿¡ ½ÇÇàµÇ´Â ·Î´õ°¡ ÀüÀÇ ¸®ºñÀüÀ» ¹ÙÅÁÀ¸·Î ÇØ ±× ¸®ºñÀüÀ» Àç ÀÛ¼ºÇϴµ¥ ÇÊ¿äÇÑ ÃæºÐÇÑ Á¤º¸°¡ ÀÖ½À´Ï´Ù. ¹Ù²Ù¾î ¸»Çϸé(ÀÚ) ´ýÇÁ ÆÄÀÏÁß¿¡¼ ¾î¶°ÇÑ ¸®ºñÀüÀÌ ÁöÁ¤µÇ¾îµµ ¸®ºñÀüÁß¿¡¼ º¯°æÀÌ ÀÖ´ø ¾ÆÀÌÅÛ¸¸ÀÌ ´ýÇÁ¿¡ ³ªÅ¸³´Ù°í ÇÏ´Â °Í ÀÔ´Ï´Ù. ÀÌ ±ÔÄ¢ÀÇ À¯ÀÏÇÑ ¿¹¿Ü´Â ÇöÀçÀÇsvnadmin dump ÇÏÁö¸¸ ´ýÇÁ ÇÏ´Â ÃÖÃÊÀÇ ¸®ºñÀüÀÔ´Ï´Ù. µðÆúÆ®¿¡¼´Â SubversionÀº ÀüÀÇ ¸®ºñÀü¿¡ ´ëÇÑ ´Ü¼øÇÑ Â÷ºÐÀ¸·Î¼ ÃÖÃÊÀÇ ´ýÇÁ ¸®ºñÀüÀ» Ç¥ÇöÇÒ °ÍÀº ¾ø½À´Ï´Ù. ÀÌ ÀÌÀ¯ÀÇ Çϳª´Â ´ýÇÁ ÆÄÀÏ¿¡´Â Á÷ÀüÀÇ ¸®ºñÀüÀÌ ¾ø±â ¶§¹®ÀÔ´Ï´Ù! µÎ¹ø°¿¡ Subversion (Àº)´Â ´ýÇÁ µ¥ÀÌÅÍ°¡ ·Îµå µÇ´Â ÀúÀå¼Ò(repository) »óÅ¿¡ ´ëÇØ ¾Æ¹«°Íµµ ¸ð¸¥´Ù (À¸)·ÎºÎÅÍÀÔ´Ï´Ù. (¸¸¾à ·Îµå°¡ ÀϾٰí Çϸé ÀÔ´Ï´Ù¸¸. ) svnadmin dump ÀÇ °³º°ÀÇ ½ÇÇàÀÇ Ãâ·ÂÀÌ ÀÚ±â ÃæÁ· ÇØ ÀÖ´Â °ÍÀ» ÇÁ·ÎÅؼÇÇϱâ À§ÇØ(¶§¹®¿¡) ÃÖÃÊÀÇ ´ýÇÁ ¸®ºñÀüÀº µðÆúÆ®¿¡¼´Â ¸ðµç µð·ºÅ丮 ÆÄÀÏ, ÀúÀå¼Ò(repository)¿¡ ÀÖ´Â ±× ¸®ºñÀüÀÇ ¼Ó¼º ÀÇ ¿ÏÀüÇÑ Ç¥ÇöÀÌ µÇ¾î ÀÖ½À´Ï´Ù. ±×·¯³ª ÀÌ µðÆúÆ®ÀÇ ÇൿÀ» ¹Ù²Ü ¼öµµ ÀÖ½À´Ï´Ù. ÀúÀå¼Ò(repository)¸¦
´ýÇÁ ÇÒ °æ¿ì¿¡
ÀÌ·¯ÇÑ ´ýÇÁ ÆÄÀÏÀº ÀÌÇÏ¿Í °°Àº Ä¿¸àµå°¡ Èê·¯ ³ª¿À°í »õ·Î¿î ÀúÀå¼Ò(repository)Áß¿¡ ·Îµå µË´Ï´Ù:
Example 1-3. ÀúÀå¼Ò(repository)ÀÇ Â÷ºÐ ´ýÇÁÀÇ ÀÌ¿ë
ÀÌ¿Í °°ÀÌ ÀÌ¿ëÇÏ´Â °ÍÀ¸·Î svnadminÀÇ dump ¿Í load Ä¿¸àµå´Â °¡Ä¡°¡ ÀÖ´Â ¼ö´ÜÀÌ µË´Ï´Ù¸¸ ÀÌ°Í¿¡ ÀÇÇØ ÀúÀå¼Ò(repository)ÀÇ º¯°æÀ» ½Ã°£À» µé¿© ¹é¾÷ ÇØ ½Ã½ºÅÛ Å©·¡½¬³ª ´Ù¸¥ ±«¸êÀûÀÎ »ç°Ç¿¡ °®Ãá´Ù´Â °ÍÀÔ´Ï´Ù. ¸¶Áö¸·À¸·Î SubversionÀÇ ÀúÀå¼Ò(repository) ´ýÇÁ ÆÄÀÏ Çü½ÄÀÇ ´Ù¸¥ ÀÌ¿ë ¹æ¹ý°ú Çؼ´Â ´Ù¸¥ º¸Á¸ÀÇ ±¸Á¶³ª ¹öÀü ÄÜÆ®·Ñ ½Ã½ºÅÛÀ¸·ÎºÎÅÍÀÇ º¯È¯ÀÔ´Ï´Ù. ´ýÇÁ ÆÄÀÏ Çü½ÄÀº ´ëºÎºÐÀÌ Àΰ£ÀÌ ÀÐÀ» ¼ö ÀÖ´Â ÇüÅ°¡ µÇ¾î ÀÖÀ¸¹Ç·Î [3] ÀÌ ÆÄÀÏ Çü½ÄÀ» »ç¿ëÇϸé(ÀÚ) ºñ±³Àû °£´ÜÇÏ°Ô ÀϹÝÀûÀÎ º¯°æÁ¡¼¼Æ®¸¦ Ç¥ÇöÇÒ ¼ö°¡ ÀÖ´Â °¢°¢ÀÇ º¯°æÀº »õ·Î¿î ¸®ºñÀüÀ¸·Î¼ ´Ù·ç¾îÁý´Ï´Ù 1.3.5. ÀúÀå¼Ò(repository)ÀÇ ¹é¾÷Çö´ëÀûÀÎ ÄÄÇ»ÅÍ°¡ ž°í ³ª¼ ±â¼úÀûÀ¸·Î´Â ¸Å¿ì ¹ßÀüÇØ ¿ÔÁö¸¸ À¯°¨½º·´°Ô ÇϳªÀÇ Àϸ¸Àº Ʋ¸²¾øÀÌ Áø½ÇÇÕ´Ï´Ù°¡²û ¸ðµç °ÍÀº ¿ÏÀüÈ÷ ¾û¸ÁÀÌ µÇ¾î ¹ö¸°´Ù ¶ó°í ÇÏ´Â °ÍÀÔ´Ï´Ù. Á¤Àü ³×Æ®¿öÅ© Àý´Ü RAMÀÇ Æı« ÇÏµå µð½ºÅ©ÀÇ Å©·¡½¬´Â ¸¶±Í ÀÌ¿ÜÀÇ ´©±¸À̱⵵ ÇÏÁö ¾Ê½À´Ï´Ù. ¿î¸íÀº °¡Àå ¶Ù¾î³ °ü¸®ÀÚ¿¡°ÔÁ¶Â÷ ´ÚĨ´Ï´Ù. ±×·¡¼ ¸Å¿ì Áß¿äÇÑ ÅäÇÈ¿¡ µµÂøÇմϴپ°Ô ÀúÀå¼Ò(repository)ÀÇ ¹é¾÷À» ÃëÇÏ´ÂÁö ÀÔ´Ï´Ù. ÀϹÝÀûÀ¸·Î SubversionÀÇ ÀúÀå¼Ò(repository) °ü¸®ÀÚ¿¡°Ô ÀÖ¾î µÎ ¹é¾÷ ¹æ¹ýÀÌ ÀÖ½À´Ï´ÙÂ÷µî ¹é¾÷°ú Ç®¹é ¾÷ÀÔ´Ï´Ù. ÀÌ ÀåÀÇ ÀüÀÇ ¸¶µð·Î ¾î¶»°Ôsvnadmin dump --incremental ¸¦ »ç¿ëÇØ Â÷ºÐ ¹é¾÷À» ÃëÇÏ´ÂÁö¸¦ ³íÀÇÇß½À´Ï´Ù (>ÂüÁ¶). º»ÁúÀûÀ¸·Î ÀÌ ¾ÆÀ̵ð¾î´Â ¸¶Áö¸·¿¡ ¹é¾÷À» ÃëÇÏ°í ³ª¼ µÐ ÀúÀå¼Ò(repository)ÀÇ º¯°æ ºÎºÐ¸¸ÅÀ» ¹é¾÷ ÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù. ÀúÀå¼Ò(repository)ÀÇ Ç®¹é ¾÷Àº ¹®ÀÚ ±×´ë·Î ÀúÀå¼Ò(repository) µð·ºÅ丮 ÀüüÀÇ º¹Á¦¸¦ ¸¸µå´Â °ÍÀÔ´Ï´Ù(ÀÌ°ÍÀº Berkeley µ¥ÀÌŸº£À̽º ȯ°æµµ Æ÷ÇԵ˴ϴÙ) ±×·±µ¥ ÀϽÃÀûÀ¸·Î ÀúÀå¼Ò(repository)¿¡ ´ëÇÑ ¸ðµç ¾×¼¼½º¸¦ ±ÝÁöÇÏÁö ¾ÊÀ¸¸é ´Ü¼øÇÑ Àç±ÍÀûÀÎ µð·ºÅ丮 Ä«ÇÇÀÇ ½ÇÇàÀº Á×Àº ¹é¾÷À» ¸¸µé¾î ³¡³»´Â À§ÇèÀ» °®°í ÀÖ½À´Ï´Ù. ±×·¸´Ù°í ÇÏ´Â °ÍÀº ´©±º°¡°¡ º´ÇàÇØ µ¥ÀÌŸº£À̽º¿¡ ±âÀÔÇØ ÀÖÀ»Áöµµ ¸ð¸£±â ¶§¹®ÀÔ´Ï´Ù. Çà¿îÀÇ ÀÏ·Î SleepycatÀÇ BerkeleyDB ¹®¼¿¡¼´Â ÀÖ´Â Á¤ÇØÁø Ä«ÇÇÀÇ ¼ø¼°¡ ¾²¿©Á® ÀÖ½À´Ï´Ù. ±× ¼ø¼¿¡ µû¸£¸é µ¥ÀÌŸº£À̽º ÆÄÀÏÀº ¿Ã¹Ù¸¥ ¹é¾÷ Ä«ÇÇ°¡ µÇ´Â °ÍÀ» ÇÁ·ÎÅؼÇÇÏ´Â ÇüÅ·ΠīÇÇÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÑÃþ ´õ ´É¼÷ÇÑ °Í¿¡ ±× ¾Ë°í¸®ÁòÀº ´ç½ÅÀÌ ½ÇÀåÇÒ ÇÊ¿ä´Â ¾ø°í ¹ú½á Subversion °³¹ß ÆÀÀÌ ÇÏ°í ÀÖ´Ù°í ÇÏ´Â °ÍÀÔ´Ï´Ù. hot-backup.py ½ºÅ©¸³Æ®´Â SubversionÀÇ ¼Ò½º ÆÐÅ°ÁöÀÇtools/backup/ µð·ºÅ丮¿¡ ÀÖ½À´Ï´Ù. ÀúÀå¼Ò(repository) Æнº¿Í ¹é¾÷ À§Ä¡¸¦ ÁöÁ¤Çϸé(ÀÚ) hot-backup.py (Àº)´Â µ¿ÀÛÁßÀÇ ÀúÀå¼Ò(repository)¸¦ ÇÙ ¿Ã¶ó°¡´Âµ¥ ÇÊ¿äÇÑ ½ºÅÜÀ» ½ÇÇàÇÕ´Ï´Ù ´ç½Å¿¡°Ô ÀúÀå¼Ò(repository) ¾×¼¼½º¸¦ ±ÝÁöÇÏ´Â °Í ¾øÀÌ ÀÔ´Ï´Ù ±× ´ÙÀ½¿¡ µ¿ÀÛÁßÀÇ ÀúÀå¼Ò(repository)·ÎºÎÅÍ Á×¾î ÀÖ´Â Berkeley ·Î±× ÆÄÀÏÀ» ¿¹»Ú°Ô »èÁ¦ÇÕ´Ï´Ù. Â÷µî ¹é¾÷ÀÌ ÀÖ´Ù°í Çصµ ±ÔÄ¢ÀûÀ¸·Î ÀÌ ÇÁ·Î±×·¥À» ½ÇÇàÇÏ°í ½Í°í µÉÁöµµ ¸ð¸¨´Ï´Ù. ¿¹¸¦ µé¾îhot-backup.py ¸¦ ÇÁ·Î±×·¥ ½ºÄÉÁì·¯¿¡ Ãß°¡ÇÏ·Á°í »ý°¢ÇÒÁöµµ ¸ð¸¨´Ï´Ù (Unix À̸écrond ¿Í °°Àº °Í). ȤÀº ¼¼¼¼ÇÑ ÀÔµµÀÇ ¹é¾÷À» ÁÁ¾ÆÇϸé hot-backup.py (À»)¸¦ ºÎ¸£´Â °Í °°Àº post-commit Ç«½º Ŭ¸³Æ®¸¦ ¾µ ¼öµµ ÀÖ½À´Ï´Ù. (>ÂüÁ¶). ÀÌ°ÍÀº »õ·Î¿î ¸®ºñÀüÀÌ ÀÛ È÷¿¡ ÀúÀå¼Ò(repository)ÀÇ »õ·Î¿î ¹é¾÷ÀÌ »ý±â´Â ¹æ½ÄÀÔ´Ï´Ù. ´ÜÁö ÀÌÇϸ¦ µ¿ÀÛÁßÀÇ ÀúÀå¼Ò(repository) µð·ºÅ丮¿¡ ÀÖ´Ù hookspost-commit ¿¡ Ãß°¡ÇØ ÁÖ¼¼¿ä:
°á°úÀÇ ¹é¾÷Àº ¿ÏÀüÇÏ°Ô ±â´ÉÇÏ´Â Subversion ÀúÀå¼Ò(repository)·Î ÇöÇàÀÇ ÀúÀå¼Ò(repository)ÀÌ ¹«¾ùÀΰ¡ ½ÉÇÏ°Ô µÇ¾úÀ» ¶§¿¡´Â ¿Å°Ü³õ¾Æ »ç¿ëÇÏ´Â °ÍÀÌ ÇÒ ¼ö ÀÖ´Â °ÍÀÔ´Ï´Ù. ¾çÂÊ ¸ðµÎÀÇ ¹é¾÷ ¹æ¹ý¿¡´Â °¢°¢ ÀÌÁ¡ÀÌ ÀÖ½À´Ï´Ù. Á¦ÀÏ °£´ÜÇÑ °ÍÀº Ç®¹é ¾÷À¸·Î ±×°ÍÀº Ç×»ó ÇöÇà ÀúÀå¼Ò(repository)ÀÇ ¿ÏÀüÇÑ Ä«ÇÇÀÔ´Ï´Ù. ¹Ýº¹ÀÌ µË´Ï´Ù¸¸ ¹«¾ùÀΰ¡ ¾ÈµÇ´Â ÀÏÀÌ µ¿ÀÛÁßÀÇ ÀúÀå¼Ò(repository)¿¡ ÀϾ´Ù ¶§·Î´Â ´Ü¼øÇÑ Àç±ÍÀûÀÎ µð·ºÅ丮 Ä«ÇÇ·Î ÀÌ ¹é¾÷À» º¹¿øÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. À¯°¨½º·´°Ô ¸¸¾à ÀúÀå¼Ò(repository)ÀÇ º¹¼öÀÇ ¹é¾÷ (À»)¸¦ °ü¸®ÇÏ°í ÀÖ´Â °æ¿ì ÀÌ·¯ÇÑ Ç® Ä«ÇÇ´Â ½ÇÇàÁßÀÇ ÀúÀå¼Ò(repository)¿Í °°Àº Á¤µµ °¢°¢ÀÌ µð½ºÅ©¸¦ ¸Ô´Â´Ù°í ÇÏ´Â °ÍÀÔ´Ï´Ù. ÀúÀå¼Ò(repository) ´ýÇÁ Çü½ÄÀ» »ç¿ëÇÑ Â÷µî ¹é¾÷Àº µ¥ÀÌŸº£À̽º schema ÇÏÁö¸¸ °è¼ÓÇÏ´Â Subversion ÀÚ½ÅÀÇ ¹öÀü°£¿¡ º¯°æµÉ ¶§¿¡´Â ¸Å¿ì µµ¿òÀÌ µË´Ï´Ù. ÀúÀå¼Ò(repository)ÀÇ Ç® ´ýÇÁ¿Í ·Îµå´Â ÀϹÝÀûÀ¸·Î ÀúÀå¼Ò(repository)¸¦ »õ·Î¿î schema¿¡ ¾÷±×·¹À̵å ÇÏ´Â °ÍÀÌ ÇÊ¿äÇÕ´Ï´Ù. ±×·¯ÇÑ ÀÛ¾÷ÀÇ ¹Ý(Áï ´ýÇÁÀÇ ºÎºÐ)¿¡ ´ëÇؼ´Â ¹ú½á ³¡³ª°í ÀÖÀ¸¹Ç·Î ¸Å¿ì Æí¸®ÇÕ´Ï´Ù. ºÒÇàÇÏ°Ôµµ Â÷µî ¹é¾÷ÀÇ ÀÛ¼º±×¸®°í ±× restore´Â ±ä ½Ã°£ÀÌ °É¸³´Ï´Ù¸¸ ±×°ÍÀº °¢°¢ÀÇ Ä¿¹ÔÀÌ ´ýÇÁ ÆÄÀÏ ¶Ç´Â ÀúÀå¼Ò(repository)ÀÇ ¾ÈÀ¸·Î ½ÇÁ¦·Î Àç½ÇÇàµÇ±â ¶§¹®ÀÔ´Ï´Ù. ¾î´À ÂÊÀÇ ¹é¾÷ÀÇ °æ¿ìµµ ÀúÀå¼Ò(repository) °ü¸®ÀÚ´Â ¾î¶»°Ô ÇØ ¹öÀüÈ µÇÁö ¾Ê´Â ¼Ó¼º¿¡ÀÇ º¯°æÀÌ ¹é¾÷¿¡ ¿µÇâÀ» Áٱ ÁÖÀÇÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ º¯°æÀº »õ·Î¿î ¸®ºñÀüÀ» ±× ÀÚü·Î ¸¸µé¾î ³»´Â °ÍÀº ¾Æ´Ï±â ¶§¹®¿¡ post-commit ÈÅÀ» È£ÃâÇÏ´Â °è±â ¿¡´Â ¾ÈµÇ¾î pre-revprop-chage À̳ª post-revprop-change ÈÅÀÇ °è±â ¿¡Á¶Â÷ µÇÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù. [4] ±×¸®°í ½Ã°£ÀÇ ¼ø¼¿¡ µû¸£Áö ¸»°í ¸®ºñÀü ¼Ó¼ºÀ» º¯°æÇÒ ¼ö°¡ ÀÖ´Ù ¾ðÁ¦¶óµµ ¾î´À ¸®ºñÀü ¼Ó¼ºÀ» º¯°æÇÒ ¼ö°¡ ÀÖ´Â ÀÇ·Î ¸¶Áö¸· ¸î°³ÀÇ ¸®ºñÀüÀÇ Â÷µî ¹é¾÷Àº ±× ÀÌÀüÀÇ ¹é¾÷ÀÇ ÀϺημ ÇàÇØÁø ¸®ºñÀü ¼Ó¼ºÀÇ ¼öÁ¤Àº °ÅµÎ¾î µéÀδ٠ÀÏÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÚÁÖ ÀúÀå¼Ò(repository)ÀÇ ¹é¾÷¿¡ ´ëÇÑ ÃÖ¼±ÀÇ ¹æ¹ýÀº ºÐ»ê ½ÃÅ°´Â °ÍÀÔ´Ï´Ù. Ç®¹é ¾÷°ú Â÷µî ¹é¾÷¿¡ Ä¿¹Ô emailÀÇ ¾îÄ«À̺ê(archive)¸¦ Ãß°¡ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î Subversion °³¹ßÀÚ´Â Subversion ¿ø½Ã ÄÚµå ÀúÀå¼Ò(repository)¸¦ »õ·Î¿î ¸®ºñÀü ÇÏÁö¸¸ ¸¸µé¾îÁú ¶§¸¶´Ù ¹é¾÷ ÇÕ´Ï´Ù. ±×¸®°í ¸ðµç Ä¿¹Ô°ú ¼Ó¼º º¯°æÀÇ ÅëÁö email¸¦ ¾îÄ«À̺ê(archive) ÇØ ÃëÇØ µÓ´Ï´Ù. °°Àº ¹æ¹ýÀ» ÃëÇØ ÁÖ¼¼¿ä. ´Ù¸¸, ÇÊ¿äÇÑ ¹üÀ§¿¡¼ Æí¸®ÇÔ°ú ¾ÈÀü¼ºÀÇ ¹Ì¹¦ÇÑ Àå¹Ì ½º¸¦ ÃëÇØ ÁÖ¼¼¿ä. ±×¸®°í ÀÌ·¯ÇÑ ÀÏÀ» ÀüºÎ Çصµ ¿î¸í ÀÇ Ã¶±ÇÀ¸·ÎºÎÅÍ Çϵå¿þ¾î¸¦ Áöų ¼ö ¾ø´Â °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä. [5] ¹é¾÷Àº È®½ÇÈ÷ ±×·¯ÇÑ ½Ã·Ã¶§ºÎÅÍ ´ç½ÅÀ» ±¸ÇÒ °ÍÀÔ´Ï´Ù. 1.4. ÀúÀå¼Ò(repository)ÀÇ ³×Æ®¿öÅ©ÈSubversion ÀúÀå¼Ò(repository)´Â ÀúÀå¼Ò(repository)°¡ ÀÖ´Â ¸Ó½Å»ó¿¡¼ ½ÇÇàµÇ°í Àִ Ŭ¶óÀ̾ðÆ® (À¸)·ÎºÎÅÍ ¾×¼¼½º ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ±×·¯³ª, ÀüÇüÀûÀÎ SubversionÀÇ ¼³Á¤Àº ¾î´À ÇϳªÀÇ ¼¹ö¸Ó½Å¿¡ ´ëÇؼ ¿ÀÇǽº Àüü¿¡ ÀÖ´Â ÄÄÇ»ÅÍ»óÀÇ Å¬¶óÀ̾ðÆ®·ÎºÎÅÍ ¾×¼¼½º µÈ´Ù°í ÇÏ´Â °ÍÀÔ´Ï´ÙȤÀº Àü¼¼°è·ÎºÎÅÍ. ÀÌ ¸¶µð¿¡¼´Â ¹ÛÀÇ ¼¼°è¿¡ ¿·Á ÀÖ´Â Subversion ÀúÀå¼Ò(repository)¸¦ ¸®¸ðÆ® Ŭ¶óÀ̾ðÆ®·ÎºÎÅÍ ÀÌ¿ëµÇ´Â È£½ºÆ® ¸Ó½Å¿¡ ¾î¶»°Ô ÇØ Áþ´Â°¡ ÇÑ´Ù ÀÏ¿¡ ´ëÇØ ¼³¸íÇÕ´Ï´Ù. Çö½ÃÁ¡¿¡¼ÀÇ Subversion·Î ÀÌ¿ëÇÒ ¼ö ÀÖ´Â ¼¹öÀÇ ±¸Á¶¸¦ ¼³¸íÇØ ¼³Á¤°ú ±× »ç¿ë¹ýÀ» ³íÀÇÇÕ´Ï´Ù. ÀÌ ¸¶µð¸¦ ÀÐÀº ´ÙÀ½¿¡´Â ÀÚ½ÅÀÇ ¿ä±¸¸¦ ä¿ì±â À§Çؼ(¶§¹®¿¡)´Â ¾î¶»°Ô ³×Æ®¿öÅ©¸¦ ¼³Á¤Çϸé ÁÁÀº°¡ (À»)¸¦ ÆÇ´ÜÇÒ ¼ö°¡ ÀÖ¾î ´ç½ÅÀÇ È£½ºÆ® ¸Ó½Å»ó¿¡¼´Â ¾î¶»°Ô ±× ¼³Á¤À» Çϸé ÁÁÀº°¡¸¦ ÀÌÇØÇÒ ¼ö ÀÖ´Ù°í »ý°¢ÇÕ´Ï´Ù. 1.4.1. httpd Apache HTTP ¼¹öSubversionÀÇ ÁÖµÈ ³×Æ®¿öÅ© ¼¹ö´Â WebDAV/deltaV ÇÁ·ÎÅäÄÝ·Î Åë½ÅÇÑ´Ù ÀÏÀ» ÇÒ ¼ö ÀÖ´Â Apache HTTP ¼¹öÀÔ´Ï´Ù(httpd). ÀÌ ÇÁ·ÎÅäÄÝÀº(HTTP 1.1ÀÇ È®ÀåÀÔ´Ï´Ù¸¸ http://www.webdav.org/ÂüÁ¶) World Wide Web ÀÇ ÇÙ½ÉÀÌ µÇ´Â ÈçÈ÷ ÀÖ´ø HTTP ÇÁ·ÎÅäÄÝÀ» ÇÊ¿ä·Î ÇØ °Ô´Ù°¡ ±Û±â´ÉƯ¼öÇÑ ¹öÀüÈ µÈ ±Û±â´É¸¦ Ãß°¡ ÇÑ °ÍÀÔ´Ï´Ù. ±× °á°ú´Â Ç¥ÁØÈ µÈ °ß·ÚÇÑ ½Ã½ºÅÛÀ̸ç Apache2. 0 ÀÇ ÀϺημ ÆÐÅ°Áöȵǰí ÀÖ½À´Ï´Ù. ÀÌ°ÍÀº ¸¹Àº À¯¸íÇÑ ¿ÀÆÛ·¹ÀÌÆÃ(operating) ½Ã½ºÅÛÀ̳ª ¼µå ÆÄƼ Á¦Ç°ÀÇ ÀϺημ ¼Æ÷Æ®µÇ°í ÀÖ½À´Ï´Ù. µÇ¾î¿¡ ±×°ÍÀº Ưº°ÇÑ °ü¸®ÀÚ¸¦ ÇÊ¿ä·Î ÇÏÁö ¾Ê½À´Ï´Ù. [6] ÀÌÇÏÀÇ ³íÀÇ´Â Apache ¼³Á¤ÀÇ ·¹ÆÛ·±½ºµµ Æ÷ÇÔÇÏ°í ÀÖ½À´Ï´Ù. ¸î°³ÀÇ ¿¹´Â ±×·¯ÇÑ ÀνºÆ®·°¼ÇÀÇ »ç¿ë¹ýÀÔ´Ï´Ù¸¸ ¿ÏÀüÇÑ »ç¿ë¹ýÀº ÀÌ ÀåÀÇ ¹üÀ§¸¦ ³Ñ°í ÀÖ½À´Ï´Ù. Apache ÆÀÀº ¸Å¿ì ¿ì¼öÇÑ ¹®¼¸¦ °ü¸®ÇÏ°í ÀÖ¾î ±×µéÀÇ À¥ »çÀÌÆ® ±×¸®°í °ø°³ÇÏ°í ÀÖ½À´Ï´Ù. ±×°ÍÀº http://httpd.apache.orgÀÔ´Ï´Ù. ¿¹¸¦ µé¾î ¼³Á¤¿¡ °üÇÑ ÀϹÝÀûÀÎ ·¹ÆÛ·±½º´Â http://httpd.apache.org/docs-2. 0/mod/directives.html. °Ô´Ù°¡ ApacheÀÇ ¼³Á¤À» º¯°æÇÏ´Â °æ¿ì µµÁß¿¡ À߸øÇÏ´Â Àϵµ ÀÖ½À´Ï´Ù. Apache ÀÇ ·Î±× ÇϺÎÁ¶Á÷¿¡ ÀÚ¼¼ÇÏÁö ¾Ê´Ù¸é °Å±â¿¡ Á¶½ÉÇØ ÁÖ¼¼¿ä. httpd.confÆÄÀÏ¿¡´Â Apache °¡ »ý¼ºÇÏ´Â ¾×¼¼½º ·Î±×¿Í ¿¡·¯ ·Î±×ÀÇ µð½ºÅ©»óÀÇ Àå¼Ò¸¦ ÁöÁ¤ÇÏ´Â ÀνºÆ®·°¼ÇÀÌ ÀÖ½À´Ï´Ù. (°¢°¢CustomLog ¿Í ErrorLog ÀνºÆ®·°¼ÇÀÌ µË´Ï´Ù. ) SubversionÀÇ mod_dav_svn ´Â ApacheÀÇ ¿¡¶ó·Î±×ÀΟÆ佺µµ »ç¿ëÇÕ´Ï´Ù. °£´ÜÇÏ°Ô´Â ¸ð¸£´Â °Í °°Àº ¹®Á¦¸¦ ºÐ¸íÈ÷ ÇÏ·Á¸é Á¤º¸¿ø (À¸)·Î¼ ±×·¯ÇÑ ÆÄÀÏÀÇ ³»¿ëÀ» ¾ðÁ¦¶óµµ º¼ ¼ö°¡ ÀÖ½À´Ï´Ù. 1.4.1.1. HTTP º£À̽ºÀÇ ÀúÀå¼Ò(repository) ¾×¼¼½º·Î ÇÊ¿äÇÑ ÀÏÀúÀå¼Ò(repository)¸¦ HTTP ³Ñ¾î·Î ³×Æ®¿öÅ©ÈÇÏ´Â °æ¿ì ±âº»ÀûÀ¸·Î´Â µÎ ÆÐÅ°Áö¿¡ ÀÖ´Â ³× °³ÀÇ ºÎÇ°ÀÌ ÇÊ¿äÇÏ°Ô µË´Ï´Ù. Apache httpd 2.0 ±×°Í°ú ÇÔ²² ¹èÆ÷µÇ´Â mod_dav DAV ¸ðµâ, Subversion º»Ã¼, ±×¸®°í, Subversion¿Í ÇÔ²² ¹èÆ÷µÇ´Â mod_dav_svnÆÄÀÏ ½Ã½ºÅÛ Á¦°ø ¸ðµâÀÔ´Ï´Ù. ÀÌ·¯ÇÑ ºÎÇ°À» ¸ðµÎ ¼Õ¿¡ ³ÖÀ¸¸é ÀúÀå¼Ò(repository)ÀÇ ³×Æ®¿öÅ©È´Â ÀÌÇÏ¿Í °°ÀÌ °£´ÜÇÏ°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù:
ÃÖÃÊÀÇ µÎ °³ÀÇ ÀÛ¾÷Àº httpd ¿Í SubversionÀ» ¿ø½Ã ÄÚµå·ÎºÎÅÍ ÄÄÆÄÀÏ ÇÏ´ÂÁö ¹ú½á ½Ã½ºÅÛ¿¡ ÀνºÅç µÇ°í ÀÖ´Â ¹ÙÀ̳ʸ® ÆÐÅ°Áö¸¦ »ç¿ëÇϸé ÇÒ ¼ö ÀÖ½À´Ï´Ù. Subverion¸¦ Apache HTTP ¼¹ö¿Í ÇÔ²² ÀÌ¿ëÇϱâ À§Çؼ ¾î¶»°Ô ÄÄÆÄÀÏ Çұ ºÙÀº ÃÖ½ÅÀÇ Á¤º¸¿Í ÀÌ ¸ñÀûÀ» À§Çؼ(¶§¹®¿¡) Apache ÀÚ½ÅÀ» ¾î¶»°Ô ¼³Á¤Çϸé ÁÁÀº °Íó·³ ºÙ¾î Subversion ¿ø½Ã ÄÚµå Æ®¸®ÀÇINSTALL ÆÄÀÏÀ» ºÁ ÁÖ¼¼¿ä. 1.4.1.2. ±âº»ÀûÀÎ ApacheÀÇ ¼³Á¤½Ã½ºÅÛ¿¡ ÇÊ¿äÇÑ ºÎÇ°À» ¸ðµÎ ÀνºÅç ÇÏ¸é ³ª¸ÓÁö´Â Apache ÀÇ ¼³Á¤À»httpd.conf ·Î ÇÒ »ÓÀÔ´Ï´Ù. mod_dav_svn ¸ðµâÀ» ·ÎµåÇϵµ·Ï(µíÀÌ) Apache¿¡ Áö½ÃÇÏ·Á¸é LoadModule ÀνºÆ®·°¼ÇÀ» »ç¿ëÇÕ´Ï´Ù. ÀÌ ÀνºÆ®·°¼ÇÀº ´Ù¸¥ Subversion °ü·ÃÀÇ ¼³Á¤¿¡ ¾Õ¼ ÁöÁ¤ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ¸¸¾à Apache°¡ µðÆúÆ® ¼³Á¤À¸·Î ÀνºÅç µÇ°í ÀÖ´Ù °æ¿ì mod_dav_svn ¸ðµâÀº Apache ÀνºÅç µð·ºÅ丮(´ëºÎºÐ /usr/local/apache2 (¿Í)°ú °°Àº Àå¼ÒÀÔ´Ï´Ù)ÀÇ modules¼ºê µð·ºÅ丮¿¡ ÀνºÅç µÇ°í ÀÖÀ» °ÍÀÔ´Ï´Ù. LoadModule ÀνºÆ®·°¼ÇÀº ´Ü¼øÇÑ ±¸¹®À» °®°í À̸§ÀÌ ºÙÀº ¸ðµâÀ» µð½ºÅ©ÁßÀÇ °øÀ¯ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®ÀÇ Àå¼Ò¿¡ ¿¬°á½Ãŵ´Ï´Ù:
¸¸¾àmod_dav °¡ °øÀ¯ ¿ÀºêÁ§Æ®·Î¼ ÄÄÆÄÀÏ µÇ°í ÀÖ´Ù¸é (httpd ¹ÙÀ̳ʸ® ¿¡ Á÷Á¢ Á¤ÀûÀ¸·Î ¸µÅ© µÇ°í ÀÖ´Â °ÍÀÌ ¾Æ´Ï¶ó) °°Àº LoadModule °¡ ±× ¶§¹®¿¡(À§ÇØ) ¿ª½Ã ÇÊ¿äÇÕ´Ï´Ù. ÀÌ°ÍÀ¸·Î ¼³Á¤ ÆÄÀÏÀÇ µÚ ÂÊ¿¡ Apache ¿¡ ´ëÇØ SubversionÀÇ ÀúÀå¼Ò(repository)°¡ ¾îµð¿¡ ÀÖ´ÂÁö¸¦ ÁöÁ¤ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. Location ÀνºÆ®·°¼ÇÀº XMLdzÀÇ ±¸¹®À» °®°í ÀÖ¾î °³½Ã ű׷Π½ÃÀ۵Ǿî Á¾·á ű׷Π³¡³³´Ï´Ù. ÀÌÀü¿¡ ´Ù¾çÇÑ ¼³Á¤ ÀνºÆ®·°¼ÇÀ» µÓ´Ï´Ù. LocationÀνºÆ®·°¼ÇÀÇ ¸ñÀûÀº Apache °¡ ±× ÁßÀÇ ¾î´ÀÀΰ¡ÀÇ URL¿¡ ´ëÇÏ´Â °ÍÀÎ °æ¿ì¿¡´Â Ưº°ÇÑ Ã³¸®¸¦ Çϵµ·Ï(µíÀÌ) ÁöÁ¤ÇÏ´Â °ÍÀÔ´Ï´Ù. SubversionÀÇ °æ¿ì Apache¿¡ DAV ÃþÀÇ ¹öÀüÈ µÈ ¸®¼Ò½º¿¡ ´ëÇؼ´Â URL¸¦ ´ÜÁö °Ç³×ÁÖµµ·Ï(µíÀÌ) ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ¾ÆÆÄÄ¡¿¡ /repos/ ±×¸®°í ½ÃÀ۵Ǵ Æнº¸¦ °¡Áö´Â ¸ðµç URL¿¡ ´ëÇؼ /absolute/path/to/repository ÀÇ Àå¼Ò¿¡ ÀúÀå¼Ò(repository)¸¦ °¡Áø DAV ÇÁ·Î¹ÙÀÌ´õ¿¡ Á¦¾î¸¦ °Ç³×ÁÖµµ·Ï(µíÀÌ) ¼³Á¤ÇÑ´Ù ÀÏÀÌ »ý±é´Ï´Ù. °Å±â¿¡´Â ´ÙÀ½°ú °°Àº httpd.conf ±¸¹®À» »ç¿ëÇÕ´Ï´Ù:
¸¸¾à º¹¼öÀÇ Subversion ÀúÀå¼Ò(repository)¸¦ ¼Æ÷Æ®ÇÏ·Á°í ÇÏ°í ÀÖ¾î ±×°ÍÀÌ ·ÎÄà µð½ºÅ©»óÀÇ °°Àº Ä£µð·ºÅ丮¸¦ °¡Áö´Â °æ¿ì ´Ù¸¥ ÀνºÆ®·°¼ÇÀ» »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ±×°ÍÀºSVNParentPath ÀνºÆ®·°¼ÇÀ¸·Î °øÅëÀÇ Ä£µð·ºÅ丮¸¦ ÁöÁ¤ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î ¸¸¾à º¹¼öÀÇ Subversion ÀúÀå¼Ò(repository)¸¦/usr/local/svn µð·ºÅ丮¿¡ ¸¸µé¾îhttp://my.server.com/svn/repos1¶óµçÁö http://my.server.com/svn/repos2¶óµçÁö ¸»ÇÏ´Â °Í °°Àº URL·Î ¾×¼¼½º ÇÏ°í ½ÍÀº °æ¿ì ÀÌÇÏÀÇ ¿¹ÀÇ °°Àº httpd.conf¼³Á¤ ±¸¹®À» »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù:
ÀÌ ±¸¹®À» »ç¿ëÇϸé Apache ´Â Æнº ºÎºÐÀÌ/svn/ ·Î ½ÃÀ۵Ǵ ¸ðµç URL¸¦ SubversionÀÇ DAV ÇÁ·Î¹ÙÀÌ´õ¿¡ °Ç³Ü´Ï´Ù. ÀÌ ¶§ SVNParentPath ÀνºÆ®·°¼ÇÀ¸·Î ÁöÁ¤ÇÑ µð·ºÅ丮 ¾ÈÀÇ ¾ÆÀÌÅÛÀº ½ÇÁ¦ÀÇ Subversion ÀúÀå¼Ò(repository)ÀÌ´Ù°í Çؼ®µË´Ï´Ù. ÀÌ°ÍÀº ¸Å¿ì Æí¸®ÇÑ ±¸¹®ÀÔ´Ï´Ù. ±×°ÍÀº SVNPath ÀνºÆ®·°¼Ç°ú´Â ´Þ¶ó »õ·Î¿î ÀúÀå¼Ò(repository)¸¦ ¸¸µå´Âµ¥ Apache¸¦ Àç±âµ¿ÇÑ´Ù ÇÊ¿ä°¡ ¾ø±â ¶§¹®ÀÔ´Ï´Ù. 1.4.1.3. Æ۹̼Ç, ÀÎÁõ, Çã°¡¿©±â¼ Æ۹̼ǿ¡ ´ëÇÑ °ÇÑ Àǹ®ÀÌ ÀϾ´Ï´Ù. Apache¸¦ ½ÇÇàÇÑ °æÇèÀÌ ÀÖ´Ù¸é ¹ú½á ´ç½ÅÀº ¿©·¯°¡Áö ÄÁÅÙÃ÷¸¦ °¡Áö°í ÀÖ´Ù°í »ý°¢ÇÕ´Ï´ÙÀ¥ÆäÀÌÁö, ½ºÅ©¸³Æ®, ±× ¿Ü ¿©·¯°¡Áö ÀÔ´Ï´Ù. ÀÌ·¯ÇÑ ¾ÆÀÌÅÛÀº ¹ú½á Apache ºÎÇÏ·Î µ¿ÀÛÇϱâ À§ÇÑ È¤Àº Á» ´õ Á¤È®ÇÏ°Ô´Â ¾ÆÆÄÄ¡°¡ ±×·¯ÇÑ ÆÄÀÏ°ú ÇÔ²² µ¿ÀÛÇϱâ À§ÇØ(¶§¹®¿¡) ÀÇ Æ۹̼ÇÀÌ ¼³Á¤µÇ¾î ÀÖ½À´Ï´Ù. Apache°¡ Subversion ¼¹ö·Î¼ ÀÌ¿ëµÇ´Â °æ¿ì Subversion ÀúÀå¼Ò(repository)¿¡ ´ëÇÑ ÀÐ°í ¾²±âÀÇ Æ۹̼ǵµ ¼³Á¤ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ¹ú½á ÀÖ´Â ´Ù¸¥ À¥ÆäÀÌÁö³ª ½ºÅ©¸³Æ®ÀÇ ¼³Á¤À» ºÎ¼öÁö ¾Ê°í Subversion ÀúÀå¼Ò(repository)¿¡ ´ëÇÑ Æ۹̼ÇÀÇ ½Ã½ºÅÛ ¼³Á¤À» ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ÀÌ°ÍÀº Subversion ÀúÀå¼Ò(repository)ÀÇ Æ۹̼ÇÀÇ º¯°æÀº Apache°¡ Á¦°ø ÇÏ°í ÀÖ´Â ´Ù¸¥ °Í°ú Àß ¼º³É Çϵµ·Ï(µíÀÌ) ÇÏÁö ¾ÊÀ¸¸é ¾È µÇ´Â ȤÀº httpd.conf ÁßÀÇ User ¿Í GroupÀνºÆ®·°¼ÇÀ¸·Î Apache°¡ Subversion ÀúÀå¼Ò(repository)ÀÇ ¼ÒÀ¯ÀÚÀÎ °Í °°Àº À¯Àú/±×·ì¿¡¼ ½ÇÇàÇØ¾ß ÇÑ´Ù¶ó°í ¸»ÇÏ´Â °ÍÀÔ´Ï´Ù. Æ۹̼ÇÀ» ¼³Á¤ÇÏ´Â À¯ÀÏÇÑ ¿Ã¹Ù¸£´Ù »ç¿ë ¹æ¹ýÀ̶ó°í ÇÑ °ÍÀº ¾Ê°í °ü¸®ÀÚ´Â ¾î´À ƯÁ¤ÀÇ ¹æ½ÄÀ» ÃëÇÑ´Ù °¢°¢ÀÇ ÀÌÀ¯°¡ ÀÖÀ» °ÍÀÔ´Ï´Ù. ¸»ÇÏ°í ½ÍÀº °ÍÀº Æ۹̼ǿ¡ °ü·ÃÇÑ ¹®Á¦´Â ¾Æ¸¶ Subversion ÀúÀå¼Ò(repository)¸¦ Apache·Î »ç¿ëÇϴµ¥ ÀÖ¾î¼ 1¹ø Àß °£°úÇØ ¹ö¸®´Â ºÎºÐÀ̶ó°í ÇÏ´Â °ÍÀÔ´Ï´Ù. ±×¸®°í Æ۹̼ǿ¡ ´ëÇØ ¸»ÇÏ´Â ÇÑÆíÀ¸·Î ¾î¶»°Ô Çϸé(ÀÚ) Apache°¡ Á¦°øÇÏ´Â ÀÎÁõ°ú Çã°¡ÀÇ ±¸Á¶¸¦ À̹ø ¹®Á¦¿¡ Àß Àû¿ë½ÃÅ°´Â °ÍÀÌ ÇÒ ¼ö Àִ°¡ ÇÏ´Â Àϵµ äÅÃÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ÀÌ°Í¿¡ ´ëÇØ ¹«¾ùÀΰ¡ ½Ã½ºÅÛ ÀüüÀÇ ¼³Á¤À» ÇÏÁö ¾ÊÀ¸¸é Location ÀνºÆ®·°¼ÇÀ» ÅëÇؼ ÀÌ¿ëÇÒ ¼ö°¡ ÀÖ´Ù Subversion ÀúÀå¼Ò(repository)´Â ´©±¸·ÎºÎÅ͵µ ¾×¼¼½º ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ¹Ù²Ù¾î ¸»Çϸé
¸¸¾à Àü¹ÝÀûÀ¸·Î Àоîµé¿© ȤÀº ±âÀÔÇØ ¾×¼¼½ºÀÇ Á¦ÇÑÀ» ÀúÀå¼Ò(repository)¿¡ °ÉÄ¡°í ½ÍÀº °æ¿ì ApacheÀÇ ÆíÀÔ ¾×¼¼½º Á¦¾î ±â´ÉÀ» »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ±×·¯ÇÑ °ÍÀ¸·Î 1¹ø °£´ÜÇÑ ±â´ÉÀº º£ÀÌÁ÷ ÀÎÁõ ±â±¸·Î ±× »ç¶÷ÀÌ ±× »ç¶÷ ÀÚ½ÅÀÎ °ÍÀ» È®ÀÎÇϱâ À§Çؼ À¯Àú¸íÀ¸·Î Æнº¿öµå¸¦ »ç¿ëÇÕ´Ï´Ù. Apache¿¡´Âhtpasswd À¯Æ¿¸®Æ¼°¡ ÀÖ¾î ¾×¼¼½º ÇÒ ¼ö ÀÖ´Â À¯Àú¿Í Æнº¿öµåÀÇ ¸®½ºÆ®¸¦ °ü¸®ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. Subversion ÀúÀå¼Ò(repository)¿¡ Ưº°ÇÑ ¾×¼¼½º ¼³Á¤À» ÇÏ°í ½ÍÀ» ¶§¿¡µµ ÀÌ°ÍÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. Sally¿Í Harry¿¡ Ä¿¹Ô ±ÇÇÑÀ» ÁÖ¾î º¾½Ã´Ù. ¿ì¼± Æнº¿öµå ÆÄÀÏ ¿¡ µÎ ¸íÀ» Ãß°¡ÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.
´ÙÀ½¿¡ Location ºí·ÏÀÇ ¾ÈÂÊ¿¡ httpd.conf ÀνºÆ®·°¼ÇÀ» ¸î°³Àΰ¡ Ãß°¡ÇØ Apache¿¡ ÀÌ »õ·Î¿î Æнº¿öµå¸¦ »ç¿ëÇØ ÁÙ °ÍÀ» ÀüÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. AuthType ÀνºÆ®·°¼ÇÀº ¾î¶°ÇÑ Å¸ÀÔÀÇ Çã°¡ ¹æ¹ýÀ» »ç¿ëÇÏ´ÂÁö¸¦ ÁöÁ¤ÇÕ´Ï´Ù. À̹øÀº Basic ŸÀÔÀ» ÁöÁ¤ ÇÏ°í ½Í´Ù°í ÇÕ´Ï´Ù. AuthName ´Â Çã°¡ µµ¸ÞÀÎÀ» À§Çؼ(¶§¹®¿¡) ÀÓÀÇ¿¡°Ô ÁÖ´Â À̸§ÀÔ´Ï´Ù. ´ëºÎºÐÀÇ ºê¶ó¿ìÀú´Â À¯Àú¿¡°Ô À̸§°ú Æнº¿öµå¸¦ ¹®ÀÇÇÒ ¶§ ÀÌ À̸§À» pop-up ´ÙÀÌ¾Ë·Î±× ¹Ú½ºÁß¿¡ Ç¥½ÃÇÕ´Ï´Ù. ¸¶Áö¸·¿¡AuthUserFile ÀνºÆ®·°¼ÇÀ» »ç¿ëÇØ htpasswd·Î ¸¸µç Æнº¿öµå ÆÄÀÏÀÇ Àå¼Ò¸¦ ÁöÁ¤ÇÕ´Ï´Ù. ÀÌ ¼¼ °³ÀÇ ÀνºÆ®·°¼ÇÀ» Ãß°¡ÇÑ µÚ Location ºí·ÏÀº ¹«¾ùÀΰ¡ ÀÌÇÏ¿Í °°ÀÌ µÇ¾î ÀÖÀ» °ÍÀÔ´Ï´Ù:
ÀÌ ½ÃÁ¡¿¡¼ ¾ÆÆÄÄ¡¸¦ Àç±âµ¿Çϸé Çã°¡°¡ ÇÊ¿äµîÀÇ Subversion Á¶ÀÛµµ Subversion Ŭ¶óÀ̾ðÆ®·ÎºÎÅÍ À¯Àú¸íÀ¸·Î Æнº¿öµå¸¦ ¼öÁß¿¡ ³Ö´Â´Ù ÀÏÀÌ »ý±é´Ï´Ù. ±×°ÍÀº ÀÌÀü¿¡ ¼öÁß¿¡ ³ÖÀº °ªÀ» »ç¿ëÇصµ ±¦Âú°í À¯Àú ¿¡ ¹®ÀÇÇÏ´Â ÇüÅ¿¡¼µµ ±¦Âú½À´Ï´Ù. ±×¸®°í´Â Apache¿¡ ¾î´À Á¶ÀÛ¿¡ ´ëÇØ ½ÇÁ¦·Î Çã°¡ÀÇ ±¸Á¶¸¦ ÀÌ¿ëÇÏ´ÂÁö¸¦ ÁöÁ¤ÇØ ÁÙ »ÓÀÔ´Ï´Ù. Location ºí·Ï¿¡ Require valid-user ÀνºÆ®·°¼ÇÀ» Ãß°¡ÇØ ¸ðµç ÀúÀå¼Ò(repository) Á¶ÀÛ¿¡ Á¦ÇÑÀ» °É ¼ö°¡ ÀÖ½À´Ï´Ù. ÀüÀÇ ¿¹¿¡¼´Â harry ³ªsally°¡ ¿Ã¹Ù¸¥ Æнº¿öµå¸¦ ÀÔ·ÂÇßÀ» ¶§ ¸¸¿©¶ó Subversion ÀúÀå¼Ò(repository)ÀÇ ¸ðµç Á¶ÀÛÀ» Çã°¡ÇÑ´Ù°í ÇÏ´Â °ÍÀÌ µË´Ï´Ù. °¡²û °Å±â±îÁö ¾î·Á¿î Á¦ÇÑÀº ÇÊ¿ä¾ø´Â °ÍÀÌ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î http://svn.collab.net/repos/svn ¿¡ ÀÖ´Â ÀúÀå¼Ò(repository)¿¡´Â SubversionÀÇ ¿ø½Ã Äڵ尡 ÀÖ½À´Ï´Ù¸¸ ¿Â ¼¼»óÀÇ ´©±¸¶óµµ ÀÐÀ» º¸°íÀÇ ÀúÀå¼Ò(repository) Á¶ÀÛÀ» Çã°¡ÇÏ°í ÀÖ½À´Ï´Ù(ÀÛ¾÷ Ä«ÇÇÀÇ Ã¼Å©¾Æ¿ôÀ̳ª ºê¶ó¿ìÀú·Î ÀúÀå¼Ò(repository)¸¦ ¿¶÷Çϰųª µîÀÔ´Ï´Ù)°¡ ±âÀÔ ±ÇÇÑÀº Çã°¡µÈ À¯Àú ¹Û¿¡ ÁÖ°í ÀÖÁö ¾Ê½À´Ï´Ù. ÀÌ ¼ÕÀÇ ¼±ÅÃÀûÀÎ Á¦ÇÑÀ» °ÉÄ¡·Á¸é Limit ¿Í LimitExcept¼³Á¤ ÀνºÆ®·°¼ÇÀ» »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. Location ÀνºÆ®·°¼Ç°ú °°ÀÌ ÀÌ·¯ÇÑ ºí·ÏÀº °³½Ã¿Í Á¾·á ű׸¦ °®°í Location ºí·ÏÀÇ ¾ÈÂÊ¿¡ ³×½ºÆ® ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. Limit ¿Í LimitExcept ÀνºÆ®·°¼ÇÀ¸·Î ÁöÁ¤ÇÏ´Â ÆĶó¹ÌÅÍ´Â ±× ºí·ÏÀÎ ¸¸Å ¿µÇâÀ» ÁÖ´Â °Í °°Àº ŸÀÔÀÇ °ÍÀÔ´Ï´Ù. ¿¹¸¦ µé¾î ÇöÀç ¼Æ÷Æ®ÇÏ°í ÀÖ´Â Àбâ Á¶ÀÛ ÀÌ¿ÜÀÇ ÀúÀå¼Ò(repository) ¾×¼¼½º¸¦ ±ÝÁöÇÏ°í ½ÍÀº °æ¿ì LimitExcept ÀνºÆ®·°¼ÇÀ» »ç¿ëÇÒ ¼ö°¡ ÀÖ¾î ÀÌ °æ¿ì GET,PROPFIND,OPTIONS, ±×¸®°íREPORT ¸¦ ÆĶó¹ÌÅͷμ °Ç³×ÁÝ´Ï´Ù. ±×¸®°í Àü¿¡ ÁÖÀÇÇÑ Require valid-userÀνºÆ®·°¼ÇÀ» ´ÜÁöLocation ºí·ÏÀÇ ¾ÈÂÊ¿¡ µÎ´Â ´ë½Å¿¡ LimitExcept ºí·ÏÀÇ ¾ÈÂÊ¿¡ ÀÖ¾î ÁÝ´Ï´Ù.
ÀÌ·¯ÇÑ °ÍÀº ´Ü¼øÇÑ ¿¹¿¡ Áö³ªÁö ¾Ê½À´Ï´Ù. Apache ¾×¼¼½º Á¦¾î¿¡ ´ëÇÑ Á» ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â Apache ¹®¼ Æ©Å丮¾óÁý http://httpd.apache.org/docs-2. 0/misc/tutorials.html ÀÇSecurity ÀÇ ÀåÀ» ºÁ ÁÖ¼¼¿ä. 1.4.1.4. ¼¹ö ¸íĪ°ú COPY ¿ä±¸SubversionÀº ¼¹ö»óÀÇ ÆÄÀÏÀ̳ª µð·ºÅ丮ÀÇ Ä«ÇǸ¦ ½ÇÇàÇÑ´Ù ¿ä±¸ ŸÀÔÀ¸·Î¼COPY¸¦ »ç¿ëÇÕ´Ï´Ù. Apache ¸ðµâ ÀÇ Á¤ÇÕ¼º üũÀÇ ÀÏ°üÀ¸·Î¼ Ä«ÇÇ¿ø·¡´Â Ä«ÇÇó¿Í °°Àº ¸Ó½Å»ó¿¡ ¾î´À ¿ä±¸µË´Ï´Ù. ÀÌ ¿ä±¸¸¦ ä¿ì±â À§Çؼ(¶§¹®¿¡) mod_dav ¿¡ ¼¹öÀÇ È£½ºÆ® ¸íĪÀ¸·Î¼ ÀÌ¿ëÇÏ´Â À̸§À» °¡¸£Ä¥ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ÀÌ°Í¿¡´Â º¸Åë httpd.conf Áß(¾È)¿¡¼ ServerName ÀνºÆ®·°¼ÇÀ» »ç¿ëÇØ ÁÝ´Ï´Ù.
NameVirtualHost ¸¦ »ç¿ëÇÑ ApacheÀÇ °¡»ó È£½ºÆ® ¼Æ÷Æ®¸¦ »ç¿ëÇÏ°í ÀÖ´Â °æ¿ì ServerAlias ÀνºÆ®·°¼Ç ±×¸®°í ¼¹öÀÇ Ãß°¡ ¸íĪÀ» ÁöÁ¤ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ÀÌ°Í¿¡ ´ëÇؼµµ ÀÚ¼¼ÇÏ°Ô´Â ApacheÀÇ ¹®¼¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä. 1.4.1.5. ÀúÀå¼Ò(repository) HEADÀÇ ¿¶÷Subversion ÀúÀå¼Ò(repository)ÀÇ Apache/WebDAV ¼³Á¤ÀÇ ÀÌÁ¡ÀÇ Çϳª¿¡ ¹öÀü °ü¸®ÇÏ¿¡ ÀÖ´Â ÆÄÀÏÀ̳ª µð·ºÅ丮ÀÇ ÃֽŠ¸®ºñÀü ÇÏÁö¸¸ º¸Åë À¥ ºê¶ó¿ìÀú·ÎºÎÅÍ Á÷Á¢ ÂüÁ¶ °¡´ÉÇÏ´Ù°í ÇÏ´Â °ÍÀÔ´Ï´Ù. SubversionÀº ¹öÀüÈ µÈ ¸®¼Ò½ºÀÇ Æ¯Á¤¿¡ URL¸¦ »ç¿ëÇϹǷΠHTTP º£À̽ºÀÇ ÀúÀå¼Ò(repository) ¾×¼¼½º¿¡ »ç¿ëµÇ´Â URL´Â À¥ ºê¶ó¿ìÀú·Î Á÷Á¢ ÀÔ·Â ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ºê¶ó¿ìÀú´Â URLÀÇGET ¿ä±¸¸¦ º¸³» ±× URL°¡ ¾î´À ¹öÀü µð·ºÅ丮³ª ÆÄÀÏÀϱ ÀÇ°ÅÇØ mod_dav_svn´Â µð·ºÅ丮 À϶÷À̳ª ÆÄÀÏ ³»¿ëÀ» µ¹·ÁÁÝ´Ï´Ù. URL´Â º¸°í ½Í´Ù°í »ý°¢ÇÏ´Â ¸®¼Ò½ºÀÇ ¹öÀü¿¡ ´ëÇÑ Á¤º¸´Â ±»ÀÌ Æ÷ÇÔÇØ ¾ø±â ¶§¹®¿¡ mod_dav_svn´Â Ç×»ó ÃÖ½ÅÀÇ ¹öÀüÀ» Ç¥½ÃÇÕ´Ï´Ù. ÀÌ°ÍÀº ±â´ÉÀûÀ¸·Î ºÁ ÈǸ¢ÇÑ ºÎÂ÷ÀûÀÎ È¿°ú°¡ ÀÖ¾î ±×°ÍÀº µ¿·á¿¡°Ô ¹®¼ ÀÇ ÂüÁ¶·Î¼ ÁöÁ¤ÇÒ ¼ö°¡ ÀÖ´Â °ÍÀ¸·Î ±× URL´Â Ç×»ó ¹®¼ÀÇ ÃÖ½ÅÀ» °¡¸®Å°°í ÀÖ½À´Ï´Ù. ¹°·Ð ´Ù¸¥ À¥ »çÀÌÆ®·ÎºÎÅÍÀÇ ÇÏÀÌÆÛ ¸µÅ© (À¸)·Î¼ ±× URL¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ¹öÀü °ü¸®ÇÏ¿¡ ÀÖ´Â ÆÄÀÏÀÇ URL·ÎºÎÅ͵µ ¿Í ¿©·¯°¡Áö Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù°á±¹ °Å±â°¡ Èï¹Ì·Î¿î Á¤º¸°¡ ÀÖÀ» °Í °°Àº Àå¼ÒÀÔ´Ï´Ù. ±×·¸Áö¸¸, SubversionÀÇ µð·ºÅ丮 À϶÷À» ÂüÁ¶ÇÒ ±âȸ°¡ ÀÖÀ»Áöµµ ¸ð¸¨´Ï´Ù. °Å±â¼ÀÇ Ç¥½Ã¿¡ »ç¿ëµÇ´Â ÀÚµ¿ »ý¼ºµÈ HTML (Àº)´Â ¸Å¿ì ±âº»ÀûÀ¸·Î ¹ÌÀǽÄÀ» ¸¸Á·½ÃÅ°´Â °Í °°Àº °ÍÀº ¾Æ´Ï´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖÀ¸¸é(ÀÚ) »ý°¢ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ µð·ºÅ丮 Ç¥½Ã¸¦ Ä¿½ºÅ͸¶ÀÌÁî Çϱâ À§Çؼ Subversion (Àº)´Â XML À妽º ±â´ÉÀ» ÁغñÇØ ÀÖ½À´Ï´Ù. httpd.conf ÀÇ ÀúÀå¼Ò(repository)¿ëLocation ºí·Ï¿¡ ÀÖ´Ù ÇϳªÀÇSVNIndexXSLT ÀνºÆ®·°¼ÇÀº mod_dav_svn¿¡ µð·ºÅ丮 ¸®½ºÆ®¸¦ Ç¥½ÃÇÒ °æ¿ì¿¡ XML Ãâ·ÂÀ» »ý¼ºÇØ ±× ¶§ ÁöÁ¤Çß´Ù XSLT ½ºÅ¸ÀÏ ½ÃÆ®¸¦ ÂüÁ¶Çϵµ·Ï(µíÀÌ) ¼³Á¤ÇÕ´Ï´Ù:
SVNIndexXSLT ÀνºÆ®·°¼Ç°ú Àß ÇÒ ¼ö ÀÖ´ø XSLT ½ºÅ¸ÀÏ ½ÃÆ®¸¦ »ç¿ëÇØ µð·ºÅ丮 Ç¥½Ã¿¡ À¥ »çÀÌÆ®³»ÀÇ ´Ù¸¥ Àå¼Ò¿¡ ÀÖ´Â Ä®¶ó ½ºÅ´À̳ª À̹ÌÁö¸¦ »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ȤÀº ¸¸¾à ¹Ù¶õ´Ù¸é SubversionÀÇ ¼Ò½º ÆÐÅ°ÁöÀÇtools/xslt/ ¿¡ ÁغñµÈ »ùÇà ½ºÅ¸ÀÏ ½ÃÆ®¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. SVNIndexXSLT ·Î ÁöÁ¤ÇÏ´Â Æнº´Â ½ÇÁ¦·Î´Â URL ÆнºÀÎ °Í¿¡ ÁÖÀÇÀÔ´Ï´Ù±× ½ºÅ¸ÀÏ ½ÃÆ®¸¦ »ç¿ëÇϱâ À§Çؼ ºê¶ó¿ìÀú°¡ ±×°ÍÀ» ÀоîµéÀÏ ¼ö ¾øÀ¸¸é ¾ÈµË´Ï´Ù! 1.4.1.6. ´Ù¾çÇÑ ApacheÀÇ ±â´É°ß·ÚÇÑ Web ¼¹ö·Î¼ÀÇ ¿ªÇÒÀ» ¿Ï¼öÇÒ ¼ö ÀÖµµ·Ï Apache¿¡´Â ¹Ì¸® ÁغñµÈ ´Ù¾çÇÑ ±â´ÉÀº Subversion¿¡ ´ëÇصµ ±â´ÉÀ̳ª ½ÃÅ¥·¯Æ¼¸¦ ´Ã¸®±â À§Çؼ(¶§¹®¿¡) »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. SubversionÀº Apache¿ÍÀÇ Åë½Å¿¡ Neon¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ°ÍÀº SSL(Secure socket layer)¿Í °°Àº ±¸Á¶¸¦ ¼Æ÷Æ®Çϱâ À§ÇÑ ÀϹÝÀûÀÎ HTTP/WebDAV ÇÁ·Î±×·¥ ¶óÀ̺귯¸®ÀÔ´Ï´Ù. (°°Àº ¾Ë°í¸®ÁòÀÌgzip ³ª PKZIP ·Î ÆÄÀÏÀ» Á» ´õ ÀÛÀº µ¥ÀÌÅÍÀÇ µ¢¾î¸®¿¡ "¾ÐÃà"Çϴµ¥ »ç¿ëµÇ°í ÀÖ½À´Ï´Ù) Subversion³ª Apache·Î ¹Ù¶ó´Â ±â´ÉÀ» »ç¿ëÇϴµ¥´Â ÄÄÆÄÀÏ ÇÏ°í ³ª¼ ±× ÇÁ·Î±×·¥ (À»)¸¦ ÀûÀýÈ÷ ¼³Á¤ÇÒ »ÓÀÔ´Ï´Ù. ÀÌ°ÍÀº SSL°¡ À¯È¿ÇÑ Subversion Ŭ¶óÀ̾ðÆ®´Â SSL°¡ À¯È¿ÇÏ°Ô µÇ¾ú´Ù Apache ¼¹ö¿¡ ¾×¼¼½º ÇØ ¸ðµç Åë½Å¿¡ ¾ÏÈ£ÈµÈ ÇÁ·ÎÅäÄÝ (À»)¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù°í ÇÏ´Â °ÍÀ¸·Î °Å±â¿¡´Â URLÀÇhttp: ÀÇ °ÍÀÎÁö ºñ±³Àûhttps: ¸¦ »ç¿ëÇÒ »ÓÀÔ´Ï´Ù. ±â¾÷ÀÇ ÆÄÀÌ¾î ¿ù(fire wall)ÀÇ ¿ÜºÎ·ÎºÎÅÍ ¾×¼¼½º µÇ´Â °ÍÀÌ ÀÖ´Â ÀúÀå¼Ò(repository) (À»)¸¦ °ø°³ÇÒ ÇÊ¿ä°¡ ÀÖ´Â ºñÁö´Ï½º´Â Çã°¡µÇ¾î ÀÖÁö ¾ÊÀº ¿ÜºÎÀÇ Àΰ£ÀÌ ³×Æ®¿öÅ© Æ®·¡ÇÈÀ»"µµÃ»" ÇÒ °¡´É¼ºÀ» ÀǽÄÇÏ°í ÀÖÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. SSL´Â ÀÌ·¯ÇÑ ¹Ù¶÷Á÷ÇÏÁö ¾Ê´Ù ¾×¼¼½º¿¡ Áß¿äÇÑ µ¥ÀÌÅÍ°¡ »ø °¡´É¼ºÀ» ÀÛ°Ô ÇÕ´Ï´Ù. Apache´Â SSL°¡ À¯È¿°¡ µÇ°í ÀÖ´Â Subversion Ŭ¶óÀ̾ðÆ®¸¸ÀÌ ÀúÀå¼Ò(repository)¿¡ ¾×¼¼½º ÇÒ ¼ö ÀÖµµ·Ï(µíÀÌ) ¼³Á¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ¾ÐÃàÀÇ Çص¿Àº Ŭ¶óÀ̾ðÆ®¿Í ¼¹ö¿¡ ´Ù¼ÒÀÇ ºÎÇϸ¦ °ÉĨ´Ï´Ù¸¸ ±×°ÍÀº ½ÇÁ¦ÀÇ µ¥ÀÌÅÍ Àü¼Û·®ÀÇ »çÀÌÁ ÃÖ¼Ò·Î Çϱâ À§Çؼ ¾ÐÃà°ú Çص¿ÀÌ ½ÇÇàµÇ±â ¶§¹®ÀÔ´Ï´Ù. ³×Æ®¿öÅ©ÀÇ ¹êµåÆøÀÌ Á¼À» ¶§·Î´Â ÀÌ·± Á¾·ùÀÇ ¾ÐÃàÀº ¼¹ö¿Í Ŭ¶óÀ̾ðÆ®ÀÇ »çÀÌ¿¡ ¼Û½ÅÇÏ´Â Åë½ÅÀÇ ½ºÇǵ带 ¸Å¿ì »¡¸® ÇÕ´Ï´Ù. ±Ø´ÜÀûÀÎ °æ¿ì ÀÌ ÃÖ¼ÒÈµÈ ³×Æ®¿öÅ© Àü¼ÛÀº Åë»óÀ̶ó¸é ŸÀÓ ¾Æ¿ô ÇØ ¹ö¸°´Ù °°Àº Àü¼ÛÀÌ ¿Ï·áÇÏ´Â Àϵµ ÀÖ½À´Ï´Ù. ±×¸¸Å Èï¹Ì´Â ²øÁö ¾Ê½À´Ï´Ù¸¸ °°Àº Á¤µµ µµ¿òÀÌ µÇ´Â °ÍÀº Apache¿Í SubversionÀÇ °ü·Ã¿¡ ´ëÇÑ ±â´ÉÀ¸·Î ¿¹¸¦ µé¾î Ä¿½ºÅÒ Æ÷ÅäÀÇ ÁöÁ¤(µðÆúÆ®¿¡¼´Â 80ÀÔ´Ï´Ù)À̳ª Subversion ÀúÀå¼Ò(repository)ÀÌ ¾×¼¼½º µÇ´Â ¸Ó½ÅÀÇ ¹öÃß¾ó µµ¸ÞÀθíĪÀ̳ª proxy °æÀ¯·Î ÀúÀå¼Ò(repository)¿¡ ¾×¼¼½º ÇÏ´Â ´É·Â µîÀÔ´Ï´Ù. À̰͵éÀº ¸ðµÎ Neon¿¡ ÀÇÇØ ÁغñµÇ¾î ÀÖÀ¸¹Ç·Î SubversionÀº ÀÚÀ¯·Ó°Ô ÀÌ¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. 1.4.2. svnserve, Ä¿½ºÅÒ Subversion ¼¹öApacheÀÇ ´ëü·Î¼ SubversionÀº ½ºÅĵå¾ó·ÐÀÇ ¼¹ö ÇÁ·Î±×·¥ svnserve µµ ÁغñÇØ ÀÖ½À´Ï´Ù. ÀÌ ÇÁ·Î±×·¥Àº Apacheº¸´Ù ÈξÀ °¡º±°Ô ¸¸µé¾îÁö°í ÀÖ¾î ¼³Á¤µµ ÈξÀ °£´ÜÇÕ´Ï´Ù. º¸Åë TCP/IPÁ¢¼ÓÀ» ÅëÇؼ Subversion Ŭ¶óÀ̾ðÆ®¿Í °íÀ¯ÀÇ ÇÁ·ÎÅäÄÝ ±×¸®°í À̾߱âÇÕ´Ï´Ù. svnserve°¡ ÀÌ¿ëÇÑ´Ù ÀÏÀ» ÇÒ ¼ö ÀÖ´Â µÎ °³ÀÇ ±âº»ÀûÀÎ ¹æ½ÄÀÌ ÀÖ½À´Ï´Ù:
ÀÌ µÎ °³ÀÇsvnserveÀÇ ÀÌ¿ë ¹æ¹ýÀº ¼·Î ¹èŸÀûÀÎ ¹°°ÇÀº ¾Æ´Ñ °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä; ¾çÂÊ ¸ðµÎÀÇ ±¸Á¶¸¦ ¼¹ö»ó¿¡¼ µ¿½Ã¿¡ ÀÌ¿ëÇÏ´Â °Í ÇÏÁö¸¸ ÇÒ ¼ö ÀÖ½À´Ï´Ù. 1.4.2.1. À͸í TCP/IP¾×¼¼½ºÀÇ ¼³Á¤¿É¼Ç¾øÀÌ ½ÇÇàÇϸé(ÀÚ)svnserve (Àº)´Â svn Ŭ¶óÀ̾ðÆ®¿Í ¼¼¼ÇÀ» È®¸³Çϱâ À§Çؼ µ¥ÀÌÅ͸¦ Ç¥ÁØ Ãâ·Â¿¡ ½á Ç¥ÁØ ÀÔ·ÂÀ¸·ÎºÎÅÍ ¹Þ½À´Ï´Ù:
ÀÌ°ÍÀº Á÷Á¢ ´©±º°¡ÀÇ µµ¿òÀÌ µÇ´Â °ÍÀº ¾Æ´Õ´Ï´Ù; svnserve ´Â ÀÌ ±¸Á¶¸¦ »ç¿ëÇØinetd demon·ÎºÎÅÍ ±âµ¿ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. ±×·¯³ª svnserve (À»)¸¦ demon·Î¼ ±âµ¿Çϴµ¥´Â ¸î°³ÀÇ ´Ù¸¥ ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù. Çϳª´«ÀÇ ¼±ÅûçÇ×Àºsvn¸¦ ¼¹ö¸Ó½Å»óÀÇ inetdÀÇ ¼ºñ½º·Î¼ µî·ÏÇÏ´Â °ÍÀÔ´Ï´Ù. ±×·¸°Ô Çؼ µÎ¾î Ŭ¶óÀ̾ðÆ®°¡ Æ÷Åä 3690 ¿¡ Á¢¼ÓÇÏ·Á°í Çϸé [7] inetd ´Â"1ȸ ÇÑÁ¤ÀÇ" svnserve ÇÁ·Î¼¼½º¸¦ ±âµ¿ÇØ Å¬¶óÀ̾ðÆ® (À¸)·ÎºÎÅÍÀÇ ¿ä±¸¸¦ ó¸®ÇÕ´Ï´Ù. ÀÌ Å¸ÀÔÀÇ ¼³Á¤À» ÇßÀ» °æ¿ì svnserve ÇÁ·Î¼¼½º¸¦root(Àΰ¡ ¹«Á¦ÇÑÀÇ ±ÇÇÑÀ» °¡Á³´Ù ´Ù¸¥ À¯Àú)·Î ½ÇÇàÇÏÁö ¾Ê´Â ÆíÀÌ ÁÁÀ»Áöµµ ¸ð¸¨´Ï´Ù. °ø°³ÇÏ°í ÀÖ´Â ÀúÀå¼Ò(repository)ÀÇ ¼ÒÀ¯ÀÚ¿Í Æ۹̼ǿ¡ ÀÇÇØ ´Ù¸¥¾Æ¸¶ »õ·ÎÀÌ ¸¸µçÀ¯ÀúÀÎ °ÍÀÌ º¸´Ù ¹Ù¶÷Á÷ÇÒ °ÍÀÔ´Ï´Ù. ¿¹¸¦ µé¾î svn (ÀÌ)¶ó´Â À̸§ÀÇ À¯Àú¸¦ »õ·Ó°Ô ¸¸µé¾î ±× À¯Àú¿¡°Ô Subversion ÀúÀå¼Ò(repository)¿¡ ´ëÇÑ ¹«Á¦ÇÑÀÇ ±Ç¸®¸¦ ÁÖ¾îsvnserve ÇÁ·Î¼¼½º¸¦ ±× À¯Àú·Î ½ÇÇàÇϵµ·Ï(µíÀÌ) ¼³Á¤ÇÕ´Ï´Ù. ¹°·Ð ÀÌ ÃÖÃÊÀÇ ¹æ¹ýÀºinetd(Àΰ¡
±×·¯ÇÑ) demon¸¦ °¡Áø ¸Ó½ÅÀ¸·Î ¸¸ ÇÒ ¼ö ÀÖ´Â °ÍÀÔ´Ï´Ù.
ÀÌ°ÍÀº ÀϹÝÀûÀ¸·Î Unix»ó¿¡¼´Â ÇÑÁ¤µÈ ȯ°æÀÔ´Ï´Ù.
´Ù¸¥ ¹æ¹ýÀº svnserve ¸¦ ½ºÅĵå¾ó·ÐÀÇ
demon·Î¼ ½ÇÇàÇÏ´Â °ÍÀÔ´Ï´Ù.
Ŭ¶óÀ̾ðÆ®°¡svnserve ÇÁ·Î¼¼½º¿¡ ³×Æ®¿öÅ© Á¢¼ÓÀ» Ä¡¸é (ÀÌ°ÍÀº demon·Î¼ ½ÇÇàµÇ°í ÀÖ´ÂÁö "1ȸ ÇÑÁ¤ÀÇ" ó¸®Àϱ ÀÇÇÏÁö ¾Ê°í) ÀÎÁõ È®ÀÎÀº ¿ÏÀüÈ÷ ½ÇÇàµÇÁö ¾Ê½À´Ï´Ù. ¼¹ö ÇÁ·Î¼¼½º´Â ´©°¡ ±×°ÍÀ» ½ÇÇàÇÏ°í À־ ÀúÀå¼Ò(repository)¿¡ ¾×¼¼½º ÇØ Å¬¶óÀ̾ðÆ®°¡ Ä¿¹ÔÀ» ¹ßÇàÇÏ¸é »õ·Î¿î ¸®ºñÀüÀÌ svn:author¼Ó¼º¾øÀÌ ÀÛ¼ºµË´Ï´Ù. ÇÑ ¹ø svnserve ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ¸é(ÀÚ)
±×°ÍÀº ½Ã½ºÅÛ»óÀÇ ¸ðµç ÀúÀå¼Ò(repository)¸¦ ³×Æ®¿öÅ©·ÎºÎÅÍ ÀÌ¿ë °¡´ÉÇÏ°Ô ÇÕ´Ï´Ù.
¹Ù²Ù¾î ¸»Çϸé(ÀÚ) Ŭ¶óÀ̾ðÆ®°¡
svn://example.com/usr/local/repos/project
(À»)¸¦ üũ¾Æ¿ô ÇÏ·Á°í Çϸé example.com »ó¿¡¼ µ¿ÀÛÇÏ°í ÀÖ´Âsvnserve
ÇÁ·Î¼¼½º´Â Àý´ë Æнº/usr/local/repos/project¿¡ ÀÖ´Ù
ÀúÀå¼Ò(repository)¸¦ º¸·¯ °©´Ï´Ù. ½ÃÅ¥·¯Æ¼¸¦ È®º¸ÇÏ·Á¸ésvnserve
¿¡
Notes
|
The person you rejected yesterday could make you happy, if you say yes. |