#!jade ÀúÀå¼Ò °ü¸® SubversionÀÇ ÀúÀå¼Ò´Â º¹¼öÀÇ ÇÁ·ÎÁ§Æ®¸¦ À§ÇÑ ¹öÀü °ü¸®µÈ µ¥ÀÌÅ͸¦ º¸°üÇÏ´Â Áß½ÉÀûÀÎ Àå¼ÒÀÔ´Ï´Ù. ÀÌ·± ÀÌÀ¯·Î ÀúÀå¼Ò´Â °ü¸®ÀÚ¿¡°Ô À־´Â ¸ðµç ¾ÖÁ¤°ú °ü½ÉÀ» ½ñÀ» ´ë»óÀÌ µÉÁöµµ ¸ð¸¨´Ï´Ù. ÇÏÁö¸¸ ÀúÀå¼Ò´Â ÀϹÝÀûÀ¸·Î´Â ±×¸¸Å­ º¹ÀâÇÑ °ü¸®°¡ ÇÊ¿äÇÏÁö ¾Ê½À´Ï´Ù. ÀáÀçÀûÀÎ ¹®Á¦¸¦ ÇÇÇϰųª ½ÇÁ¦·Î ÀϾ´Â ¹®Á¦¸¦ ¾ÈÀüÇÏ°Ô ÇØ°áÇϱâ À§Çؼ­´Â ¾î¶»°Ô ÇÏ¸é ¿Ã¹Ù¸£°Ô ¼³Á¤ÇÏ°í °ü¸®ÇÒ ¼ö ÀÖ´ÂÁö ÀÌÇØÇÏ´Â °ÍÀÌ Áß¿äÇÕ´Ï´Ù. ÀÌ Àå¿¡¼­´Â SubversionÀÇ ÀúÀå¼Ò¸¦ ¾î¶»°Ô ¸¸µé°í ¼³Á¤ÇÏ´ÂÁö ±×¸®°í ÀúÀå¼Ò¸¦ ³×Æ®¿öÅ©·Î Á¢±ÙÇϱâ À§Çؼ­´Â ¾î¶»°Ô Çϸé ÁÁÀºÁö¿¡ ´ëÇØ ³íÀÇÇÕ´Ï´Ù. svnlook°ú svnadmin µµ±¸(ÀÌ µÑÀº SubversionÀÌ Á¦°øÇÏ´Â ÅøÀÔ´Ï´Ù)ÀÇ ÀÌ¿ë ¹æ¹ýÀ» Æ÷ÇÔÇؼ­ ÀúÀå¼Ò °ü¸®¿¡ ´ëÇؼ­µµ À̾߱âÇÒ °ÍÀÔ´Ï´Ù. ÀÚÁÖ ÀÖ´Â Áú¹®°ú ½Ç¼ö¸¦ ¾ð±ÞÇÏ°í ÀúÀå¼Ò¿¡¼­ ¾î¶»°Ô µ¥ÀÌÅ͸¦ ¹èÄ¡ÇÏ´Â°Ô ÁÁÀºÁö µµ¿ÍÁÙ °ÍÀÔ´Ï´Ù. ¸¸¾à Subversion ÀúÀå¼ÒÀÇ ¹öÀü °ü¸®ÇÏ¿¡ ÀÖ´Â µ¥ÀÌÅÍ¿¡ »ç¿ëÀڷμ­ Á¢±ÙÇÒ »ÓÀ̶ó¸é (Áï Subversion Ŭ¶óÀ̾ðÆ®¸¸ »ç¿ëÇÑ´Ù¸é) ÀÌ ÀåÀº ±×³É Áö³ªÃĵµ µË´Ï´Ù. ±×·¯³ª Subversion ÀúÀå¼Ò¸¦ °ü¸®ÇÏ°í ½Í´Ù¸é ÀÌ·¸°Ô ¸»ÇÏ¸é ¸Å¿ì °í»óÇÑ ÀÏó·³ »ý°¢µË´Ï´Ù¸¸ ÀÛ¾÷ Ä«ÇÇ ³Ê¸Ó¿¡ ÀÖ´Â ½ÅºñÀÇ ¿µ¿ª¿¡ Èï¹Ì¸¦ °¡Áö´Â ¸ðµç »ç¶÷À» ÀǹÌÇÏ´Â ¸»ÀÔ´Ï´Ù. ÀÌ ÀåÀ» Ưº°È÷ ÁÖÀÇÇؼ­ º¸¼¼¿ä. ¹°·Ð °ü¸®ÇÒ ÀúÀå¼Ò°¡ Çϳªµµ ¾øÀ¸¸é ÀúÀå¼Ò °ü¸®ÀÚ°¡ µÉ ¼ö ¾ø½À´Ï´Ù. ÀúÀå¼ÒÀÇ ±âÃÊ Æ®·£Àè¼Ç(transaction)°ú ¸®ºñÀüÀÇ ÀÌÇØ °³³äÀûÀ¸·Î ¸»Çϸé Subversion ÀúÀå¼Ò´Â µð·ºÅ丮 Æ®¸®ÀÇ ¿¬¼ÓÀÔ´Ï´Ù. °¢°¢ÀÇ Æ®¸®´Â ÀúÀå¼Ò¿¡ ÀÖ´Â ÆÄÀÏÀ̳ª µð·ºÅ丮°¡ ƯÁ¤ ¼ø°£¿¡ ¾î¶»°Ô º¸ÀÌ´ÂÁö¿¡ ´ëÇÑ ¼ø°£Æ÷Âø »çÁø(snapshot)ÀÔ´Ï´Ù. Ŭ¶óÀ̾ðÆ®ÀÇ Á¶ÀÛ¿¡ ÀÇÇØ ¸¸µé¾îÁö´Â ¼ø°£Æ÷Âø »çÁøÀ» ¸®ºñÀü(revision)À̶ó°í ÇÕ´Ï´Ù. °¢°¢ÀÇ ¸®ºñÀüÀº Æ®·£Àè¼Ç(transaction) Æ®¸®·Î¼­ ž´Ï´Ù. Ä¿¹ÔÇϸé Ŭ¶óÀ̾ðÆ®´Â ·ÎÄÿ¡¼­ÀÇ º¯°æ »çÇ×(°ú Ŭ¶óÀ̾ðÆ®ÀÇ Ä¿¹Ô 󸮸¦ ½ÃÀÛÇÒ ¶§ ÀúÀå¼Ò¿¡ ÀϾ´Â ºÎ°¡ÀûÀÎ º¯°æ »çÇ×)À» ¹Ý¿µÇÑ Subversion Æ®·£Àè¼ÇÀ» ¸¸µé¾î ±× Æ®¸®°¡ ÀÏ·ÃÀÇ ¿¬¼ÓÆ÷Âø »çÁø Áß ¸¶Áö¸·ÀÌ µÇµµ·Ï ÀúÀå¼Ò¿¡ ÀúÀåÇ϶ó°í ¸í·ÉÇÕ´Ï´Ù. Ä¿¹ÔÀÌ ¼º°øÇϸé Æ®·£Àè¼ÇÀº »õ·Î¿î ¸®ºñÀü Æ®¸®·Î ½Â°ÝµÇ°í »õ·Î¿î ¸®ºñÀü ¹øÈ£¸¦ ¹Þ½À´Ï´Ù. Ä¿¹ÔÀÌ ¾î¶² ÀÌÀ¯·Î ½ÇÆÐÇϸé Æ®·£Àè¼ÇÀº Æı«µÇ°í Ŭ¶óÀ̾ðÆ®´Â ½ÇÆÐÇß´Ù´Â ÅëÁö¸¦ ¹Þ½À´Ï´Ù. °»½Å 󸮵µ ÀÌ¿Í °°ÀÌ µ¿ÀÛÇÕ´Ï´Ù. Ŭ¶óÀ̾ðÆ®´Â ÀÛ¾÷ Ä«ÇÇ »óŸ¦ ¹Ý¿µÇÑ Àӽà Ʈ·£Àè¼Ç Æ®¸®¸¦ ¸¸µì´Ï´Ù. ÀúÀå¼Ò´Â ±× Æ®·£Àè¼Ç Æ®¸®¿Í ¿äûµÈ ¹öÀüÀÇ ¸®ºñÀü Æ®¸®(º¸ÅëÀº ÃÖ½ÅÀÇ È¤Àº °¡Àå »õ·Î¿î Æ®¸®)¿Í ºñ±³Çؼ­ ÀÛ¾÷ Ä«ÇǸ¦ ±× ¸®ºñÀüÀÇ Æ®¸®·Î º¯ÇüÇÏ·Á¸é ¾î¶°ÇÑ º¯°æÀÌ ÇÊ¿äÇÑÁö Á¤º¸¸¦ µÇµ¹·ÁÁÝ´Ï´Ù. °»½ÅÀÌ ¿Ï·áµÈ ÈÄ Àӽà Ʈ·£Àè¼ÇÀº »èÁ¦µË´Ï´Ù. Æ®·£Àè¼Ç Æ®¸®¸¦ ÀÌ¿ëÇÏ´Â °ÍÀÌ ÀúÀå¼Ò¿¡¼­ °ü¸®µÇ´Â ÆÄÀÏ ½Ã½ºÅÛÀ» º¯°æÇÏ´Â À¯ÀÏÇÑ ¹æ¹ýÀÔ´Ï´Ù. ±×·¯³ª Æ®·£Àè¼ÇÀÇ »ýÁ¸ ½Ã°£ÀÌ ¿ÏÀüÈ÷ ÀÓÀÇÀÎ °ÍÀ» ÀÌÇØÇÏ´Â °ÍÀÌ Áß¿äÇÕ´Ï´Ù. °»½ÅÀÇ °æ¿ì Æ®·£Àè¼ÇÀº °ð¹Ù·Î ¼Ò¸êÇÏ´Â ÀϽÃÀûÀÎ Æ®¸® ÀÔ´Ï´Ù. Ä¿¹ÔÀÇ °æ¿ì´Â Æ®·£Àè¼ÇÀº ¿µ±¸ÀûÀÎ ¸®ºñÀüÀ¸·Î ¹Ù²ò´Ï´Ù(Ä¿¹ÔÀÌ ½ÇÆÐÇßÀ» ¶§´Â »èÁ¦µËÁö¸¸). ¿¡·¯³ª ¹ö±×°¡ ÀÖÀ¸¸é Æ®·£Àè¼ÇÀº ÀúÀå¼Ò¿¡ ³²°ÜÁ® ¹ö¸±Áöµµ ¸ð¸¨´Ï´Ù(±×·¯³ª ÀÌ°ÍÀº µð½ºÅ© ¿ë·®À» Â÷ÁöÇÒ »Ó ³ª»Û ¿µÇâÀ» ÁÖÁö´Â ¾Ê½À´Ï´Ù). ÀÌ·ÐÀûÀ¸·Î ¾ðÁ¨°¡´Â ÅëÇÕµÈ ÀÛ¾÷ ȯ°æÀ» Áö¿øÇÏ´Â ¾îÇø®ÄÉÀ̼ÇÀº Æ®·£Àè¼ÇÀÇ »ýÁ¸ ±â°£À» Á» ´õ À¯¿¬ÇÏ°Ô °ü¸®ÇÒ ¼ö ÀÖ°Ô µÉÁöµµ ¸ð¸¨´Ï´Ù. Ŭ¶óÀ̾ðÆ®°¡ ÀúÀå¼Ò¿¡ ´ëÇÑ ¼öÁ¤ ³»¿ëÀÇ ±â¼úÀ» ³¡³½ ÈÄ¿¡µµ ¸®ºñÀüÀÌ µÉ Èĺ¸ Æ®·£Àè¼ÇÀÌ Á¤ÁöÇÑ »óÅ¿¡ ¸Ó¹«¸£´Â ½Ã½ºÅÛÀ» »ý°¢ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ°ÍÀº »õ·Î¿î Ä¿¹ÔÀ» ´Ù¸¥ »ç¶÷ ¿¹¸¦ µé¾î °ü¸®ÀÚ³ª ¿£Áö´Ï¾î¸µ QAÆÀÀÌ Àç°ËÅäÇÏ´Â °ÍÀ» °¡´ÉÇÏ°Ô Çؼ­ ±× Æ®·£Àè¼ÇÀ» ¸®ºñÀüÀ¸·Î ½Â°Ý½ÃÅ°°Å³ª öȸÇϰųª ÇÒ ¼ö°¡ ÀÖ°Ô µÇ°ÚÁö¿ä. ÀúÀå¼Ò¸¦ °ü¸®ÇÒ ¶§ ¹Ýµå½Ã ÇÏÁö ¾ÊÀ¸¸é ¾È µÇ´Â °ÍÀº ¹«¾ùÀϱî¿ä? ´ë´äÀº °£´ÜÇÕ´Ï´Ù. Subversion ÀúÀå¼Ò¸¦ °ü¸®ÇÑ´Ù¸é ÀúÀå¼ÒÀÇ »óŸ¦ »ìÇÇ´Â ÀÏÀÇ ÀϺημ­ ¸®ºñÀü°ú Æ®·£Àè¼ÇÀ» Á¶»çÇØ¾ß ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. ¹öÀüÈ­ µÇÁö ¾Ê´Â ¼Ó¼º Subversion ÀúÀå¼Ò¿¡¼­ Æ®·£Àè¼Ç°ú ¸®ºñÀüÀº ±×°Í¿¡ µþ¸° ¼Ó¼ºÀ» °¡Áú ¼ö°¡ ÀÖ½À´Ï´Ù. ±×·¯ÇÑ ¼Ó¼ºÀº ÀϹÝÀûÀÎ Å°¡¤°ªÀÇ ´ëÀÀÀ¸·Î °ü·ÃÇÑ Æ®¸®¿¡ ´ëÇÑ Á¤º¸¸¦ º¸°üÇϴµ¥ ÀÌ¿ëµË´Ï´Ù. ¼Ó¼ºÀÇ À̸§°ú °ªÀº ³ª¸ÓÁö Æ®¸® µ¥ÀÌÅÍ¿Í ÇÔ²² ÀúÀå¼ÒÀÇ ÆÄÀÏ ½Ã½ºÅÛ¿¡ º¸°üµË´Ï´Ù. ¸®ºñÀü°ú Æ®·£Àè¼ÇÀÇ ¼Ó¼ºÀº ÀÛ¾÷ Ä«ÇÇ¿¡ ÀÇÇØ °ü¸®µÉ ¼ö ¾ø´Â Á¤º¸µé °°ÀÌ ÆÄÀÏÀ̳ª µð·ºÅ丮¿¡ °­ÇÏ°Ô °ü·ÃµÇÁö ¾ÊÀº Æ®¸®ÀÇ Á¤º¸¸¦ ±â¾ïÇØ µÎ´Âµ¥ Æí¸®ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î »õ·Î¿î Ä¿¹Ô Æ®·£Àè¼ÇÀÌ ÀúÀå¼Ò¿¡ ¸¸µé¾îÁö¸é SubversionÀº ±× Æ®·£Àè¼Ç¿¡ svn:date¶ó´Â ¼Ó¼ºÀ» Ãß°¡ÇÕ´Ï´Ù. Æ®·£Àè¼ÇÀÌ ¸¸µé¾îÁø ½Ã°¢À» ³ªÅ¸³»´Â Ç¥½ÃÀÔ´Ï´Ù. Ä¿¹ÔÀÌ ¿Ï·áµÇ¾î Æ®·£Àè¼ÇÀÌ ¿µ±¸ÀûÀÎ ¸®ºñÀüÀÌ µÉ ¶§ Æ®¸®¿¡´Â ¸®ºñÀü ÀÛ¼ºÀÚÀÇ À̸§(svn:author)°ú ¸®ºñÀü¿¡ ºÙ¿©Áø ·Î±× ¸Þ¼¼Áö(svn:log)¶ó´Â ¼Ó¼ºÀÌ Ãß°¡µË´Ï´Ù. ¸®ºñÀü°ú Æ®·£Àè¼ÇÀÇ ¼Ó¼ºÀº ¹öÀüÈ­ µÇÁö ¾Ê´Â ¼Ó¼ºÀÔ´Ï´Ù. ¼Ó¼ºÀº ¼öÁ¤µÇ¸é ±× ÀÌÀüÀÇ °ªÀ» ¿µ±¸È÷ ÀÒ°Ô µË´Ï´Ù. ¸¶Âù°¡Áö·Î ¸®ºñÀü Æ®¸® ÀÚ½ÅÀº ºÒº¯ÀÔ´Ï´Ù¸¸ Æ®¸®ÀÇ ¼Ó¼ºÀº ±×·¸Áö ¾Ê½À´Ï´Ù. ¾ðÁ¦¶óµµ ¸®ºñÀü ¼Ó¼ºÀ» Ãß°¡, »èÁ¦, ¼öÁ¤ ÇÒ ¼ö ÀÖ½À´Ï´Ù. »õ·Î¿î ¸®ºñÀüÀ» Ä¿¹ÔÇÑ ÈÄ¿¡ À߸øÇÑ Á¤º¸°¡ Àְųª ·Î±× ¸Þ¼¼Áö¿¡ ¿ÀŸ°¡ ÀÖ´Â °ÍÀ» ¾Ë¾ÒÀ» ¶§¿¡´Â ´ÜÁö svn:log ¼Ó¼ºÀÇ °ªÀ» ¿Ã¹Ù¸¥ ·Î±× ¸Þ¼¼Áö·Î ¹Ù²Ù±â¸¸ ÇÏ¸é µË´Ï´Ù. ÀúÀå¼Ò ÀÛ¼º°ú ¼³Á¤ Subversion ÀúÀå¼Ò¸¦ ÀÛ¼ºÇÏ´Â ÀÏÀº ¸Å¿ì °£´ÜÇÑ ÀÛ¾÷ÀÔ´Ï´Ù. svnadmin À¯Æ¿¸®Æ¼¿¡ ÀúÀå¼Ò¸¦ ¸¸µå´Â ¼­ºê Ä¿¸Çµå°¡ ÀÖ½À´Ï´Ù. »õ ÀúÀå¼Ò¸¦ ¸¸µå·Á¸é ´ÜÁö ´ÙÀ½°ú °°Àº ¸í·É¸¸ ¾²¸é µË´Ï´Ù. $ svnadmin create path/to/repos ÀÌ°ÍÀ¸·Î path/to/repos µð·ºÅ丮¿¡ »õ ÀúÀå¼Ò°¡ ¸¸µé¾îÁý´Ï´Ù. »õ ÀúÀå¼Ò´Â ¸®ºñÀü 0À¸·Î ž´Ï´Ù. ¸®ºñÀü ¹øÈ£ 0¹ø¿¡´Â ÃÖ»óÀ§ ·çÆ®(/) ÆÄÀÏ ½Ã½ºÅÛ µð·ºÅ丮¸¸ ÀÖ½À´Ï´Ù. Ãʱ⠻óÅ¿¡¼­ ¸®ºñÀü 0Àº ¸®ºñÀü ¼Ó¼ºÀ» Çϳª¸¸ °¡Áö°í ÀÖÀ¸¸ç, ±×°ÍÀº svn:date ÀÔ´Ï´Ù. ÀÌ ¼Ó¼ºÀº ÀúÀå¼Ò°¡ ¸¸µé¾îÁø ½Ã°£À» ³ªÅ¸³À´Ï´Ù. svnadminÀÇ Àμö·Î Àü´ÞµÇ´Â °æ·Î´Â ÀϹÝÀûÀÎ ÆÄÀϽýºÅÛ °æ·ÎÀÌÁö svn Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥ÀÌ ÀúÀå¼Ò¸¦ ÂüÁ¶ÇÒ ¶§ »ç¿ëÇÏ´Â URLÀÌ ¾Æ´ÔÀ» ÁÖÀÇÇϼ¼¿ä. svnadmin°ú svnlookµµ ¼­¹öÃøÀÇ À¯Æ¿¸®Æ¼¶ó°í »ý°¢Çϼ¼¿ä. ÀÌ µÑÀº ÀúÀå¼Ò°¡ ¼³Ä¡µÈ ÄÄÇ»ÅÍ¿¡¼­ ÀúÀå¼Ò¸¦ Á¶»çÇϰųª »óŸ¦ º¯°æÇϴµ¥ »ç¿ëµÇ°í, ³×Æ®¿öÅ©¸¦ ÅëÇؼ­ ÀÛ¾÷À» ¼öÇàÇÒ ¼ö´Â ¾ø½À´Ï´Ù. Subversion ÃʽÉÀÚ°¡ ÀÚÁÖ ÇÏ´Â ½Ç¼ö´Â ÀÌ ÇÁ·Î±×·¥µé¿¡ URLÀ» »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù. (ȤÀº "·ÎÄÃ" URLÀ̶ó´Â Àǹ̷Πfile:À̶ó°í ÁöÁ¤ÇØ ¹ö¸®´Â °ÍÀÔ´Ï´Ù. ) svnadmin create ¸í·ÉÀ» ½ÇÇàÇϸé ÁöÁ¤µÈ µð·ºÅ丮¿¡´Â ¹Ý¦¹Ý¦ ºû³ª´Â »õ Subversion ÀúÀå¼Ò°¡ »ý±é´Ï´Ù. ±× µð·ºÅ丮¿¡ ½ÇÁ¦·Î ¹«¾ùÀÌ »ý°å´ÂÁö µé¿©´Ù º¾½Ã´Ù. $ ls repos dav/ db/ format hooks/ locks/ README.txt README.txt ÆÄÀÏÀ» Á¦¿ÜÇϸé ÀúÀå¼Ò µð·ºÅ丮´Â ÇÏÀ§ µð·ºÅ丮ÀÇ ¸ðÀÓÀÔ´Ï´Ù. SubversionÀÇ ÀϹÝÀûÀÎ ¼³°è »ç»ó°ú °°ÀÌ ¸ðµâÈ­¿¡ ¸¹ÀÌ ½Å°æÀ» ¾´ °ÍÀÔ´Ï´Ù. °èÃþÀûÀ¸·Î ±¸Á¶È­ µÈ °ÍÀÌ ¾îÁö·´°Ô Èð¾îÁ® ÀÖ´Â »óź¸´Ù ¹Ù¶÷Á÷ÇÕ´Ï´Ù. »õ ÀúÀå¼Ò µð·ºÅ丮¿¡ ÀÖ´Â Ç׸ñµé¿¡ ´ëÇؼ­ °£´ÜÈ÷ ¼³¸íÇÏ°Ú½À´Ï´Ù. dav Apache¿Í mod_dav_svnÀÇ °ü¸®¿ë µ¥ÀÌÅÍ µð·ºÅ丮ÀÔ´Ï´Ù. db Subversion ÆÄÀϽýºÅÛ µ¥ÀÌÅÍ ÀúÀå¼Ò¸¦ ±¸¼ºÇÏ´Â DB Å×À̺í Àüü Áï, ¸ÞÀÎ Berkeley DB ȯ°æÀÌ ÀÖ½À´Ï´Ù. (¿©±â¿¡ ¸ðµç ¹öÀüÈ­µÈ µ¥ÀÌÅÍ°¡ º¸°üµË´Ï´Ù) format ÀúÀå¼Ò ·¹À̾ƿôÀÇ ¹öÀü ¹øÈ£¸¦ ³ªÅ¸³»´Â Á¤¼ö°ª Çϳª°¡ µé¾îÀÖ´Â ÆÄÀÏÀÔ´Ï´Ù. hooks ÈÅ ½ºÅ©¸³Æ® ÅÛÇø´(template) Àüü(¿Í ¼³Ä¡µÈ ÈÅ ½ºÅ©¸³Æ®)°¡ º¸°üµÇ´Â µð·ºÅ丮ÀÔ´Ï´Ù. locks ÀúÀå¼Ò¿¡ Á¢±ÙÇÑ »ç¶÷À» ±â·ÏÇϴµ¥ »ç¿ëµÇ´Â Àá±Ý µ¥ÀÌÅ͸¦ À§ÇÑ µð·ºÅ丮ÀÔ´Ï´Ù. README.txt Subversion ÀúÀå¼Ò¸¦ º¸´Â »ç¶÷À» À§ÇÑ Á¤º¸°¡ ´ã±ä ÆÄÀÏÀÔ´Ï´Ù. ÀϹÝÀûÀ¸·Î Á÷Á¢ ÀúÀå¼Ò¸¦ °Çµå·Á¼­´Â ¾ÈµË´Ï´Ù. svnadmin µµ±¸´Â ÀúÀå¼Ò¸¦ º¯°æÇϴµ¥ ÃæºÐÇÑ ±â´ÉÀ» Á¦°øÇϸç, ÀúÀå¼Ò¸¦ ±¸¼ºÇÏ´Â ÀϺκÐÀ» Á¶Á¤ÇÏ´Â µ¥¿¡´Â (Berkeley DBÀÇ µµ±¸ ÇÑ ¹ú µûÀ§ÀÇ) ¼­µåÆÄƼ µµ±¸¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¡µµ ¸î¸î ¿¹¿Ü°¡ ÀÖÀ¸¸ç Â÷Â÷ ¼³¸íÇÏ°Ú½À´Ï´Ù. ÈÅ ½ºÅ©¸³Æ®(Hook Scripts) ÈÅ(hook)Àº »õ ¸®ºñÀüÀÌ »ý¼ºµÇ°Å³ª ¹öÀüÈ­µÇÁö ¾ÊÀº ¼Ó¼ºÀÌ ¼öÁ¤µÇ´Â ÀÏ(event)ÀÌ ÀϾÀ» ¶§ ½ÇÇàµÇ´Â ÇÁ·Î±×·¥ÀÔ´Ï´Ù. °¢°¢ÀÇ ÈÅÀº ¾î¶² ÀÏÀÌ ÀϾ´ÂÁö, ÀÛ¾÷ ´ë»óÀº ¹«¾ùÀÎÁö, ±× ÀÏÀ» ÇÑ »ç¶÷Àº ´©±¸ÀÎÁö ¾Ë ¼ö ÀÖ´Â ÃæºÐÇÑ Á¤º¸¸¦ Àü´Þ ¹Þ½À´Ï´Ù. ÈÅÀÇ Ãâ·ÂÀ̳ª ¹Ýȯ°ª¿¡ µû¶ó ÈÅ ÇÁ·Î±×·¥Àº 󸮸¦ °è¼ÓÇϰųª Á¾·áÇϰųª ¸î °¡Áö ¹æ¹ýÀ¸·Î ÀϽà Áß´ÜÇϰųª ÇÕ´Ï´Ù. ±âº»°ª¿¡ µû¸£¸é hooks µð·ºÅ丮¿¡´Â ´Ù¾çÇÑ ÀúÀå¼Ò ÈÅÀÇ ÅÛÇø´ÀÌ ÀÖ½À´Ï´Ù. $ ls repos/hooks/ post-commit.tmpl pre-revprop-change.tmpl post-revprop-change.tmpl start-commit.tmpl pre-commit.tmpl SubversionÀÌ °¡Áö°í ÀÖ´Â ÈÅ¿¡´Â °¢°¢ ÇϳªÀÇ ÅÛÇø´ÀÌ ÀÖ°í, ÅÛÇø´ ½ºÅ©¸³Æ®ÀÇ ³»¿ëÀ» º¸¸é ±× ½ºÅ©¸³Æ®°¡ ¾î¶² Æ®¸®°Å(trigger)¸¦ ½ÇÇàÇÏ´ÂÁö, ¾î¶² µ¥ÀÌÅÍ°¡ ±× ½ºÅ©¸³Æ®¿¡ Àü´ÞµÇ´ÂÁö ¾Ë ¼ö ÀÖ½À´Ï´Ù. ¶Ç ¸¹Àº ÅÛÇø´µé¿¡´Â À¯¿ëÇÑ ÀÛ¾÷À» ¼öÇàÇϱâ À§Çؼ­ SubversionÀÌ Á¦°øÇÏ´Â ´Ù¸¥ ÇÁ·Î±×·¥µé°ú ÈÅ ½ºÅ©¸³Æ®¸¦ ¾î¶»°Ô °áÇÕÇؼ­ ¾²´ÂÁö º¸¿©ÁÖ´Â ¿¹Á¦°¡ ÀÖ½À´Ï´Ù. ½ÇÁ¦·Î ÈÅÀ» ¼³Ä¡ÇÏ´Â °ÍÀº repos/hooks µð·ºÅ丮¿¡ ÈÅÀÇ À̸§À¸·Î (start-commitÀ̳ª post-commit °°ÀÌ) ½ÇÇà ÇÁ·Î±×·¥À̳ª ½ºÅ©¸³Æ®¸¦ µÎ±â¸¸ ÇÏ¸é µË´Ï´Ù. À¯´Ð½º(Unix)¿¡¼­´Â ÀÌ ¸»ÀÇ Àǹ̴ ½ºÅ©¸³Æ®³ª ÇÁ·Î±×·¥(½© ½ºÅ©¸³Æ®, ÆÄÀ̽ã ÇÁ·Î±×·¥, ÄÄÆÄÀÏµÈ C ½ÇÇàÆÄÀÏ µî)À» Á¤È®ÇÏ°Ô ÈÅÀÇ À̸§°ú ¶È°°Àº À̸§À¸·Î °¡Á®´Ù ³õÀ¸¶ó´Â ¸»ÀÔ´Ï´Ù. ¹°·Ð ÅÛÇø´ ÆÄÀϵéÀÌ Á¤º¸¸¦ Á¦°øÇϱâ À§ÇÑ ¸ñÀû¸¸À¸·Î Á¦°øµÇ´Â °ÍÀº ¾Æ´Õ´Ï´Ù. À¯´Ð½º¿¡¼­ ÈÅÀ» ¼³Ä¡ÇÏ´Â °¡Àå °£´ÜÇÑ ¹æ¹ýÀº ÅÛÇø´ ÆÄÀÏÀ» .tmpl È®ÀåÀÚ¸¦ ¶¾ »õ ÆÄÀÏ·Î º¹»çÇؼ­ ³»¿ëÀ» °íÄ¡°í ±× ÆÄÀÏ¿¡ ½ÇÇà±ÇÇÑÀ» ÁÖ´Â °ÍÀÔ´Ï´Ù. ±×·¯³ª À©µµ¿ìÁî(Windows)¿¡¼­´Â ½ÇÇà°¡´ÉÇÑ ÆÄÀÏÀÓÀ» ³ªÅ¸³»±â À§Çؼ­ Ư¼öÇÑ È®ÀåÀÚ¸¦ »ç¿ëÇϱ⠶§¹®¿¡, ½ÇÇà ÇÁ·Î±×·¥¿¡´Â ÈÅÀÇ À̸§ µÚ¿¡ .exe³ª .com¸¦ ºÙÀÌ°í ÀÏ°ýÀÛ¾÷(batch) ÆÄÀÏ¿¡´Â .bat¸¦ ºÙ¿©¾ß ÇÕ´Ï´Ù. ÇöÀç Subversion ÀúÀå¼Ò¿¡´Â ´Ù¼¸ Á¾·ùÀÇ ÈÅÀÌ ±¸ÇöµÇ¾î ÀÖ½À´Ï´Ù. start-commit Ä¿¹Ô Æ®·£Àè¼ÇÀÌ ¸¸µé¾îÁö±â Àü¿¡ ½ÇÇàµË´Ï´Ù. ÀüÇüÀûÀ¸·Î »ç¿ëÀÚ¿¡°Ô Ä¿¹Ô ±ÇÇÑÀÌ ÀÖ´ÂÁö ¾ø´ÂÁö °áÁ¤Çϴµ¥ »ç¿ëµË´Ï´Ù. ÀúÀå¼Ò´Â ÀÌ ÇÁ·Î±×·¥¿¡ µÎ °³ÀÇ Àμö¸¦ °Ç³×Áִµ¥, ±×°ÍÀº ÀúÀå¼Ò °æ·Î¿Í Ä¿¹ÔÇÏ·Á°í ÇÏ´Â »ç¿ëÀÚ À̸§ÀÔ´Ï´Ù. ¸¸¾à ÇÁ·Î±×·¥ÀÌ 0ÀÌ ¾Æ´Ñ °ªÀ» µ¹·ÁÁÖ¾úÀ» °æ¿ì Æ®·£Àè¼ÇÀÌ ¸¸µé¾îÁö±â Àü¿¡ Ä¿¹ÔÀÌ ÁßÁöµË´Ï´Ù. pre-commit Æ®·£Àè¼ÇÀÇ ¿Ï°á ÈÄ ½ÇÁ¦·Î Ä¿¹ÔÀÌ ÀϾ±â Àü¿¡ ½ÇÇà µË´Ï´Ù. ÀüÇüÀûÀ¸·Î´Â Çã¿ëµÇÁö ¾ÊÀº ³»¿ëÀ̳ª Àå¼Ò·Î Ä¿¹ÔÇÏ´Â °Í(¿¹¸¦ µé¸é, ƯÁ¤ ºê·£Ä¡¿¡ Ä¿¹ÔÇÏ·Á¸é ¹ö±× ÃßÀû ½Ã½ºÅÛ(bug tracker)ÀÌ Áִ ǥ°¡ ÀÖ¾î¾ß ÇÏ´Â »çÀÌÆ®µµ ÀÖ°í, ·Î±× ¸Þ½ÃÁö°¡ ²À ÀÖ¾î¾ß ÇÏ´Â »çÀÌÆ®µµ ÀÖ½À´Ï´Ù)À» ¸·´Âµ¥ ¾²ÀÔ´Ï´Ù. ÀúÀå¼Ò´Â ÀÌ ÇÁ·Î±×·¥¿¡ µÎ °³ÀÇ Àμö¸¦ °Ç³×Áִµ¥, ±×°ÍÀº ÀúÀå¼ÒÀÇ °æ·Î¿Í Ä¿¹ÔµÉ Æ®·£Àè¼ÇÀÇ À̸§ÀÔ´Ï´Ù. ¸¸¾à ÀÌ ÇÁ·Î±×·¥ÀÌ 0ÀÌ ¾Æ´Ñ °ªÀ» µ¹·ÁÁÖ¾úÀ» °æ¿ì Ä¿¹ÔÀº Ãë¼ÒµÇ°í Æ®·£Àè¼ÇÀº »èÁ¦µË´Ï´Ù. Subversion ¹èÆ÷º»Àº ¼¼¼¼ÇÑ Á¢±Ù Á¦¾î¸¦ ½ÇÇöÇÒ ¼ö ÀÖµµ·Ï pre-commitÀÌ È£ÃâÇÏ´Â Á¢±Ù Á¦¾î ½ºÅ©¸³Æ®µé(Subversion ¼Ò½º Æ®¸®ÀÇ tools/hook-scripts µð·ºÅ丮¿¡ ÀÖ½À´Ï´Ù)À» Æ÷ÇÔÇÏ°í ÀÖ½À´Ï´Ù. Çö½ÃÁ¡¿¡¼­´Â ÀÌ°ÍÀÌ httpd.conf°¡ Á¦°øÇÏ´Â ¼³Á¤ ÀÌ¿Ü¿¡ ÇÑÃþ ´õ ¼¼¼¼ÇÑ Á¢±Ù Á¦¾î¸¦ ½ÇÇöÇÏ´Â À¯ÀÏÇÑ ¹æ¹ýÀÔ´Ï´Ù. ÇâÈÄÀÇ ¹öÀü¿¡¼­´Â ÆÄÀϽýºÅÛ¿¡ Á¢±Ù Á¦¾î ¸ñ·Ï(ACL)À» Á÷Á¢ ±¸ÇöÇÒ °èȹÀÔ´Ï´Ù. post-commit ÀÌ°ÍÀº Æ®·£Àè¼ÇÀÌ Ä¿¹ÔµÇ¾î »õ·Î¿î ¸®ºñÀüÀÌ ¸¸µé¾îÁø ÈÄ¿¡ ½ÇÇàµË´Ï´Ù. ´ëºÎºÐÀÇ »ç¶÷µéÀº Ä¿¹Ô¿¡ ´ëÇÑ ¸ÞÀÏÀ» º¸³»°Å³ª ÀúÀå¼Ò¸¦ ¹é¾÷Çϴµ¥ ÀÌ ÈÅÀ» »ç¿ëÇÕ´Ï´Ù. ÀúÀå¼Ò´Â ÀÌ ÇÁ·Î±×·¥¿¡ µÎ °³ÀÇ Àμö¸¦ °Ç³×Áִµ¥, ÀúÀå¼ÒÀÇ °æ·Î¿Í À̹ø¿¡ ¸¸µé¾îÁø »õ ¸®ºñÀüÀÇ ¹øÈ£ ÀÔ´Ï´Ù. ÀÌ ÇÁ·Î±×·¥ÀÇ Á¾·á ÄÚµå´Â ¹«½ÃµË´Ï´Ù. Subversion ¹èÆ÷ÆÇÀº commit-email.pl ½ºÅ©¸³Æ®¸¦ Æ÷ÇÔÇÏ°í ÀÖ½À´Ï´Ù(Subversion ¼Ò½º Æ®¸®ÀÇ tools/hook-scripts/ µð·ºÅ丮¿¡ ÀÖ½À´Ï´Ù). ÀÌ°ÍÀ» À̹ø Ä¿¹Ô ´ëÇÑ ¼³¸íÀ» ¸ÞÀÏ·Î º¸³»±â À§Çؼ­ (ȤÀº ·Î±× ÆÄÀÏ¿¡ Ãß°¡Çϱâ À§Çؼ­) Çϱâ À§Çؼ­ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¸ÞÀÏÀÇ ³»¿ëÀº º¯°æµÈ °æ·ÎÀÇ ¸ñ·Ï, Ä¿¹Ô¿¡ ºÙÀÎ ·Î±× ¸Þ¼¼Áö, Ä¿¹ÔÇÑ »ç¶÷, Ä¿¹ÔÇÑ ½Ã°¢, Ä¿¹ÔÀÇ º¯°æ ºÎºÐÀÇ GNU diff Çü½Ä Ç¥½ÃÀÔ´Ï´Ù. SubversionÀÌ Á¦°øÇÏ´Â µµ±¸ Áß¿¡ À¯¿ëÇ× ¶Ç ´Ù¸¥ µµ±¸´Â hot-backup.py ½ºÅ©¸³Æ®ÀÔ´Ï´Ù(Subversion ¼Ò½º Æ®¸®ÀÇ tools/backup/ µð·ºÅ丮¿¡ ÀÖ½À´Ï´Ù). ÀÌ ½ºÅ©¸³Æ®´Â Subversion ÀúÀå¼ÒÀÇ ¿Â¶óÀÎ ¹é¾÷(BerkeleyDB µ¥ÀÌÅͺ£À̽º¿¡¼­ Áö¿øµÇ´Â ±â´ÉÀÔ´Ï´Ù)À» ½ÇÇàÇÕ´Ï´Ù. ÀÌ ½ºÅ©¸³Æ®´Â ¸Å Ä¿¹Ô¸¶´Ù º¸°ü¿ë ȤÀº ºñ»ó º¹±¸¿ë ÀúÀå¼Ò ½º³À¼¦À» ¸¸µå´Âµ¥ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. pre-revprop-change SubversionÀÇ ¸®ºñÀü ¼Ó¼ºÀº ¹öÀüÈ­µÇÁö ¾Ê±â ¶§¹®¿¡ ¼Ó¼º(¿¹¸¦ µé¾î Ä¿¹Ô ¸Þ¼¼Áö ¼Ó¼ºÀÎ svn:log)¿¡ ´ëÇÑ ¼öÁ¤Àº ÀÌÀü ¼Ó¼º°ªÀ» ¿µ¿øÈ÷ µ¤¾î½á ¹ö¸³´Ï´Ù. ÀÌ·± Á¡ ¶§¹®¿¡ µ¥ÀÌÅ͸¦ ÀÒ¾î¹ö¸± ¼ö ÀÖÀ¸¹Ç·Î, SubversionÀº ÇÊ¿ä¿¡ µû¶ó ¼Ó¼º¿¡ ´ëÇÑ º¯°æÀ» ÀúÀå¼Ò °ü¸®ÀÚ°¡ ±â·ÏÀ¸·Î ³²±æ ¼ö ÀÖµµ·Ï ÀÌ ÈÅ(±×¸®°í ÀÌ°Í°ú ¦À» ÀÌ·ç´Â post-revprop-change)À» Á¦°øÇÕ´Ï´Ù. ÀÌ ÈÅÀº ÀúÀå¼Ò¿¡ ±×·¯ÇÑ º¯°æÀÌ ¹ß»ýÇϱâ Á÷Àü¿¡ ½ÇÇàµË´Ï´Ù. ÀúÀå¼Ò´Â ÀÌ ÈÅ¿¡ ³× °³ÀÇ Àμö¸¦ Àü´ÞÇϴµ¥, ±×°ÍÀº ÀúÀå¼Ò °æ·Î, ¼öÁ¤µÉ ¼Ó¼ºÀÌ ¼Ò¼ÓµÈ ¸®ºñÀü, º¯°æÇÏ·Á´Â »ç¶÷ÀÇ ÀÎÁõµÈ »ç¿ëÀÚ À̸§, ¼Ó¼ºÀÇ À̸§ÀÔ´Ï´Ù. post-revprop-change ¾Õ¼­ ¸»ÇÑ °Í ó·³ ÀÌ ÈÅÀº pre-revprop-change ÈÅ°ú ½ÖÀ» ÀÌ·ì´Ï´Ù. »ç½Ç ÀÌ ½ºÅ©¸³Æ®´Â pre-revprop-change ÈÅÀÌ Á¸ÀçÇÏÁö ¾ÊÀ¸¸é ½ÇÇàµÇÁö ¾Ê½À´Ï´Ù. ÈÅÀÌ µÑ ´Ù Á¸ÀçÇÏ´Â °æ¿ì post-revprop-change ÈÅÀº ¸®ºñÀüÀÇ ¼Ó¼ºÀÌ º¯°æµÈ Á÷ÈÄ¿¡ ½ÇÇàµË´Ï´Ù. ÀüÇüÀûÀ¸·Î´Â º¯°æµÈ ¼Ó¼ºÀÇ »õ °ªÀ» ¸ÞÀÏ·Î ¾Ë¸®´Âµ¥ »ç¿ëµË´Ï´Ù. ÀúÀå¼Ò´Â ³× °³ÀÇ Àμö¸¦ ÀÌ ÈÅ¿¡ ÀüÇØÁִµ¥, ±×°ÍÀº ÀúÀå¼Ò °æ·Î, ¼Ó¼ºÀÌ ¼Ò¼ÓµÈ ¸®ºñÀü ¹øÈ£, º¯°æÀ» ÇÏ·Á´Â »ç¶÷ÀÇ ÀÎÁõµÈ »ç¿ëÀÚ À̸§, ¼Ó¼ºÀÇ À̸§ÀÔ´Ï´Ù. Subversion ¹èÆ÷ÆÇ¿¡´Â propchange-email.pl ½ºÅ©¸³Æ®°¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù( tools/hook-scripts/ µð·ºÅ丮¿¡ ÀÖ½À´Ï´Ù). ¸®ºñÀü ¼Ó¼º º¯°æ¿¡ ´ëÇÑ Á¤º¸¸¦ ¸ÞÀÏ·Î º¸³»±â À§Çؼ­(ȤÀº ·Î±× ÆÄÀÏ¿¡ Ãß°¡Çϱâ À§Çؼ­) ±×°ÍÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ±× ¸ÞÀÏÀÇ ³»¿ëÀº ¸®ºñÀü°ú º¯°æµÈ ¼Ó¼º À̸§, º¯°æÇÑ »ç¶÷ À̸§, ¼Ó¼ºÀÇ »õ °ªÀ» Æ÷ÇÔÇÕ´Ï´Ù. SubversionÀº ÀúÀå¼Ò¿¡ Á¢±ÙÇÏ´Â ÇÁ·Î¼¼½ºÀÇ ¼ÒÀ¯Àڷμ­ ÈÅÀ» ½ÇÇàÇÏ·Á°í ÇÕ´Ï´Ù. ´ëºÎºÐÀÇ °æ¿ì »ç¿ëÀÚ´Â ¾ÆÆÄÄ¡(Apache) HTTP ¼­¹ö¿Í mod_dav_svnÀ» ÅëÇؼ­ ÀúÀå¼Ò¿¡ Á¢±ÙÇϹǷÎ, ÈÅÀ» ½ÇÇàÇÏ´Â »ç¿ëÀÚ´Â ¾ÆÆÄÄ¡¸¦ ½ÇÇàÇÏ´Â »ç¿ëÀÚ¿Í °°½À´Ï´Ù. ÈÅÀ» ½ÇÇàÇÏ·Á´Â »ç¿ëÀÚ°¡ ½ÇÇàÇÒ ¼ö ÀÖµµ·Ï OS ¼öÁØ¿¡¼­ ÈÅ¿¡ ½ÇÇà ±ÇÇÑÀ» ÁÖ¾î¾ßÇÕ´Ï´Ù. ¶Ç ±× ¸»Àº ÈÅÀÌ Á÷¡¤°£Á¢ÀûÀ¸·Î Á¢±ÙÇÏ´Â ¸ðµç ÆÄÀÏÀ̳ª ÇÁ·Î±×·¥(Subversion ÀúÀå¼Òµµ Æ÷ÇÔÇÏ¿©)¿¡ °°Àº »ç¿ëÀÚ·Î Á¢±ÙÇÑ´Ù´Â ¶æÀÔ´Ï´Ù. ÈÅÀÌ ÁöÁ¤µÈ ÀÛ¾÷À» ¼öÇàÇϴµ¥ ±ÇÇÑ ¼³Á¤¿¡ °ü·ÃµÈ ¹®Á¦°¡ ÀϾ °¡´É¼ºÀÌ ÀÖÀ¸¹Ç·Î ÁÖÀÇÇϽñ⠹ٶø´Ï´Ù. ¹öŬ¸® 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 ¸¦ »ç¿ëÇÏ¿©)´Â È¿·ÂÀ» ¹ß»ýÇÏÁö ¾Ê½À´Ï´Ù. ÀúÀå¼ÒÀÇ À¯Áöº¸¼ö °ü¸®ÀÚ¿ë µµ±¸ ¸ðÀ½ svnlook svnlookÀº ÀúÀå¼Ò¿¡ ÀÖ´Â ´Ù¾çÇÑ ¸®ºñÀü°ú Æ®·£Àè¼ÇÀ» Á¶»çÇϴµ¥ »ç¿ëµÇ´Â µµ±¸ÀÔ´Ï´Ù. ÀÌ ÇÁ·Î±×·¥Àº Àбâ Àü¿ë µµ±¸À̹ǷΠÀúÀå¼Ò¸¦ ÀüÇô º¯°æÇÏÁö ¾Ê½À´Ï´Ù. ÀüÇüÀûÀ¸·Î svnlookÀº Ä¿¹ÔµÉ º¯°æ »çÇ×À» º¸°íÇϰųª(pre-commit ÈÅ) ¹æ±Ý Ä¿¹ÔµÈ °ÍÀÌ ¹«¾ùÀÎÁö º¸°íÇÏ´Â(post-commit ÈÅ) ÈÅ¿¡ ÀÇÇؼ­ »ç¿ëµË´Ï´Ù. ÀúÀå¼Ò °ü¸®ÀÚ´Â ÀúÀå¼Ò Áø´ÜÀ» À§Çؼ­ ÀÌ ÅøÀ» »ç¿ëÇÒ °ÍÀÔ´Ï´Ù. svnlookÀº »ç¿ë¹ýÀÌ ´Ü¼øÇÕ´Ï´Ù. $ svnlook help general usage: svnlook SUBCOMMAND REPOS_PATH [ARGS & OPTIONS ...] Note: any subcommand which takes the '--revision' and '--transaction' options will, if invoked without one of those options, act on the repository's youngest revision. Type "svnlook help <subcommand>" for help on a specific subcommand. … svnlookÀÇ ÇÏÀ§ ¸í·É¾î ´ëºÎºÐÀº ¸®ºñÀüÀ̳ª Æ®·£Àè¼Ç Æ®¸®¸¦ ´Ù·ç¸ç, Æ®¸® ÀÚü¿¡ ´ëÇÑ Á¤º¸¸¦ º¸¿©Áְųª ÀúÀå¼ÒÀÇ ¿¹Àü ¸®ºñÀüµé°ú ¾î¶»°Ô ´Ù¸¥Áö º¸¿©ÁÝ´Ï´Ù. ¸®ºñÀüÀ̳ª Æ®·£Àè¼ÇÀ» ÁöÁ¤Çϱâ À§Çؼ­ °ú ¿É¼ÇÀ» »ç¿ëÇϽʽÿÀ. ¸®ºñÀü ¹øÈ£´Â ÀÚ¿¬¼ö·Î Ç¥½ÃÇÏÁö¸¸ Æ®·£Àè¼Ç À̸§Àº ¾ËÆĺª°ú ¼ýÀÚ·Î ±¸¼ºµÈ ¹®ÀÚ¿­·Î Ç¥½ÃÇÑ´Ù´Â °ÍÀ» ÁÖÀÇÇϼ¼¿ä. ÆÄÀϽýºÅÛÀº Ä¿¹ÔµÇÁö ¾ÊÀº Æ®·£Àè¼Ç(¾ÆÁ÷ »õ ¸®ºñÀüÀ¸·Î ¹Ù²îÁö ¾ÊÀº Æ®·£Àè¼Ç)¸¸À» Ç¥½ÃÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ±â¾ïÇϼ¼¿ä. ¾Æ¸¶ ´ëºÎºÐÀÇ ÀúÀå¼Ò¿¡´Â ±×·± Æ®·£Àè¼ÇÀÌ ¾øÀ» °ÍÀÔ´Ï´Ù. º¸Åë Æ®·£Àè¼ÇÀº Ä¿¹ÔµÇ°Å³ª Ä¿¹ÔÀÌ ÁßÁöµÈ ÈÄ Áö¿öÁö±â ¶§¹®ÀÔ´Ï´Ù. À̳ª ¿É¼ÇÀ» µÑ ´Ù ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é svnlookÀº ÃÖ½ÅÀÇ(ȤÀº HEAD) ¸®ºñÀüÀ» Á¶»çÇÕ´Ï´Ù. µû¶ó¼­ /path/to/repos¿¡ ÀÖ´Â ÀúÀå¼ÒÀÇ ÃֽŠ¸®ºñÀüÀÌ 19ÀÏ ¶§ ¾Æ·¡¿¡ ÀÖ´Â µÎ ¸í·ÉÀº ¿Ïº®È÷ ¶È°°½À´Ï´Ù. $ svnlook info /path/to/repos $ svnlook info /path/to/repos --revision 19 ÀÌ ±ÔÄ¢¿¡ ´ëÇÑ À¯ÀÏÇÑ ¿¹¿Ü´Â svnlook youngestÀÔ´Ï´Ù. ÀÌ°ÍÀº ¾Æ¹« ¿É¼Çµµ ÃëÇÏÁö ¾Ê°í, HEAD ¸®ºñÀüÀÇ ¹øÈ£¸¦ Ç¥½ÃÇÒ »ÓÀÔ´Ï´Ù. $ svnlook youngest /path/to/repos 19 svnlookÀÇ Ãâ·ÂÀº »ç¶÷ÀÌ ÀÐÀ» ¼öµµ ÀÖ°í ÄÄÇ»ÅÍ°¡ ÀÚµ¿À¸·Î ó¸®ÇÒ ¼öµµ ÀÖµµ·Ï ¼³°èµÇ¾ú½À´Ï´Ù. ÇÏÀ§ ¸í·É¾î info¸¦ º¾½Ã´Ù. $ svnlook info path/to/repos sally 2002-11-04 09:29:13 -0600 (Mon, 04 Nov 2002) 27 Added the usual Greek tree. info ÇÏÀ§ ¸í·É¾îÀÇ Ãâ·ÂÀº ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾî ÀÖ½À´Ï´Ù. ÀÛ¾÷ÀÚ, ÁÙ¹Ù²Þ ³¯Â¥, ÁÙ¹Ù²Þ ·Î±× ¸Þ¼¼ÁöÀÇ ±æÀÌ, ÁÙ¹Ù²Þ ·Î±× ¸Þ¼¼Áö, ÁÙ¹Ù²Þ ÀÌ Ãâ·ÂÀº Àΰ£ÀÌ ÀÐÀ» ¼ö°¡ ÀÖ½À´Ï´Ù. ÀÏÀÚÀÇ Å¸ÀÓ ½ºÅÆÇÁ µîÀº ¹«¾ùÀΰ¡ ¹ÙÀ̳ʸ® Ç¥Çö°ú °°Àº °ÍÀÌ ¾Æ´Ï°í ÅؽºÆ® Çü½ÄÀÌ µÇ¾î ÀÖ½À´Ï´Ù. ±×·¯³ª ÀÌ°ÍÀº ¶Ç ¸Ó½Åµµ Çؼ®ÇÒ ¼ö ÀÖ´Â Çü½ÄÀÇ °ÍÀÔ´Ï´Ù — ·Î±× ¸Þ¼¼Áö´Â º¹¼öÇà¿¡ °ÉÄ¥ ¼ö°¡ ÀÖ¾î ±æÀÌÀÇ Á¦ÇÑÀÌ ¾ø±â ¶§¹®¿¡ svnlook ´Â ¸Þ¼¼Áö ÀÚ½ÅÀÇ ¾Õ¿¡ ±× ±æÀ̸¦ Ç¥½ÃÇÕ´Ï´Ù. ÀÌ°ÍÀ¸·Î ÀÌ Ä¿¸àµåÀÇ ½ºÅ©¸³Æ®³ª ´Ù¸¥ ·¡ÆÛ ÇÁ·Î±×·¥Àº ¿µ¸®ÇÑ ÆÇ´ÜÀ» ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. ¿¹¸¦ µé¾î ¸Þ¼¼Áö¿¡ ¾ó¸¶³ªÀÇ ¸Þ¸ð¸®¸¦ ÇÒ´çÇϸé ÁÁÀºÁö ¶óµçÁö À̺¥Æ®Áß¿¡¼­ Àû¾îµµ ¸î ¹ÙÀÌÆ® ½ºÅµ Çصµ µ¥ÀÌÅÍ ½ºÆ®¸²ÀÌ ³¡³ª°Ô µÇÁö ¾Ê´ÂÁö µîÀ» ¾Æ´Â °ÍÀÌ ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÚÁÖ ÀÖ´Â ´Ù¸¥ svnlook ÀÇ »ç¿ë¹ýÀº ¸®ºñÀü ¶Ç´Â Æ®·£Àè¼Ç(transaction) Æ®¸®ÀÇ ½ÇÁ¦ÀÇ ³»¿ëÀ» º¸´Â °ÍÀÔ´Ï´Ù. svnlook tree Ä¿¸àµåÀÇ Ãâ·ÂÀ» Á¶»çÇØ ÁöÁ¤ÇÑ Æ®¸® ³»ºÎÀÇ µð·ºÅ丮¿Í ÆÄÀÏÀ» Ç¥½Ã½ÃÅ°¸é(±×¸®°í ¿É¼ÇÀ¸·Î¼­ °¢°¢ÀÇ ÆнºÀÇ ÆÄÀÏ ½Ã½ºÅÛ ¸®ºñÀü ID¸¦ Ç¥½Ã½ÃÅ°¸é) °ü¸®ÀÚ´Â Á×¾î ¹ö¸° °Íó·³ º¸ÀÌ´Â Æ®·£Àè¼Ç(transaction)¸¦ ¾ÈÀü¿¡ Áö¿ï ¼ö ÀÖÀ»±î Á¦¹ßÀ» ÆÇ´ÜÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ¶Ç Subversion °³¹ßÀÚµµ ÆÄÀÏ ½Ã½ºÅÛ ¿¡ °ü·ÃÇÑ ¹®Á¦ÀÇ Áø´ÜÀ» ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. $ svnlook tree path/to/repos --show-ids / <0. 0.1> A/ <2. 0.1> B/ <4. 0.1> lambda <5. 0.1> E/ <6. 0.1> alpha <7. 0.1> beta <8. 0.1> F/ <9. 0.1> mu <3. 0.1> C/ <a. 0.1> D/ <b. 0.1> gamma <c. 0.1> G/ <d. 0.1> pi <e. 0.1> rho <f. 0.1> tau <g. 0.1> H/ <h. 0.1> chi <i. 0.1> omega <k. 0.1> psi <j. 0.1> iota <1. 0.1> svnlookÀº ±× ¹Û¿¡µµ ¾Õ¿¡¼­ »ìÆ캻 Á¤º¸ÀÇ ÀϺθ¦ Ç¥½ÃÇϰųª, ÁöÁ¤ÇÑ ¸®ºñÀüÀ̳ª Æ®·£Àè¼Ç¿¡¼­ ¾î´À °æ·Î°¡ ¼öÁ¤µÇ¾ú´ÂÁö¸¦ º¸°íÇϰųª, ÆÄÀÏÀ̳ª µð·ºÅ丮¿¡ ´ëÇÑ ÅؽºÆ®³ª ¼Ó¼ºÀÇ Â÷ÀÌÁ¡À» Ç¥½ÃÇϰųª ÇÏ´Â µîÀÇ ¿©·¯°¡Áö ¹®ÀǸ¦ ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¾Æ·¡¿¡ svnlookÀÌ Á¦°øÇÏ´Â ÇÏÀ§ ¸í·É¾îÀÇ ¸ñ·ÏÀÌ ÀÖ½À´Ï´Ù. author ±× Æ®¸®¸¦ ¸¸µç »ç¶÷ÀÔ´Ï´Ù. cat Æ®¸®¿¡ Àִ ƯÁ¤ÀÇ ÆÄÀÏÀÇ ³»¿ëÀ» Ç¥½ÃÇÕ´Ï´Ù. date Æ®¸®ÀÇ ³¯Â¥ÀÔ´Ï´Ù. changed ±× Æ®¸®¿¡¼­ º¯°æÀÌ ÀÖ¾ú´ø ÆÄÀÏ°ú µð·ºÅ丮 ¸ñ·ÏÀ» º¸¿©ÁÝ´Ï´Ù. diff º¯°æµÈ ÆÄÀÏÀÇ unified diff¸¦ Ç¥½ÃÇÕ´Ï´Ù. dirs-changed ÀÚ½ÅÀÌ º¯°æµÇ¾ú°Å³ª ÇÏÀ§ÀÇ ÆÄÀÏÀÌ º¯°æµÈ µð·ºÅ丮ÀÇ ¸ñ·ÏÀ» º¸¿©ÁÝ´Ï´Ù. history ¹öÀüÈ­ µÈ °æ·Î(º¯°æÀ̳ª º¹»ç°¡ ÀϾ °÷)ÀÇ È÷½ºÅ丮Áß¿¡¼­ Èï¹Ì·Î¿î ÁöÁ¡À» Ç¥½ÃÇÕ´Ï´Ù. info Æ®¸®ÀÇ ÀÛ¼ºÀÚ, ³¯Â¥, ·Î±× ¸Þ¼¼ÁöÀÇ ¹®ÀÚ ¼ö, ·Î±× ¸Þ¼¼Áö¸¦ Ç¥½ÃÇÕ´Ï´Ù. log Æ®¸®ÀÇ ·Î±× ¸Þ¼¼Áö¸¦ Ç¥½ÃÇÕ´Ï´Ù. proplist Æ®¸®¿¡ ÀÖ´Â °æ·Î¿¡ ´ëÇؼ­ ¼³Á¤µÈ ¼Ó¼ºÀÇ À̸§°ú °ªÀ» Ç¥½ÃÇÕ´Ï´Ù. tree Æ®¸®ÀÇ ¸ñ·ÏÀ» Ç¥½ÃÇÕ´Ï´Ù. ¿É¼ÇÀ¸·Î °¢°¢ÀÇ °æ·Î¿¡ °áÇÕµÈ ÆÄÀϽýºÅÛ ³ëµå ¸®ºñÀüÀÇ ID¸¦ Ç¥½ÃÇÕ´Ï´Ù. youngest ÃֽŠ¸®ºñÀü ¹øÈ£¸¦ Ç¥½ÃÇÕ´Ï´Ù. svnadmin svnadminÀº ÀúÀå¼Ò °ü¸®ÀÚ°¡ °¡Àå ÀÚÁÖ ÀÌ¿ëÇÏ´Â ÇÁ·Î±×·¥ÀÔ´Ï´Ù. Subversion ÀúÀå¼Ò¸¦ ÀÛ¼ºÇÏ´Â °Í ¿Ü¿¡µµ ÀÌ ÇÁ·Î±×·¥Àº ÀúÀå¼Ò¸¦ À¯Áöº¸¼ö Çϴµ¥ ¾²ÀÌ´Â ´Ù¾çÇÑ Á¶ÀÛÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù. svnadminÀÇ »ç¿ë¹ýÀº svnlook°ú ºñ½ÁÇÕ´Ï´Ù. $ svnadmin help general usage: svnadmin SUBCOMMAND REPOS_PATH [ARGS & OPTIONS ...] Type "svnadmin help <subcommand>" for help on a specific subcommand. Available subcommands: create dump help (?, h) … ÀÌ¹Ì ¾Õ¿¡¼­ svnadminÀÇ ÇÏÀ§ ¸í·É¾î create¸¦ º¸¾Ò½À´Ï´Ù(ÂüÁ¶). ´Ù¸¥ ÇÏÀ§ ¸í·É¾îÀÇ ´ëºÎºÐÀ» ÀÌ Àå¿¡¼­ ¼³¸íÇÕ´Ï´Ù. ÀÏ´Ü ÀÌ¿ë °¡´ÉÇÑ ÇÏÀ§ ¸í·É¾î Àüü¸¦ »ìÆ캾½Ã´Ù. create Subversion ÀúÀå¼Ò¸¦ ¸¸µì´Ï´Ù. dump ÀúÀå¼Ò¿¡¼­ ÁöÁ¤ ¹üÀ§ÀÇ ¸®ºñÀüÀÇ ³»¿ëÀ» portable ´ýÇÁ Çü½ÄÀ¸·Î ´ýÇÁÇÕ´Ï´Ù. list-dblogs ÀúÀå¼Ò¿¡ °ü°èµÈ ¹öŬ¸® DB ·Î±× ÆÄÀÏÀÇ °æ·Î ¸ñ·ÏÀ» º¸¿©ÁÝ´Ï´Ù. ÀÌ ¸ñ·ÏÀº ¸ðµç ·Î±× ÆÄÀÏÀ» Æ÷ÇÔÇÕ´Ï´Ù. ÇöÀç SubversionÀÌ ÀÌ¿ëÇÏ°í ÀÖ´Â °Í»Ó¸¸ ¾Æ´Ï¶ó ´õÀÌ»ó ÀÌ¿ëÇÏÁö ¾Ê´Â °Íµµ Æ÷ÇÔÇؼ­ ¸»ÀÌÁö¿ä. list-unused-dblogs ÀúÀå¼Ò¿¡ °ü°èµÈ ¹öŬ¸® DB ·Î±× ÆÄÀÏ Áß¿¡¼­ ´õÀÌ»ó »ç¿ëµÇÁö ¾Ê´Â ·Î±× ÆÄÀÏÀÇ °æ·Î ¸ñ·ÏÀ» º¸¿©ÁÝ´Ï´Ù. ÀÌ·± ·Î±× ÆÄÀϵéÀº ÀúÀå¼Ò ·¹À̾ƿôÀ¸·ÎºÎÅÍ ¾ÈÀüÇÏ°Ô »èÁ¦ÇÒ ¼ö°¡ ÀÖÁö¸¸ ÀúÀå¼Ò¸¦ º¹±¸ÇÒ ¶§ ÇÊ¿äÇÒ °Í¿¡ ´ëºñÇØ º¸°üÇÒ ÇÊ¿ä°¡ ÀÖÀ» ¼öµµ ÀÖ½À´Ï´Ù. load ÇÏÀ§ ¸í·É¾î dump¿¡¼­ »ý¼ºµÈ °Í°ú °°Àº portable ´ýÇÁ Çü½ÄÀÇ µ¥ÀÌÅÍ ½ºÆ®¸²À¸·ÎºÎÅÍ ÀúÀå¼Ò·Î ¸®ºñÀüÀÇ ¸ðÀÓÀ» ºÒ·¯µéÀÔ´Ï´Ù. lstxns ÇöÀç ÀúÀå¼Ò¿¡ Á¸ÀçÇÏ°í ÀÖ´Â Ä¿¹ÔµÇÁö ¾ÊÀº Subversion Æ®·£Àè¼ÇÀÇ À̸§ ¸ñ·ÏÀ» º¸¿©ÁÝ´Ï´Ù. recover ÇÊ¿ä¿¡ µû¶ó¼­ ÀúÀå¼ÒÀÇ º¹±¸ Á¶Ä¡¸¦ ½ÇÇàÇÕ´Ï´Ù. ÀϹÝÀûÀ¸·Î ÇÁ·Î¼¼½º°¡ ÀúÀå¼Ò¿ÍÀÇ Åë½ÅÀ» Á¤»óÀûÀ¸·Î Á¾·áÇÏÁö ¸øÇÏ°í ¿À·ù°¡ ¹ß»ýÇÑ ÈÄ¿¡ ½ÇÇàÇÏ°Ô µË´Ï´Ù. rmtxns ÀúÀå¼Ò¿¡¼­ Subversion Æ®·£Àè¼ÇÀ» ±ú²ýÀÌ »èÁ¦ÇÕ´Ï´Ù(ÇÏÀ§ ¸í·É¾î lstxnsÀÇ Ãâ·ÂÀ» ÀÌ ÇÁ·Î±×·¥¿¡ ÀÔ·ÂÇϸé Æí¸®ÇÕ´Ï´Ù). setlog ÀúÀå¼Ò¿¡¼­ ÁöÁ¤ ¸®ºñÀüÀÇ svn:log(Ä¿¹Ô ·Î±× ¸Þ¼¼Áö) ¼Ó¼ºÀÇ °ªÀ» »õ·Î¿î °ªÀ¸·Î ¹Ù²ß´Ï´Ù. verify ÀúÀå¼ÒÀÇ ³»¿ëÀ» °ËÁõÇÕ´Ï´Ù. °ËÁõ ÀýÂ÷¿¡´Â ÀúÀå¼Ò¿¡ ÀÖ´Â ¹öÀüÈ­µÈ µ¥ÀÌÅÍÀÇ Ã¼Å©¼¶ ºñ±³µµ Æ÷ÇԵ˴ϴÙ. svnshell.py Subversion ¼Ò½º Æ®¸®¿¡´Â ÀúÀå¼Ò¿¡ ´ëÇÑ ½© ºñ½ÁÇÑ ÀÎÅÍÆäÀ̽ºµµ ÀÖ½À´Ï´Ù. svnshell.py Python ½ºÅ©¸³Æ®(¼Ò½º Æ®¸®ÀÇ tools/examples/¿¡ ÀÖ½À´Ï´Ù)´Â ÀúÀå¼Ò¿Í ÆÄÀÏ ½Ã½ºÅÛ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®¿¡ Á¢¼ÓÇϱâ À§Çؼ­ SubversionÀÇ ¾ð¾î Á¦ÈÞ(language bindings, ÀÌ°ÍÀ» µ¿ÀÛ½ÃÅ°·Á¸é ÄÄÆÄÀÏ°ú ÀνºÅçÀ» ÀûÀýÈ÷ ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù¸¸)¸¦ »ç¿ëÇÕ´Ï´Ù. ½ÇÇàÇϸé ÀÌ ÇÁ·Î±×·¥Àº ½© ÇÁ·Î±×·¥°ú °°ÀÌ µ¿ÀÛÇϸç, ÀúÀå¼ÒÀÇ ´Ù¾çÇÑ µð·ºÅ丮¸¦ »ìÆ캼 ¼ö ÀÖ½À´Ï´Ù. Ãʱ⠻óÅ¿¡¼­´Â ÀúÀå¼Ò HEAD ¸®ºñÀüÀÇ ·çÆ® µð·ºÅ丮¿¡ À§Ä¡Çϸç, ÀÌ »óÅ·Π¸í·É prompt°¡ Ç¥½ÃµË´Ï´Ù. ¾ðÁ¦¶óµµ help ¸í·ÉÀ¸·Î »ç¿ë °¡´ÉÇÑ ¸í·É¾î ¸ñ·ÏÀ» Ç¥½ÃÇÒ ¼ö ÀÖ½À´Ï´Ù. $ svnshell.py /path/to/repos <rev: 2 />$ help Available commands: cat FILE : FILEÀÇ ³»¿ëÀ» º¸¿©ÁÝ´Ï´Ù. cd DIR : DIRÀ̶ó´Â µð·ºÅ丮·Î À̵¿ÇÕ´Ï´Ù. exit : ½©À» Á¾·áÇÕ´Ï´Ù. ls [PATH] : ÇöÀç µð·ºÅ丮¿¡ Æ÷ÇÔµÈ ÆÄÀÏ ¸ñ·ÏÀ» º¸¿©ÁÝ´Ï´Ù. lstxns : ³»¿ëÀ» º¼ ¼ö ÀÖ´Â Æ®·£Àè¼ÇÀÇ ¸ñ·ÏÀ» º¸¿©ÁÝ´Ï´Ù. setrev REV : »ìÆ캼 ¸®ºñÀüÀ» ¼³Á¤ÇÕ´Ï´Ù. settxn TXN : »ìÆ캼 Æ®·£Àè¼ÇÀ» ¼³Á¤ÇÕ´Ï´Ù. youngest : »ìÆ캼 ¼ö ÀÖ´Â °¡Àå ÃֽŠ¸®ºñÀü ¹øÈ£¸¦ º¸¿©ÁÝ´Ï´Ù. <rev: 2 />$ ÀúÀå¼ÒÀÇ µð·ºÅ丮 ±¸Á¶¸¦ µ¹¾Æ´Ù´Ï´Â ¹æ¹ýÀº º¸Åë Unix³ª Windows ½©¿¡¼­¿Í °°ÀÌ cd¸í·É¾î¸¦ »ç¿ëÇÕ´Ï´Ù. ¸í·É prompt´Â Ç×»ó Áö±Ý º¸°í ÀÖ´Â °ÍÀÌ ¾î´À ¸®ºñÀü(prefixed by rev:)ÀÎÁö ¶Ç´Â ¾î´À Æ®·£Àè¼Ç(prefixed by txn:)ÀÎÁö, ¶Ç ±× ¾È¿¡¼­ ¾î´À °æ·Î¿¡ ¿ÍÀÖ´ÂÁö¸¦ Ç¥½ÃÇÕ´Ï´Ù. ÇöÀçÀÇ ¸®ºñÀüÀ̳ª Æ®·£Àè¼ÇÀº °¢°¢setrev ¿Í settxn¸í·É¾î·Î º¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù. Unix ½©°ú °°ÀÌ ÇöÀç µð·ºÅ丮ÀÇ ³»¿ëÀ» Ç¥½ÃÇϴµ¥ ls¸í·É¾î¸¦, ÆÄÀÏ ³»¿ëÀ» º¸´Âµ¥cat¸í·ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. svnshellÀ» ÀÌ¿ëÇÏ¿© ÀúÀå¼Ò µÑ·¯º¸±â <rev: 2 />$ ls REV AUTHOR NODE-REV-ID SIZE DATE NAME ---------------------------------------------------------------------------- 1 sally < 2.0. 1> Nov 15 11:50 A/ 2 harry < 1.0. 2> 56 Nov 19 08:19 iota <rev: 2 />$ cd A <rev: 2 /A>$ ls REV AUTHOR NODE-REV-ID SIZE DATE NAME ---------------------------------------------------------------------------- 1 sally < 4.0. 1> Nov 15 11:50 B/ 1 sally < a. 0.1> Nov 15 11:50 C/ 1 sally < b. 0.1> Nov 15 11:50 D/ 1 sally < 3.0. 1> 23 Nov 15 11:50 mu <rev: 2 /A>$ cd D/G <rev: 2 /A/D/G>$ ls REV AUTHOR NODE-REV-ID SIZE DATE NAME ---------------------------------------------------------------------------- 1 sally < e. 0.1> 23 Nov 15 11:50 pi 1 sally < f. 0.1> 24 Nov 15 11:50 rho 1 sally < g. 0.1> 24 Nov 15 11:50 tau <rev: 2 /A>$ cd ../.. <rev: 2 />$ cat iota This is the file 'iota'. Added this text in revision 2. <rev: 2 />$ setrev 1; cat iota This is the file 'iota'. <rev: 1 />$ exit $ ¿¹Á¦¿¡¼­ º¼ ¼ö ÀÖ´Â °Íó·³ º¹¼öÀÇ ¸í·É¾î¸¦ ¼¼¹ÌÄÝ·ÐÀ¸·Î ±¸ºÐÇÏ¿© ÇÑ ÁÙ¿¡ ¾µ ¼ö ÀÖ½À´Ï´Ù. ¶Ç svnshellÀº »ó´ë °æ·Î¿Í Àý´ë °æ·ÎÀÇ °³³äÀ» ÀÌÇØÇÒ ¼ö ÀÖÀ¸¹Ç·Î ". " ".."°°ÀÌ Æ¯º°ÇÑ µð·ºÅ丮 À̸§µµ ÀÌÇØÇÒ ¼ö ÀÖ½À´Ï´Ù. youngest ¸í·É¾î´Â ÃֽŠ¸®ºñÀü ¹øÈ£¸¦ Ç¥½ÃÇÕ´Ï´Ù. ÀÌ°ÍÀº setrev ¸í·É¾î·Î ÁöÁ¤ÇÏ´Â ÀμöÀÇ ¸®ºñÀü ¹üÀ§¸¦ ¾Æ´Âµ¥ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. 0(¿µ)ºÎÅÍ youngest »çÀÌÀÇ ¸ðµç ¸®ºñÀü(¸®ºñÀü ¹øÈ£´Â Á¤¼öÀÎ °ÍÀ» ±â¾ïÇϼ¼¿ä)À» ¿­¶÷ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ¿­¶÷ °¡´ÉÇÑ Æ®·£Àè¼ÇÀÇ ¹üÀ§¸¦ ¾Æ´Âµ¥´Â °£´ÜÇÑ ¹æ¹ýÀÌ ¾ø½À´Ï´Ù. lstxns ¸í·ÉÀ» ÀÌ¿ëÇÏ¿© ¿­¶÷ÇÒ ¼ö ÀÖ´Â Æ®·£Àè¼ÇÀÇ ¸ñ·ÏÀ» Á¶»çÇϼ¼¿ä. ÀÌ ¸ñ·ÏÀº svnadmin lstxns ¸í·ÉÀÌ º¸¿©ÁÖ´Â °Í°ú °°Àº ¸ñ·ÏÀÌ°í, svnlookÀÇ ¿É¼Ç¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â Æ®·£Àè¼ÇµéÀÇ ¸ñ·ÏÀ̱⵵ ÇÕ´Ï´Ù. ½©ÀÇ ÀÌ¿ëÀ» Á¾·áÇÏ·Á¸é exit ¸í·É¾î¸¦ »ç¿ëÇÕ´Ï´Ù. ¶Ç´Â Control-D(Win32 Python ÆÐÅ°Áö¿¡¼­´Â Windows Ç¥ÁØÀÎ Control-Z¸¦ »ç¿ëÇÕ´Ï´Ù)¸¦ ´­·¯ EOF(ÆÄÀÏ ³¡)¹®ÀÚ¸¦ º¸³»µµ µË´Ï´Ù. 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)¸¦ Á¦°øÇÏ°í ÀÖ½À´Ï´Ù. $ svnadmin list-unused-dblogs /path/to/repos /path/to/repos/log. 0000000031 /path/to/repos/log. 0000000032 /path/to/repos/log. 0000000033 $ svnadmin list-unused-dblogs /path/to/repos | xargs rm ## disk space reclaimed! 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ÀÇ Â÷À̸¦ ÀǽÄÇÏÁö ¾Ê°í µ¥ÀÌŸº£À̽º ¸Ó½Å°£¿¡ Àü¼Û Çϴµ¥ Æí¸®ÇÑ ¹æ¹ýÀÔ´Ï´Ù. ÀúÀå¼Ò û¼Ò Subversion ÀúÀå¼Ò´Â ÀϹÝÀûÀ¸·Î ÀÏ´Ü ÇÑ ¹ø ¼³Á¤ÇÏ¸é ±×´ÙÁö ÁÖÀǸ¦ ±â¿ïÀÏ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. ±×·¯³ª °ü¸®ÀÚ¿¡ ÀÇÇÑ ¸î°³ÀÇ º¸Á¶°¡ ÇÊ¿äÇÒÁöµµ ¸ð¸¨´Ï´Ù. svnadmin À¯Æ¿¸®Æ¼ ¿¡´Â ´ÙÀ½°ú °°Àº ÀÛ¾÷À» µ½±â À§ÇÑ ±â´ÉÀÌ ÀÖ½À´Ï´Ù. Ä¿¹Ô ·Î±× ¸Þ½ÃÁö ¼öÁ¤ Á×Àº Æ®·£Àè¼Ç(transaction) »èÁ¦ ±»¾îÁ® ¹ö¸° ÀúÀå¼Ò(repository) º¹±¸ ÀúÀå¼ÒÀÇ ³»¿ëÀ» ´Ù¸¥ ÀúÀå¼Ò·Î ¿Å±â±â svnadminÀÇ ÇÏÀ§ ¸í·É¾î·Î °¡Àå ÀÚÁÖ »ç¿ëµÇ´Â °ÍÀº ¾Æ¸¶ setlogÀÏ °ÍÀÔ´Ï´Ù. Æ®·£Àè¼ÇÀÌ ÀúÀå¼Ò(repository)¿¡ Ä¿¹ÔµÇ¾î »õ·Î¿î ¸®ºñÀüÀ» ¸¸µé¾úÀ» ¶§, ·Î±× ¸Þ½ÃÁö´Â ±× ¸®ºñÀü ÀÚüÀÇ ¹öÀüÈ­ µÇÁö ¾ÊÀº ¼Ó¼ºÀ¸·Î¼­ ÀúÀåµË´Ï´Ù. ¹Ù²Ù¾î ¸»Çϸé ÀúÀå¼Ò´Â ±× ¼Ó¼ºÀÇ ¸¶Áö¸· °ª¸¸À» ±â¾ïÇÏ°í ÀÖ°í ÀÌÀü °ÍÀº ¹ö¸®°Ô µË´Ï´Ù. °¡²û »ç¿ëÀÚ´Â ·Î±× ¸Þ¼¼Áö¿¡¼­ ½Ç¼ö¸¦ ã¾Æ³À´Ï´Ù(¿ÀÀÚ³ª À߸øµÈ Á¤º¸ µî). ¸¸¾à ÀúÀå¼Ò°¡( pre-revprop-change ¿Í post-revprop-change ÈÅÀ» »ç¿ëÇØ. ÂüÁ¶) Ä¿¹Ô ¿Ï·á ÈÄ ÀÌ ·Î±× ¸Þ½ÃÁöÀÇ º¯°æÀ» ¹Þ¾ÆµéÀ̵µ·Ï ¼³Á¤µÇ¾ú´Ù¸é »ç¿ëÀÚ´Â svn ÇÁ·Î±×·¥ÀÇ propset ¸í·É¾î¸¦ »ç¿ëÇØ ·Î±× ¸Þ½ÃÁö¸¦ ¿ø°ÝÀ¸·Î ¼öÁ¤ ÇÒ ¼ö ÀÖ½À´Ï´Ù. (ÂüÁ¶) ±×·¯³ª, Á¤º¸°¡ ¿µ¿øÈ÷ ¾ø¾îÁö´Â ÀÏÀ» ¸·±â À§ÇØ Subversion ÀúÀå¼Ò´Â ±âº»°ªÀ¸·Î ±× ±â´ÉÀÌ ²¨Á®ÀÖ½À´Ï´Ù. ¹öÀüÈ­ µÇÁö ¾Ê´Â ¼Ó¼ºÀº °ü¸®ÀÚ¸¸ º¯°æÇÒ ¼ö ÀÖµµ·Ï ±âº»°ªÀ¸·Î ¼³Á¤µÇ¾î ÀÖ½À´Ï´Ù. ¸¸¾à °ü¸®ÀÚ°¡ ·Î±× ¸Þ½ÃÁö¸¦ º¯°æÇÒ ÇÊ¿ä°¡ ÀÖ´Â °æ¿ì svnadmin setlog¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ ¸í·É¾î´Â ÀúÀå¼Ò(repository)ÀÇ ÁöÁ¤ÇÑ ¸®ºñÀüÀÇ ·Î±× ¸Þ¼¼Áö(svn:log ¼Ó¼º )À» ÁöÁ¤ÇÑ ÆÄÀϷκÎÅÍ ÀоîµéÀÎ °ªÀ¸·Î ¹Ù²ß´Ï´Ù. $ echo "Here is the new, correct log message" > newlog.txt $ svnadmin setlog myrepos newlog.txt -r 388 ±× ·Î±× ¸Þ¼¼Áö¸¦ ¹ö¸®´Â±º! °ü¸®ÀÚ´Â svnadmin setlog ´Â ÀúÀå¼Ò(repository)¿¡ ÇÒ °ÍÀ̾ú´Ù ¾î¶°ÇÑ ¸®ºñÀü ÀÚ»êÀÇ Ç«½º Ŭ¸³Æ® µµ ¿ìȸ ÇØ ¹ö¸®´Â °Í¿¡ ÁÖÀÇÇØ¾ß ÇÕ´Ï´Ù. ÀÌ ÇÏÀ§ ¸í·É¾î¿¡´Â ¼öÁ¤ ´ë»óÀ¸·Î ÇØ ¿Ã¹Ù¸¥ ¸®ºñÀü ¹øÈ£¸¦ ÁöÁ¤ÇØ ÀÖ´Â °ÍÀ» È®ÀÎÇÏ°í µî ¼¼½ÉÀÇ ÁÖÀ§¸¦ ±â¿ï¿© ÁÖ¼¼¿ä. ´Ù¸¥ ÀÚÁÖ ÀÖ´Â svnadmin ÀÇ »ç¿ë¹ýÀº Á¾·áÇÏ°í ÀÖÁö ¾Ê´Ù —¾Æ¸¶ Á×¾î ¹ö¸°—Subversion Æ®·£Àè¼Ç(transaction)¿¡ °üÇÑ ÀúÀå¼Ò(repository)¿¡ÀÇ ¹®ÀÇÀÔ´Ï´Ù. Ä¿¹ÔÀÌ ½ÇÆÐÇßÀ» ¶§ º¸Åë Æ®·£Àè¼Ç(transaction)´Â ¿¹»Ú°Ô ¼Ò°ÅµË´Ï´Ù. Áï Æ®·£Àè¼Ç(transaction) (Àº)´Â ÀúÀå¼Ò(repository)·ÎºÎÅÍ »èÁ¦µÇ¾î ±× Æ®·£Àè¼Ç(transaction)¿¡(ÀÎ ¸¸Å­) °ü·ÃÇß´Ù µ¥ÀÌÅ͵µ ÀÌ¿Í °°ÀÌ »èÁ¦µË´Ï´Ù. ±×·¯³ª, ÀÚÁÖ Æ®·£Àè¼Ç(transaction)ÀÇ Ã»¼Ò°¡ ÀϾÁö ¾Ê°í ½ÇÆÐÇÏ´Â °ÍÀÌ ÀÖ½À´Ï´Ù. ÀÌ°Í¿¡´Â ¸î°³ÀÇ ÀÌÀ¯°¡ »ý°¢µË´Ï´Ù: ¾Æ¸¶ Ŭ¶óÀ̾ðÆ®ÀÇ Á¶ÀÛÀÌ À¯Àú¿¡ ÀÇÇØ ³­ÆøÇÏ°Ô Á¾·áµÇ¾ú´ÂÁö ³×Æ®¿öÅ©ÀÇ ÀÌ»óµîÀÌ Ã³¸®ÀÇ µµÁß¿¡ ÀϾÀ» °æ¿ìÀÔ´Ï´Ù. ÀÌÀ¯¿¡ °ü°è¾øÀÌ ÀÌ·¯ÇÑ Á×¾ú´Ù Æ®·£Àè¼Ç(transaction)´Â ÀúÀå¼Ò(repository)¸¦ ¾îÁú·¯ µð½ºÅ©¸¦ ¸ÔÀ» »ÓÀÔ´Ï´Ù. svnadminÀÇlstxns Ä¿¸àµå (À»)¸¦ »ç¿ëÇØ ±× ½ÃÁ¡¿¡¼­ÀÇ ¹Ì¿Ï·áÀÇ Æ®·£Àè¼Ç(transaction)ÀÇ À̸§ÀÇ À϶÷Ç¥½Ã ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. $ svnadmin lstxns myrepos 19 3a1 a45 $ Ãâ·Â °á°úÀÇ °¢°¢ÀÇ Ç׸ñÀºsvnlook (¿Í ±× ¿É¼Ç)(À¸)·Î »ç¿ëÇÒ ¼ö°¡ ÀÖ¾î ´©°¡ Æ®·£Àè¼Ç(transaction)¸¦ ¸¸µé¾î ±×°ÍÀº ¾ðÁ¦·Î ¾î¶°ÇÑ º¯°æÀÌ Æ®·£Àè¼Ç(transaction)¿¡ ÀϾ´ÂÁö ¸¦ ¾Ë ¼ö°¡ ÀÖ½À´Ï´Ù. —¹Ù²Ù¾î ¸»Çϸé(ÀÚ) ±× Æ®·£Àè¼Ç(transaction)´Â »èÁ¦ ´ë»óÀ¸·Î ÇØ ¾ÈÀüÇÑ Èĺ¸Àΰ¡ ºÎµð¶ó°í ÇÏ´Â °ÍÀ»ÀÔ´Ï´Ù. ¸¸¾à ±×·¯¸é Æ®·£Àè¼Ç(transaction)ÀÇ À̸§À»svnadmin rmtxns ¿¡ °Ç³×ÁÙ ¼ö°¡ ÀÖ¾î ±× Æ®·£Àè¼Ç(transaction)´Â ¿¹»Ú°Ô »èÁ¦ µË´Ï´Ù. rmtxns ÇÏÀ§ ¸í·É¾î´Â lstxnsÀÇ Ãâ·ÂÀ» ±×´ë·Î ÀÔ·ÂÀ¸·Î¼­ ÃëÇÒ ¼öµµ ÀÖ½À´Ï´Ù! $ svnadmin rmtxns myrepos `svnadmin lstxns myrepos` $ ÀÌ·¯ÇÑ µÎ ÇÏÀ§ ¸í·É¾î¸¦ »ç¿ëÇÏ´Â °æ¿ì ÀúÀå¼Ò(repository)¸¦ ÀϽÃÀûÀ¸·Î Ŭ¶óÀ̾ðÆ®·ÎºÎÅÍ ¾×¼¼½º ÇÒ ¼ö ¾ø°Ô ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ÀÌ°ÍÀ¸·Î ¾Æ¹«µµ ´ç½ÅÀÌ Å¬¸° ¾÷À» ½ÃÀÛÇϱâ Àü¿¡ ¿Ã¹Ù¸¥ Æ®·£Àè¼Ç(transaction) (À»)¸¦ °³½ÃÇÒ ¼ö ¾ø°Ô µË´Ï´Ù. ÀÌÇÏ´Â ÀúÀå¼Ò(repository)³»ÀÇ ¹ÌÇØ°áÀÇ Æ®·£Àè¼Ç(transaction) ÀÇ °¢°¢ ºÙÀº Á¤º¸¸¦ Àçºü¸£°Ô »ý¼ºÇϱâ À§ÇÑ ¾à°£ÀÇ ½ºÅ©¸³Æ®ÀÔ´Ï´Ù: txn-info.sh (¹ÌÇØ°á Æ®·£Àè¼Ç(transaction)ÀÇ Ç¥½Ã) #! /bin/sh ### Generate informational output for all outstanding transactions in ### a Subversion repository SVNADMIN=/usr/local/bin/svnadmin SVNLOOK=/usr/local/bin/svnlook REPOS=${1} if [ x$REPOS = x ] ; then echo "usage: $0 REPOS_PATH" exit fi for TXN in `${SVNADMIN} lstxns ${REPOS}`; do echo "---[ Transaction ${TXN} ]-------------------------------------------" ${SVNLOOK} info ${REPOS} --transaction ${TXN} done ÀÌ ½ºÅ©¸³Æ®¸¦ /path/to/txn-info.sh /path/to/repos¿Í °°ÀÌ ÇØ ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. Ãâ·ÂÀº ±âº»ÀûÀ¸·Î´Âsvnlook info Ãâ·ÂÀÇ ¿©·¯°¡Áö ´ÜÆíÀ» ÀÌÀº °Í °°Àº °ÍÀÌ µË´Ï´Ù. (ÂüÁ¶) ÀÌÇÏ¿Í °°Àº ´À³¦ÀÔ´Ï´Ù: $ txn-info.sh myrepos ---[ Transaction 19 ]------------------------------------------- sally 2001-09-04 11:57:19 -0500 (Tue, 04 Sep 2001) 0 ---[ Transaction 3a1 ]------------------------------------------- harry 2001-09-10 16:50:30 -0500 (Mon, 10 Sep 2001) 39 Trying to commit over a faulty network. ---[ Transaction a45 ]------------------------------------------- sally 2001-09-12 11:09:28 -0500 (Wed, 12 Sep 2001) 0 $ º¸ÅëÀº ·Î±× ¸Þ¼¼Áö¸¦ °®°í ÀÖÁö ¾ÊÀº Á×Àº Æ®·£Àè¼Ç(transaction)°¡ º¸ÀÌ´Â °æ¿ì °»½Å(ȤÀº °Å±â¿¡ ´àÀº) Á¶ÀÛ¿¡ ½ÇÆÐÇÑ °á°úÀÔ´Ï´Ù. ÀÌ·¯ÇÑ Á¶ÀÛÀº ÀÛ¾÷ Ä«ÇÇ »óÅ°¡(hood to mimic)»óÅÂÇÏ ±×¸®°í SubversionÀÇ Æ®·£Àè¼Ç(transaction)¸¦ ÀÌ¿ëÇÕ´Ï´Ù. Ä¿¹ÔÇÏ´Â Àǵµ°¡ ÀüÇô ¾ø±â ¶§¹®¿¡ SubversionÀº ±×·¯ÇÑ Æ®·£Àè¼Ç(transaction)¿¡ ´ëÇÑ´Ù ·Î±× ¸Þ¼¼Áö¸¦ ¿ä±¸ÇÏÁö ¾Ê½À´Ï´Ù. ·Î±× ¸Þ¼¼Áö°¡ µµÂøÇÑ Æ®·£Àè¼Ç(transaction) (Àº)´Â ¾Æ¸¶ È®½ÇÈ÷ ¾î¶² Á¾·ùÀÇ Ä¿¹Ô¿¡ ½ÇÆÐÇßÀ» °æ¿ìÀÔ´Ï´Ù. ¶Ç Æ®·£Àè¼Ç(transaction)ÀÇ Å¸ÀÓ ½ºÅÆÇÁ´Â Èï¹Ì·Î¿î Á¤º¸°¡ µË´Ï´Ù — ¿¹¸¦ µé¾î ¾î°¼­ 9°³¿ùÀ̳ª Àü¿¡ ½ÃÀÛÇÑ Á¶ÀÛÀÌ ¾ÆÁ÷ ¾×ƼºêÇÏ°ÚÁö Àΰ¡? ±×·¸´Ù°í ÇÏ´Â »óÅÂÀÔ´Ï´Ù. °£´ÜÇÏ°Ô ¸»ÇØ Æ®·£Àè¼Ç(transaction)ÀÇ Å¬¸° ¾÷ÀÇ °áÁ¤Àº ¹«ºÐº°ÇÏ°Ô ÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. ¿©·¯°¡Áö Á¤º¸¿ø—¾ÆÆÄÄ¡ÀÇ ¿¡·¯ ·Î±×³ª ¾×¼¼½º ·Î±× ¼º°øÇÑ SubversionÀÇ Ä¿¹Ô ·Î±× µî µî—°¡ ¾î¶»°Ô Çϸé ÁÁÀº°¡¸¦ °áÁ¤Çϴµ¥ À־ µµ¿òÀÌ µË´Ï´Ù. ¸¶Áö¸·À¸·Î °ü¸®ÀÚ´Â ÀÚÁÖ Á×Àº Æ®·£Àè¼Ç(transaction)ÀÇ ¼ÒÀ¯ÀÚ¶ó°í »ý°¢µÇ´Â »ç¶÷°ú(emailµîÀ¸·Î) ±× Á×À½¿¡ °É¸° Æ®·£Àè¼Ç(transaction) »óŸ¦ È®ÀÎÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ÀúÀå¼Ò(repository)ÀÇ º¹±¸ ÀúÀå¼Ò(repository)ÀÇ µ¥ÀÌÅ͸¦ ÁöÅ°±â À§Çؼ­ µ¥ÀÌŸº£À̽º ¿¬±¸ ÃÖÁ¾ ´Ü°è´Â ¶ôÀÇ ±¸Á¶¸¦ ÀÌ¿ëÇÕ´Ï´Ù. ÀÌ ±¸Á¶´Â µ¥ÀÌŸº£À̽º°¡ ÀÖ´Ù ºÎºÐÀº º¹¼öÀÇ µ¥ÀÌŸº£À̽º¿¡ ¾×¼¼½º ÇÏ°í ÀÖ´Â »ç¶÷À¸·ÎºÎÅÍ µ¿½Ã¿¡ º¯°æµÇ´Â °ÍÀÌ ¾ø´Â °ÍÀ» ÇÁ·ÎÅؼÇÇØ °¢°¢ÀÇ ÇÁ·Î¼¼½º´Â µ¥ÀÌŸº£À̽º (À¸)·ÎºÎÅÍ ÀÐÈù µ¥ÀÌÅÍ°¡ Ç×»ó ¿Ã¹Ù¸¥ »óÅ¿¡ ÀÖ´Â °Íó·³ º¸ÀÌ´Â °ÍÀ» ÇÁ·ÎÅؼÇÇÕ´Ï´Ù. ÇÁ·Î¼¼½º°¡ µ¥ÀÌŸº£À̽ºÁßÀÇ ¹«¾ùÀΰ¡¸¦ º¯°æÇÒ ÇÊ¿ä°¡ ÀÖ´Ù °æ¿ì ±×°ÍÀº ¿ì¼± ¸ñÀûÀÇ µ¥ÀÌÅÍ°¡ ¶ôµÇ¾î ÀÖÁö ¾ÊÀºÁö ¾î¶²Áö¸¦ È®ÀÎ ÇÕ´Ï´Ù. ¸¸¾à µ¥ÀÌÅÍ°¡ ¶ôµÇ¾î ÀÖÁö ¾ÊÀ¸¸é ±× ÇÁ·Î¼¼½º´Â µ¥ÀÌÅ͸¦ Àá±×¾î ÇÊ¿äÇÑ º¯°æÀ» ´õÇØ ¸¶Áö¸·¿¡ ¶ôÀ» ¶Á´Ï´Ù. ´Ù¸¥ ÇÁ·Î¼¼½º´Â µ¥ÀÌŸº£À̽ºÀÇ ±× ºÎºÐ¿¡ ¾×¼¼½º ÇÏ´Â Çã°¡¸¦ ¾ò´Â´Ù Àü¿¡ ¶ôÀÇ ÇØÁ¦¸¦ ±â´Ù¸®´Â °ÍÀ» °­¿ä´çÇÕ´Ï´Ù. Subversion ÀúÀå¼Ò(repository)¸¦ »ç¿ëÇϴµ¥ À־ Ä¡¸íÀûÀÎ ¿¡·¯(µð½ºÅ©°¡ °¡µæ µÇ°Å³ª ¸Þ¸ð¸®°¡ ¾ø¾îÁö°Å³ª)³ª ¼¼Ä¡±â¿¡ ÀÇÇØ µ¥ÀÌŸº£À̽º¿¡ °ÉÄ£ ¶ôÀ» »èÁ¦ÇÒ ±âȸ¸¦ ¾ø¾Ö ¹ö¸®´Â ÀÏÀÌ ÀÖ½À´Ï´Ù. ±× °á°ú ¿¬±¸ ÃÖÁ¾ ´Ü°èÀÇ µ¥ÀÌŸº£À̽º´Â±»¾îÁ®¹ö¸³´Ï´Ù. ÀÌ·¸°Ô µÇ¾úÀ» ¶§¿¡´Â ÀúÀå¼Ò(repository)¿¡ÀÇ ¾î¶°ÇÑ ¾×¼¼½ºµµ ¿µ±¸È÷ ±â´Ù¸®°Ô µÈ´Ù °ÍÀ¸·Î µÇ¾î ¹ö¸³´Ï´Ù. (¶ó°í ÇÏ´Â °ÍÀº ¸ðµç »õ·Î¿î ¾×¼¼½º´Â ¶ô ÇÏÁö¸¸ ÇØÁ¦µÇ´Â °ÍÀ» ±â´Ù¸³´Ï´Ù¸¸ ±×°ÍÀº °áÄÚ ¿ÀÁö ¾Ê±â ¶§¹®ÀÔ´Ï´Ù) ¿ì¼± ±×·± °ÍÀÌ ÀúÀå¼Ò(repository)¿¡ ÀϾµµ ºñ¸íÀ» Áö¸£Áö ¸¶ ÁÖ¼¼¿ä. SubversionÀÇ ÆÄÀÏ ½Ã½ºÅÛÀº µ¥ÀÌÅͺ£ÀÕ Æ®·»¼½¼Ç (¿Í)°ú üũ Æ÷ÀÎÆ® °Å±â¿¡ »çÀü Àú³Î ±âÀÔÀÇ ±¸Á¶¸¦ Àß ÀÌ¿ëÇÏ°í ÀÖ¾î Á¤¸»·Î ÆĸêÀûÀÎ »ç°Ç ÀÌ¿Ü´Â ¿¹¸¦ µé¾î: ÇÏµå µð½ºÅ© + °­ÇÑ ÀüÀÚÀå = ÆÄ¸ê µ¥ÀÌŸº£À̽º ȯ°æÀ» ¿µ±¸È÷ ¸ÅÀåÇØ ¶°³¯ ¼ö ¾ø´Â °ÍÀ» ÇÁ·ÎÅؼÇÇÕ´Ï´Ù. ÃæºÐÈ÷ ½Å°æÁúÀûÀÎ ÀúÀå¼Ò(repository) °ü¸®ÀÚ´Â ¹«½¼ÀÀµîÀ̳ª ¹æ¹ýÀ¸·Î ÀúÀå¼Ò(repository) µ¥ÀÌÅÍÀÇ ¿ÀÇÁ ¶óÀÎ ¹é¾÷À» ÃëÇÏ°í ÀÖÀ»Áöµµ ¸ð¸£Áö ¾Ê½À´Ï´Ù¸¸ ¹é¾÷ Å×ÀÌÇÁ¸¦ restore ÇØ ÁÖ°í¿Í ½Ã½ºÅÛ °ü¸® Ã¥ÀÓÀÚ¸¦ ºÎ¸£´Â °ÍÀº ¾ÆÁ÷ÀÔ´Ï´Ù. ´ÙÀ½¿¡ ÀÌÇÏÀÇ ¼ø¼­¸¦ »ç¿ëÇØ ÀúÀå¼Ò(repository)ÀǺ¹±¸ (À»)¸¦ ½ÃÇèÇØ º¸¼¼¿ä: ÀúÀå¼Ò(repository)¿¡ ¾×¼¼½º ÇÏ°í ÀÖ´Â(ȤÀº ÇÏ·Á°í ÇÏ°í ÀÖ´Ù) ÇÁ·Î¼¼½º°¡ Çϳªµµ ¾ø´Â °ÍÀ» È®ÀÎÇØ ÁÖ¼¼¿ä. ³×Æ®¿öÅ© ¾×¼¼½º °¡´ÉÇÑ ÀúÀå¼Ò(repository)¿¡¼­´Â ÀÌ°ÍÀº Apache HTTP ¼­¹ö¸¦ ½¸´Ù¿î ÇÑ´Ù Àϵµ ÀǹÌÇÕ´Ï´Ù. ÀúÀå¼Ò(repository)¸¦ ¼ÒÀ¯ÇØ °ü¸®ÇÏ°í ÀÖ´Â À¯Àú°¡ µÇ¾î ÁÖ¼¼¿ä. svnadmin recover /path/to/reposÄ¿¸àµå¸¦ ½ÇÇàÇØ ÁÖ¼¼¿ä. ÀÌÇÏ¿Í °°Àº Ãâ·ÂÀÌ Ç¥½ÃµÈ´Ù°í »ý°¢ÇÕ´Ï´Ù: Acquiring exclusive lock on repository db, and running recovery procedures. Please stand by... Recovery completed. The latest repos revision is 19. Subversion ¼­¹öÀÇ Àç±âµ¿ ÀÌ ¹æ¹ýÀº ´ëºÎºÐÀÇ ÀúÀå¼Ò(repository) ¶ôÀ» ÇؼÒÇÕ´Ï´Ù. ÀÌ Ä¿¸àµå´Â ´ÜÁö root°¡ µÇ´Â °ÍÀÌ ¾Æ´Ï¶ó µ¥ÀÌŸº£À̽º (À»)¸¦ ¼ÒÀ¯ÇØ °ü¸®ÇÏ°í ÀÖ´Â À¯Àú·Î ½ÇÇàÇÏ´Â °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä. º¹±¸ ÀÛ¾÷Àº »óó¸¦ ÀÔÀº ¿©·¯°¡Áö µ¥ÀÌŸº£À̽º ÆÄÀÏ (À¸)·ÎºÎÅÍÀÇ ÀçÀÛ¼ºÀÇ ÀÛ¾÷µµ Æ÷ÇÔÇÕ´Ï´Ù. (¿¹¸¦ µé¾î °øÀ¯ ¸Þ¸ð¸® area µîÀÔ´Ï´Ù) root ¿¡¼­ÀÇ º¹±¸´Â root °¡ ¼ÒÀ¯ÇÏ°í ÀÖ´Â ÆÄÀÏÀ» ÀÛ¼ºÇÏ´Â °ÍÀ¸·Î ÀÌ°ÍÀº ÀúÀå¼Ò(repository)¿¡ÀÇ Á¢¼Ó »óȲÀÌ º¹±¸ÇÑ ´ÙÀ½¿¡µµ Åë»óÀÇ À¯Àú´Â ÀÌ°Í¿¡ ´ëÇؼ­ ¾×¼¼½º ÇÑ´Ù ÀÏÀ» ÇÒ ¼ö ¾ø´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. ¸¸¾à Áö±Ý ¸»ÇÑ ÀÛ¾÷ÀÌ ¹«¾ùÀΰ¡ÀÇ ÀÌÀ¯·Î Àß ÀúÀå¼Ò(repository)¸¦ Á¤»óÀûÀ¸·Î µÇµ¹¸± ¼ö ¾ø´Â °æ¿ì µÑÀ» ÇØ¾ß ÇÕ´Ï´Ù. ¿ì¼± ¸Á°¡Áø ÀúÀå¼Ò(repository)¸¦ Ä¡¿ö ¸¶Áö¸· ¹é¾÷À» restore ÇÕ´Ï´Ù. ±×¸®°í Subversion ÀÇ °³¹ß ¸®½ºÆ®¿¡ email ÇÕ´Ï´Ù. (ÀÌ°ÍÀº dev@subversion.tigris.orgÀÔ´Ï´Ù) ÀÌ ¶§ ¹®Á¦Á¡À» ÀÚ¼¼ÇÏ°Ô ¼³¸íÇØ ÁÖ¼¼¿ä. µ¥ÀÌÅÍÀÇ ÀÏ°ü¼ºÀº Subversion °³¹ßÀÚ¿¡°Ô ÀÖ¾î ¸Å¿ì ³ôÀº priorityÀÔ´Ï´Ù. ÀúÀå¼Ò(repository)ÀÇ ÀÌÇà Subversion ÆÄÀÏ ½Ã½ºÅÛÀº ´Ù¾çÇÑ µ¥ÀÌŸº£À̽º Å×ÀÌºí¿¡ ºÐ»êµÇ¾ú´Ù µ¥ÀÌÅ͸¦ °¡Áý´Ï´Ù¸¸ ÀÌ°ÍÀº ÀϹÝÀûÀ¸·Î´Â Subversion °³¹ßÀÚ¸¸ÀÌ ¾Ë°í ÀÖ´Ù (¶ó°í Èï¹Ì°¡ ÀÖ´Ù) ÀÏÀÔ´Ï´Ù. ±×·¯³ª ¸ðµç ȤÀº ÀϺÎÀÇ µ¥ÀÌÅ͸¦ ÇϳªÀÇ ¿î¹Ý¿¡ Æí¸®ÇÑ ´Ü¼øÇÑ ÆÄÀÏ Çü½Ä¿¡ Á¤¸®ÇÏ°í ½ÍÀº °ÍÀÌ ÀÖ½À´Ï´Ù. Subversion ´Â ±×·¯ÇÑ ±¸Á¶¸¦svnadmin ÇÏÀ§ ¸í·É¾î ÀÇ Á¶¿¡ ÀÇÇØ ½ÇÀåÇÏ°í ÀÖ½À´Ï´Ù: dump ¿Í loadÀÔ´Ï´Ù. Subversion ÀúÀå¼Ò(repository)¸¦ ´ýÇÁ Çϰųª ·ÎµåÇϰųª ÇÏ´Â Á¦ÀÏ ÀÚÁÖ ÀÖ´Â ÀÌÀ¯´Â Subversion ÀÚ½ÅÀÇ º¯°æ¿¡ ÀÖ½À´Ï´Ù. SubversionÀÌ ¿Ï¼º¿¡ °¡±î¿öÁö´Â °Í¿¡ µû¶ó ¾î¶² Á¾·ùÀÇ º¯°æÀÌ ¿¬±¸ ÃÖÁ¾ ´Ü°è µ¥ÀÌŸº£À̽ºÀÇ schema·Î º¯°æµÉ ¶§ ÀúÀå¼Ò(repository)ÀÇ ÀüÀÇ ¹öÀü°úÀÇ È£È¯¼ºÀÌ ¾ø¾îÁ® ¹ö¸³´Ï´Ù. ÀÌ·¯ÇÑ È£È¯¼ºÀÇ °æ°è¸¦ ³Ñ¾î ¾÷±×·¹À̵å ÇÒ °æ¿ì¿¡ ±ÇÇÏ´Â ¹æ¹ýÀº ºñ±³Àû ´Ü¼øÇÑ °ÍÀÔ´Ï´Ù: ÇöÇà ¹öÀüÀÇsvnadmin (À»)¸¦ »ç¿ëÇØ ÀúÀå¼Ò(repository)¸¦ ´ýÇÁ ÆÄÀÏ¿¡ ´ýÇÁ ÇØ ÁÖ¼¼¿ä. SubversionÀÇ »õ·Î¿î ¹öÀü¿¡ÀÇ ¾÷±×·¹À̵å. ³°Àº ÀúÀå¼Ò(repository)¸¦ Ä¡¿ö »õ·Î¿î ÇÏ´ÃÀÇ ÀúÀå¼Ò(repository)¸¦ °Å±â¿¡ ¸¸µì´Ï´Ù¸¸ ÀÌ°Í¿¡´Â»õ·Î¿î svnadmin (À»)¸¦ »ç¿ëÇØ ÁÖ¼¼¿ä. Çѹø ´õ»õ·Î¿îsvnadmin¸¦ »ç¿ëÇØ ´ýÇÁ ÆÄÀÏÀ» °¢°¢ ¸¸µçÁö ¾ó¸¶ ¾ÈµÈ ÀúÀå¼Ò(repository)¿¡ ·ÎµåÇØ ÁÖ¼¼¿ä. ¸¶Áö¸·¿¡ ³°Àº ÀúÀå¼Ò(repository)·ÎºÎÅÍ »õ·Î¿î °Í¿¡ ÇÊ¿äÇÑ Ä¿½ºÅ͸¶ÀÌÁî ºÎºÐÀ» ¸ðµÎ Ä«ÇÇÇØ ÁÖ¼¼¿ä. ÀÌ°Í¿¡´ÂDB_CONFIG ÆÄÀÏ°ú ÈÅÀÇ ½ºÅ©¸³Æ®°¡ Æ÷ÇԵ˴ϴÙ. »õ·Î¿î ¸±¸®½ºÀÇ SubversionÀÇ ¸±¸®½º ³ëÆ®¿¡ ÁÖÀÇÇØ ¸¶Áö¸· ¾÷±×·¹À̵å·Î ÈÅ (ÀÌ)³ª ¼³Á¤ ¿É¼ÇÀ¸·Î º¯°æÀÌ ÀÖ´ÂÁö ¾ø´ÂÁö¸¦ ºÁ ÁÖ¼¼¿ä. svnadmin dump ´Â ÀúÀå¼Ò(repository) ¸®ºñÀüÀÌ ÀÖ´Ù ¹üÀ§¸¦ Ãâ·ÂÇÕ´Ï´Ù¸¸ ±×°ÍÀº SubversionÀÇ Ä¿½ºÅÒ ÆÄÀÏ ½Ã½ºÅÛ ´ýÇÁ Çü½ÄÀÌ µÇ¾î ÀÖ´Â °ÍÀÔ´Ï´Ù. ´ýÇÁ Çü½ÄÀº Ç¥ÁØ Ãâ·Â¿¡ Ç¥½ÃµÇ¾î ÁøÇà »óȲµîÀÇ ¸Þ¼¼Áö´Â Ç¥ÁØ ¿¡·¯ Ãâ·Â¿¡ Ç¥½ÃµË´Ï´Ù. ÀÌ°ÍÀ¸·Î Ãâ·ÂÀ» ÆÄÀÏ¿¡ ¸®µð·ºÆ® ÇÒ ¼ö°¡ ÀÖ¾î ±× ÇÑÆíÀ¸·Î ½ºÅ×ÀÌÅͽº ÀÇ Ãâ·Â¿¡ ´ëÇؼ­´Â ´Ü¸» À©µµ¿ì»ó¿¡¼­ º¼ ¼ö°¡ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î: $ svnlook youngest myrepos 26 $ svnadmin dump myrepos > dumpfile * Dumped revision 0. * Dumped revision 1. * Dumped revision 2. … * Dumped revision 25. * Dumped revision 26. ó¸®ÀÇ ÃÖÈÄ·Î ÁöÁ¤ÇÑ ¹üÀ§ÀÇ ÀúÀå¼Ò(repository) ¸®ºñÀüÀÇ µ¥ÀÌÅÍ ¸ðµÎ ÇÏÁö¸¸ º¸Á¸µÈ ÇϳªÀÇ ÆÄÀÏ(ÀüÀÇ ¿¹¿¡¼­´Â dumpfile) (À»)¸¦ ¼Õ¿¡ ³ÖÀ» ¼ö°¡ ÀÖ½À´Ï´Ù. Á¶°¡ µÈ ÀÌÁ¦(¹ú½á) ÇÑÆíÀÇ ÇÏÀ§ ¸í·É¾îÀÎsvnadmin load´Â Ç¥ÁØ ÀÔ·ÂÀ» Subversion ÀúÀå¼Ò(repository)ÀÇ ´ýÇÁ ÆÄÀÏ°ú ÇØ Çؼ®ÇØ ´ýÇÁ µÈ ¸®ºñÀüÀ» ¸ñÀûÀÇ ÀúÀå¼Ò(repository)¿¡ ÀçÇöÇÕ´Ï´Ù. ±×°ÍÀº ¶Ç °æ°ú Á¤º¸µîÀ» µ¹·ÁÁÝ´Ï´Ù¸¸ ÀÌÂÊÀº Ç¥ÁØ Ãâ·Â¿¡ Ç¥½ÃÇÕ´Ï´Ù: $ svnadmin load newrepos < dumpfile <<< Started new txn, based on original revision 1 * adding path : A ... done. * adding path : A/B ... done. … ------- Committed new rev 1 (loaded from original rev 1) >>> <<< Started new txn, based on original revision 2 * editing path : A/mu ... done. * editing path : A/D/G/rho ... done. ------- Committed new rev 2 (loaded from original rev 2) >>> … <<< Started new txn, based on original revision 25 * editing path : A/D/gamma ... done. ------- Committed new rev 25 (loaded from original rev 25) >>> <<< Started new txn, based on original revision 26 * adding path : A/Z/zeta ... done. * editing path : A/mu ... done. ------- Committed new rev 26 (loaded from original rev 26) >>> svnadmin ´Â Ç¥ÁØ ÀԷ°ú Ç¥ÁØ Ãâ·ÂÀ» ÀúÀå¼Ò(repository)ÀÇ ´ýÇÁ (¿Í)°ú ·Îµå 󸮿¡ »ç¿ëÇϹǷΠ¸ÚÀÌ ÀÖ´Â »ç¶÷Àº ÀÌÇÏ¿Í °°Àº ¹æ½ÄÀ» ½ÃÇèÇÑ´Ù Àϵµ ÇÒ ¼ö ÀÖ½À´Ï´Ù(¾Æ¸¶ ÆÄÀÌÇÁÀÇ ¾çÃøÀÇsvnadmin (Àº)´Â ´Ù¸¥ ¹öÀüÀÏÁöµµ ¸ð¸¨´Ï´Ù): $ svnadmin create newrepos $ svnadmin dump myrepos | svnadmin load newrepos Àü¿¡ ÁÖÀÇÇÑ °Íó·³svnadmin dump ´Â ¸®ºñÀüÀÇ ¹üÀ§¸¦ Ãâ·ÂÇÕ´Ï´Ù. ¿É¼ÇÀ» »ç¿ëÇϸé ÇϳªÀÇ ¸®ºñÀüÀÇ ´ýÇÁ³ª ¸®ºñÀü ¹üÀ§ÀÇ ´ýÇÁ°¡ »ý±é´Ï´Ù. ÀÌ ¿É¼ÇÀ» »ý·« ÇÏ¸é ¸ðµç Á¸ÀçÇÏ´Â ÀúÀå¼Ò(repository) ¸®ºñÀüÀÌ ´ýÇÁ µË´Ï´Ù. $ svnadmin dump myrepos --revision 23 > rev-23.dumpfile $ svnadmin dump myrepos --revision 100:200 > revs-100-200.dumpfile SubversionÀº °¢°¢ÀÇ »õ·Î¿î ¸®ºñÀüÀ» ´ýÇÁ ÇϹǷΠ±× Ãâ·Â¿¡´Â ´ÙÀ½¿¡ ½ÇÇàµÇ´Â ·Î´õ°¡ ÀüÀÇ ¸®ºñÀüÀ» ¹ÙÅÁÀ¸·Î ÇØ ±× ¸®ºñÀüÀ» Àç ÀÛ¼ºÇϴµ¥ ÇÊ¿äÇÑ ÃæºÐÇÑ Á¤º¸°¡ ÀÖ½À´Ï´Ù. ¹Ù²Ù¾î ¸»Çϸé(ÀÚ) ´ýÇÁ ÆÄÀÏÁß¿¡¼­ ¾î¶°ÇÑ ¸®ºñÀüÀÌ ÁöÁ¤µÇ¾îµµ ¸®ºñÀüÁß¿¡¼­ º¯°æÀÌ ÀÖ´ø ¾ÆÀÌÅÛ¸¸ÀÌ ´ýÇÁ¿¡ ³ªÅ¸³­´Ù°í ÇÏ´Â °Í ÀÔ´Ï´Ù. ÀÌ ±ÔÄ¢ÀÇ À¯ÀÏÇÑ ¿¹¿Ü´Â ÇöÀçÀÇsvnadmin dump ÇÏÁö¸¸ ´ýÇÁ ÇÏ´Â ÃÖÃÊÀÇ ¸®ºñÀüÀÔ´Ï´Ù. µðÆúÆ®¿¡¼­´Â SubversionÀº ÀüÀÇ ¸®ºñÀü¿¡ ´ëÇÑ ´Ü¼øÇÑ Â÷ºÐÀ¸·Î¼­ ÃÖÃÊÀÇ ´ýÇÁ ¸®ºñÀüÀ» Ç¥ÇöÇÒ °ÍÀº ¾ø½À´Ï´Ù. ÀÌ ÀÌÀ¯ÀÇ Çϳª´Â ´ýÇÁ ÆÄÀÏ¿¡´Â Á÷ÀüÀÇ ¸®ºñÀüÀÌ ¾ø±â ¶§¹®ÀÔ´Ï´Ù! µÎ¹ø°¿¡ Subversion (Àº)´Â ´ýÇÁ µ¥ÀÌÅÍ°¡ ·Îµå µÇ´Â ÀúÀå¼Ò(repository) »óÅ¿¡ ´ëÇØ ¾Æ¹«°Íµµ ¸ð¸¥´Ù (À¸)·ÎºÎÅÍÀÔ´Ï´Ù. (¸¸¾à ·Îµå°¡ ÀϾ´Ù°í Çϸé ÀÔ´Ï´Ù¸¸. ) svnadmin dump ÀÇ °³º°ÀÇ ½ÇÇàÀÇ Ãâ·ÂÀÌ ÀÚ±â ÃæÁ· ÇØ ÀÖ´Â °ÍÀ» ÇÁ·ÎÅؼÇÇϱâ À§ÇØ(¶§¹®¿¡) ÃÖÃÊÀÇ ´ýÇÁ ¸®ºñÀüÀº µðÆúÆ®¿¡¼­´Â ¸ðµç µð·ºÅ丮 ÆÄÀÏ, ÀúÀå¼Ò(repository)¿¡ ÀÖ´Â ±× ¸®ºñÀüÀÇ ¼Ó¼º ÀÇ ¿ÏÀüÇÑ Ç¥ÇöÀÌ µÇ¾î ÀÖ½À´Ï´Ù. ±×·¯³ª ÀÌ µðÆúÆ®ÀÇ ÇൿÀ» ¹Ù²Ü ¼öµµ ÀÖ½À´Ï´Ù. ÀúÀå¼Ò(repository)¸¦ ´ýÇÁ ÇÒ °æ¿ì¿¡ ¿É¼ÇÀ» Ãß°¡Çϸé(ÀÚ) svnadmin ´Â ÃÖÃÊÀÇ ´ýÇÁ ¸®ºñÀü°ú ÀúÀå¼Ò(repository)ÁßÀÇ Á÷Àü ¸®ºñÀü°úÀÇ Â÷ºÐÀ» À̶ó°í ±ò¶§±â ÇÕ´Ï´Ù. ³ª¸ÓÁöÀÇ ¸ðµç ´ýÇÁ µÇ´Â ¸®ºñÀü¿¡µµ °°Àº ¹æ¹ýÀ¸·Î Ãë±ÞÇÕ´Ï´Ù. ±×¸®°í ´ýÇÁ ¹üÀ§¿¡ ÀÖ´Â ³ª¸ÓÁöÀÇ ¸®ºñÀüÀÌ Ãâ·ÂÇÏ´Â °Í°ú °°ÀÌ ÃÖÃÊÀÇ ¸®ºñÀüÀ»—¸®ºñÀüÁß¿¡ ÀϾ´Â º¯°æ¸¸À» °í·ÁÇØ Ãâ·ÂÇÕ´Ï´Ù. ÀÌ ÀÌÁ¡Àº Å« ÇϳªÀÇ ´ýÇÁ ÆÄÀÏÀÇ ´ë½Å¿¡ ·Îµå¿¡ ¼º°øÇÏ´Â °Í °°Àº ÀÛÀº ¾ó¸¶µçÁöÀÇ ´ýÇÁ ÆÄÀÏÀ» ¸¸µé ¼ö°¡ ÀÖ´Â °ÍÀÔ´Ï´Ù. ÀÌ·± ´À³¦ÀÔ´Ï´Ù : $ svnadmin dump myrepos --revision 0:1000 > dumpfile1 $ svnadmin dump myrepos --revision 1001:2000 --incremental > dumpfile2 $ svnadmin dump myrepos --revision 2001:3000 --incremental > dumpfile3 ÀÌ·¯ÇÑ ´ýÇÁ ÆÄÀÏÀº ÀÌÇÏ¿Í °°Àº Ä¿¸àµå°¡ Èê·¯ ³ª¿À°í »õ·Î¿î ÀúÀå¼Ò(repository)Áß¿¡ ·Îµå µË´Ï´Ù: $ svnadmin load newrepos < dumpfile1 $ svnadmin load newrepos < dumpfile2 $ svnadmin load newrepos < dumpfile3 ¿É¼ÇÀ» »ç¿ëÇÑ ´Ù¸¥ ±Ù»çÇÑ ¹æ¹ýÀº ¹ú½á Á¸ÀçÇÏ°í ÀÖ´Â ´ýÇÁ ÆÄÀÏ¿¡ »õ·Î¿î ´ýÇÁ ¸®ºñÀü ¹üÀ§¸¦ Ãß°¡ÇÏ´Â °ÍÀÔ´Ï´Ù. ¿¹¸¦ µé¾î post-commit ÈÅÀÌ ÀÖ¾î ±×°ÍÀº ´ÜÁö ÈÅÀ» Æ®¸®°ÅÇÏ´Â °Í °°Àº ÇϳªÀÇ ¸®ºñÀüÀÇ ÀúÀå¼Ò(repository) ´ýÇÁ¸¦ Ãß°¡ÇÏ´Â °ÍÀÔ´Ï´Ù. ȤÀº ÀÌÇÏ¿Í °°Àº ½ºÅ©¸³Æ® (ÀÌ)°¡ ÀÖ¾î ¸ÅÀÏ Àú³á ¸¶Áö¸·¿¡ ÀÌ ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÏ°í ³ª¼­ ¸®Æ÷ÁöÆ® ¸®¿¡ Ãß°¡µÈ ¸ðµç ¸®ºñÀüÀÇ ´ýÇÁ ÆÄÀÏ µ¥ÀÌÅ͸¦ Ãß°¡ÇÏ´Â °ÍÀÔ´Ï´Ù. ÀúÀå¼Ò(repository)ÀÇ Â÷ºÐ ´ýÇÁÀÇ ÀÌ¿ë #! /usr/bin/perl $repos_path = '/path/to/repos'; $dumpfile = '/usr/backup/svn-dumpfile'; $last_dumped = '/var/log/svn-last-dumped'; # Figure out the starting revision (0 if we cannot read the last-dumped file, # else use the revision in that file incremented by 1). if (open LASTDUMPED, "$last_dumped") { $new_start = <LASTDUMPED>; chomp $new_start; $new_start++; close LASTDUMPED; } else { $new_start = 0; } # Query the youngest revision in the repos. $youngest = `svnlook youngest $repos_path`; chomp $youngest; # Do the backup. `svnadmin dump $repos_path --revision $new_start:$youngest --incremental >> $dumpfile`; # Store a new last-dumped revision open LASTDUMPED, "> $last_dumped" or die; print LASTDUMPED "$youngest\n"; close LASTDUMPED; # All done! ÀÌ¿Í °°ÀÌ ÀÌ¿ëÇÏ´Â °ÍÀ¸·Î svnadminÀÇ dump ¿Í load Ä¿¸àµå´Â °¡Ä¡°¡ ÀÖ´Â ¼ö´ÜÀÌ µË´Ï´Ù¸¸ ÀÌ°Í¿¡ ÀÇÇØ ÀúÀå¼Ò(repository)ÀÇ º¯°æÀ» ½Ã°£À» µé¿© ¹é¾÷ ÇØ ½Ã½ºÅÛ Å©·¡½¬³ª ´Ù¸¥ ±«¸êÀûÀÎ »ç°Ç¿¡ °®Ãá´Ù´Â °ÍÀÔ´Ï´Ù. ¸¶Áö¸·À¸·Î SubversionÀÇ ÀúÀå¼Ò(repository) ´ýÇÁ ÆÄÀÏ Çü½ÄÀÇ ´Ù¸¥ ÀÌ¿ë ¹æ¹ý°ú Çؼ­´Â ´Ù¸¥ º¸Á¸ÀÇ ±¸Á¶³ª ¹öÀü ÄÜÆ®·Ñ ½Ã½ºÅÛÀ¸·ÎºÎÅÍÀÇ º¯È¯ÀÔ´Ï´Ù. ´ýÇÁ ÆÄÀÏ Çü½ÄÀº ´ëºÎºÐÀÌ Àΰ£ÀÌ ÀÐÀ» ¼ö ÀÖ´Â ÇüÅ°¡ µÇ¾î ÀÖÀ¸¹Ç·Î SubversionÀÇ ÀúÀå¼Ò(repository) ´ýÇÁ ÆÄÀÏ Çü½ÄÀº RFC-822 Çü½Ä¿¡ ÀÚÁÖ(Àß) ºñ½ÁÇØ ´ëºÎºÐÀÇ email ·Î ÀÌ¿ëµÇ°í ÀÖ´Â °Í°ú °°Àº Çü½ÄÀÔ´Ï´Ù. ÀÌ ÆÄÀÏ Çü½ÄÀ» »ç¿ëÇϸé(ÀÚ) ºñ±³Àû °£´ÜÇÏ°Ô ÀϹÝÀûÀÎ º¯°æÁ¡¼¼Æ®¸¦ Ç¥ÇöÇÒ ¼ö°¡ ÀÖ´Â — °¢°¢ÀÇ º¯°æÀº »õ·Î¿î ¸®ºñÀüÀ¸·Î¼­ ´Ù·ç¾îÁý´Ï´Ù ÀúÀå¼Ò(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) µð·ºÅ丮¿¡ ÀÖ´Ù hooks/post-commit ¿¡ Ãß°¡ÇØ ÁÖ¼¼¿ä: (cd /path/to/hook/scripts; . /hot-backup.py ${REPOS} /path/to/backups &) °á°úÀÇ ¹é¾÷Àº ¿ÏÀüÇÏ°Ô ±â´ÉÇÏ´Â Subversion ÀúÀå¼Ò(repository)·Î ÇöÇàÀÇ ÀúÀå¼Ò(repository)ÀÌ ¹«¾ùÀΰ¡ ½ÉÇÏ°Ô µÇ¾úÀ» ¶§¿¡´Â ¿Å°Ü³õ¾Æ »ç¿ëÇÏ´Â °ÍÀÌ ÇÒ ¼ö ÀÖ´Â °ÍÀÔ´Ï´Ù. ¾çÂÊ ¸ðµÎÀÇ ¹é¾÷ ¹æ¹ý¿¡´Â °¢°¢ ÀÌÁ¡ÀÌ ÀÖ½À´Ï´Ù. Á¦ÀÏ °£´ÜÇÑ °ÍÀº Ç®¹é ¾÷À¸·Î ±×°ÍÀº Ç×»ó ÇöÇà ÀúÀå¼Ò(repository)ÀÇ ¿ÏÀüÇÑ Ä«ÇÇÀÔ´Ï´Ù. ¹Ýº¹ÀÌ µË´Ï´Ù¸¸ ¹«¾ùÀΰ¡ ¾ÈµÇ´Â ÀÏÀÌ µ¿ÀÛÁßÀÇ ÀúÀå¼Ò(repository)¿¡ ÀϾ´Ù ¶§·Î´Â ´Ü¼øÇÑ Àç±ÍÀûÀÎ µð·ºÅ丮 Ä«ÇÇ·Î ÀÌ ¹é¾÷À» º¹¿øÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. À¯°¨½º·´°Ô ¸¸¾à ÀúÀå¼Ò(repository)ÀÇ º¹¼öÀÇ ¹é¾÷ (À»)¸¦ °ü¸®ÇÏ°í ÀÖ´Â °æ¿ì ÀÌ·¯ÇÑ Ç® Ä«ÇÇ´Â ½ÇÇàÁßÀÇ ÀúÀå¼Ò(repository)¿Í °°Àº Á¤µµ °¢°¢ÀÌ µð½ºÅ©¸¦ ¸Ô´Â´Ù°í ÇÏ´Â °ÍÀÔ´Ï´Ù. ÀúÀå¼Ò(repository) ´ýÇÁ Çü½ÄÀ» »ç¿ëÇÑ Â÷µî ¹é¾÷Àº µ¥ÀÌŸº£À̽º schema ÇÏÁö¸¸ °è¼ÓÇÏ´Â Subversion ÀÚ½ÅÀÇ ¹öÀü°£¿¡ º¯°æµÉ ¶§¿¡´Â ¸Å¿ì µµ¿òÀÌ µË´Ï´Ù. ÀúÀå¼Ò(repository)ÀÇ Ç® ´ýÇÁ¿Í ·Îµå´Â ÀϹÝÀûÀ¸·Î ÀúÀå¼Ò(repository)¸¦ »õ·Î¿î schema¿¡ ¾÷±×·¹À̵å ÇÏ´Â °ÍÀÌ ÇÊ¿äÇÕ´Ï´Ù. ±×·¯ÇÑ ÀÛ¾÷ÀÇ ¹Ý(Áï ´ýÇÁÀÇ ºÎºÐ)¿¡ ´ëÇؼ­´Â ¹ú½á ³¡³ª°í ÀÖÀ¸¹Ç·Î ¸Å¿ì Æí¸®ÇÕ´Ï´Ù. ºÒÇàÇÏ°Ôµµ Â÷µî ¹é¾÷ÀÇ ÀÛ¼º—±×¸®°í ±× restore—´Â ±ä ½Ã°£ÀÌ °É¸³´Ï´Ù¸¸ ±×°ÍÀº °¢°¢ÀÇ Ä¿¹ÔÀÌ ´ýÇÁ ÆÄÀÏ ¶Ç´Â ÀúÀå¼Ò(repository)ÀÇ ¾ÈÀ¸·Î ½ÇÁ¦·Î Àç½ÇÇàµÇ±â ¶§¹®ÀÔ´Ï´Ù. ¾î´À ÂÊÀÇ ¹é¾÷ÀÇ °æ¿ìµµ ÀúÀå¼Ò(repository) °ü¸®ÀÚ´Â ¾î¶»°Ô ÇØ ¹öÀüÈ­ µÇÁö ¾Ê´Â ¼Ó¼º¿¡ÀÇ º¯°æÀÌ ¹é¾÷¿¡ ¿µÇâÀ» Áٱ ÁÖÀÇÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ º¯°æÀº »õ·Î¿î ¸®ºñÀüÀ» ±× ÀÚü·Î ¸¸µé¾î ³»´Â °ÍÀº ¾Æ´Ï±â ¶§¹®¿¡ post-commit ÈÅÀ» È£ÃâÇÏ´Â °è±â ¿¡´Â ¾ÈµÇ¾î pre-revprop-chage À̳ª post-revprop-change ÈÅÀÇ °è±â ¿¡Á¶Â÷ µÇÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù. ¿¹¸¦ µé¾îsvnadmin setlog´Â ¾î·µç ÈÅ ÀÎÅÍÆäÀ̽º¸¦ ¿ìȸ ÇϹǷΠÇß´Ù. ±×¸®°í ½Ã°£ÀÇ ¼ø¼­¿¡ µû¸£Áö ¸»°í ¸®ºñÀü ¼Ó¼ºÀ» º¯°æÇÒ ¼ö°¡ ÀÖ´Ù —¾ðÁ¦¶óµµ ¾î´À ¸®ºñÀü ¼Ó¼ºÀ» º¯°æÇÒ ¼ö°¡ ÀÖ´Â — ÀÇ·Î ¸¶Áö¸· ¸î°³ÀÇ ¸®ºñÀüÀÇ Â÷µî ¹é¾÷Àº ±× ÀÌÀüÀÇ ¹é¾÷ÀÇ ÀϺημ­ ÇàÇØÁø ¸®ºñÀü ¼Ó¼ºÀÇ ¼öÁ¤Àº °ÅµÎ¾î µéÀδ٠ÀÏÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÚÁÖ ÀúÀå¼Ò(repository)ÀÇ ¹é¾÷¿¡ ´ëÇÑ ÃÖ¼±ÀÇ ¹æ¹ýÀº ºÐ»ê ½ÃÅ°´Â °ÍÀÔ´Ï´Ù. Ç®¹é ¾÷°ú Â÷µî ¹é¾÷¿¡ Ä¿¹Ô emailÀÇ ¾îÄ«À̺ê(archive)¸¦ Ãß°¡ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î Subversion °³¹ßÀÚ´Â Subversion ¿ø½Ã ÄÚµå ÀúÀå¼Ò(repository)¸¦ »õ·Î¿î ¸®ºñÀü ÇÏÁö¸¸ ¸¸µé¾îÁú ¶§¸¶´Ù ¹é¾÷ ÇÕ´Ï´Ù. ±×¸®°í ¸ðµç Ä¿¹Ô°ú ¼Ó¼º º¯°æÀÇ ÅëÁö email¸¦ ¾îÄ«À̺ê(archive) ÇØ ÃëÇØ µÓ´Ï´Ù. °°Àº ¹æ¹ýÀ» ÃëÇØ ÁÖ¼¼¿ä. ´Ù¸¸, ÇÊ¿äÇÑ ¹üÀ§¿¡¼­ Æí¸®ÇÔ°ú ¾ÈÀü¼ºÀÇ ¹Ì¹¦ÇÑ Àå¹Ì ½º¸¦ ÃëÇØ ÁÖ¼¼¿ä. ±×¸®°í ÀÌ·¯ÇÑ ÀÏÀ» ÀüºÎ Çصµ ¿î¸í ÀÇ Ã¶±ÇÀ¸·ÎºÎÅÍ Çϵå¿þ¾î¸¦ Áöų ¼ö ¾ø´Â °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä. ¾Æ½Ã´Â ¹ÙÀÔ´Ï±î — ±×³àÀÇ ¸ðµç¿Í ¿ì¿¬À» ³ªÅ¸³»´Â ÁýÇÕ¸í»çÀÔ´Ï´Ù. ¹é¾÷Àº È®½ÇÈ÷ ±×·¯ÇÑ ½Ã·Ã¶§ºÎÅÍ ´ç½ÅÀ» ±¸ÇÒ °ÍÀÔ´Ï´Ù. ÀúÀå¼Ò(repository)ÀÇ ³×Æ®¿öÅ©È­ Subversion ÀúÀå¼Ò(repository)´Â ÀúÀå¼Ò(repository)°¡ ÀÖ´Â ¸Ó½Å»ó¿¡¼­ ½ÇÇàµÇ°í Àִ Ŭ¶óÀ̾ðÆ® (À¸)·ÎºÎÅÍ ¾×¼¼½º ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ±×·¯³ª, ÀüÇüÀûÀÎ SubversionÀÇ ¼³Á¤Àº ¾î´À ÇϳªÀÇ ¼­¹ö¸Ó½Å¿¡ ´ëÇؼ­ ¿ÀÇǽº Àüü¿¡ ÀÖ´Â ÄÄÇ»ÅÍ»óÀÇ Å¬¶óÀ̾ðÆ®·ÎºÎÅÍ ¾×¼¼½º µÈ´Ù°í ÇÏ´Â °ÍÀԴϴٗȤÀº Àü¼¼°è·ÎºÎÅÍ. ÀÌ ¸¶µð¿¡¼­´Â ¹ÛÀÇ ¼¼°è¿¡ ¿­·Á ÀÖ´Â Subversion ÀúÀå¼Ò(repository)¸¦ ¸®¸ðÆ® Ŭ¶óÀ̾ðÆ®·ÎºÎÅÍ ÀÌ¿ëµÇ´Â È£½ºÆ® ¸Ó½Å¿¡ ¾î¶»°Ô ÇØ Áþ´Â°¡ ÇÑ´Ù ÀÏ¿¡ ´ëÇØ ¼³¸íÇÕ´Ï´Ù. Çö½ÃÁ¡¿¡¼­ÀÇ Subversion·Î ÀÌ¿ëÇÒ ¼ö ÀÖ´Â ¼­¹öÀÇ ±¸Á¶¸¦ ¼³¸íÇØ ¼³Á¤°ú ±× »ç¿ë¹ýÀ» ³íÀÇÇÕ´Ï´Ù. ÀÌ ¸¶µð¸¦ ÀÐÀº ´ÙÀ½¿¡´Â ÀÚ½ÅÀÇ ¿ä±¸¸¦ ä¿ì±â À§Çؼ­(¶§¹®¿¡)´Â ¾î¶»°Ô ³×Æ®¿öÅ©¸¦ ¼³Á¤Çϸé ÁÁÀº°¡ (À»)¸¦ ÆÇ´ÜÇÒ ¼ö°¡ ÀÖ¾î ´ç½ÅÀÇ È£½ºÆ® ¸Ó½Å»ó¿¡¼­´Â ¾î¶»°Ô ±× ¼³Á¤À» Çϸé ÁÁÀº°¡¸¦ ÀÌÇØÇÒ ¼ö ÀÖ´Ù°í »ý°¢ÇÕ´Ï´Ù. <command>httpd</command> Apache HTTP ¼­¹ö SubversionÀÇ ÁÖµÈ ³×Æ®¿öÅ© ¼­¹ö´Â WebDAV/deltaV ÇÁ·ÎÅäÄÝ·Î Åë½ÅÇÑ´Ù ÀÏÀ» ÇÒ ¼ö ÀÖ´Â Apache HTTP ¼­¹öÀÔ´Ï´Ù(httpd). ÀÌ ÇÁ·ÎÅäÄÝÀº(HTTP 1.1ÀÇ È®ÀåÀÔ´Ï´Ù¸¸ http://www.webdav.org/ÂüÁ¶) World Wide Web ÀÇ ÇÙ½ÉÀÌ µÇ´Â ÈçÈ÷ ÀÖ´ø HTTP ÇÁ·ÎÅäÄÝÀ» ÇÊ¿ä·Î ÇØ °Ô´Ù°¡ ±Û±â´É—Ư¼öÇÑ ¹öÀüÈ­ µÈ ±Û±â´É—¸¦ Ãß°¡ ÇÑ °ÍÀÔ´Ï´Ù. ±× °á°ú´Â Ç¥ÁØÈ­ µÈ °ß·ÚÇÑ ½Ã½ºÅÛÀ̸ç Apache2. 0 ÀÇ ÀϺημ­ ÆÐÅ°ÁöÈ­µÇ°í ÀÖ½À´Ï´Ù. ÀÌ°ÍÀº ¸¹Àº À¯¸íÇÑ ¿ÀÆÛ·¹ÀÌÆÃ(operating) ½Ã½ºÅÛÀ̳ª ¼­µå ÆÄƼ Á¦Ç°ÀÇ ÀϺημ­ ¼­Æ÷Æ®µÇ°í ÀÖ½À´Ï´Ù. µÇ¾î¿¡ ±×°ÍÀº Ưº°ÇÑ °ü¸®ÀÚ¸¦ ÇÊ¿ä·Î ÇÏÁö ¾Ê½À´Ï´Ù. ±×·¸°Ô ÇÏ´Â °Í ±×µéÀº Á¤¸»·Î ½È¾îÇÏ°í ÀÖ½À´Ï´Ù. ÀÌÇÏÀÇ ³íÀÇ´Â 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ÀÇ ¿¡¶ó·Î±×ÀΟÆ佺µµ »ç¿ëÇÕ´Ï´Ù. °£´ÜÇÏ°Ô´Â ¸ð¸£´Â °Í °°Àº ¹®Á¦¸¦ ºÐ¸íÈ÷ ÇÏ·Á¸é Á¤º¸¿ø (À¸)·Î¼­ ±×·¯ÇÑ ÆÄÀÏÀÇ ³»¿ëÀ» ¾ðÁ¦¶óµµ º¼ ¼ö°¡ ÀÖ½À´Ï´Ù. HTTP º£À̽ºÀÇ ÀúÀå¼Ò(repository) ¾×¼¼½º·Î ÇÊ¿äÇÑ ÀÏ ÀúÀå¼Ò(repository)¸¦ HTTP ³Ñ¾î·Î ³×Æ®¿öÅ©È­ÇÏ´Â °æ¿ì ±âº»ÀûÀ¸·Î´Â µÎ ÆÐÅ°Áö¿¡ ÀÖ´Â ³× °³ÀÇ ºÎÇ°ÀÌ ÇÊ¿äÇÏ°Ô µË´Ï´Ù. Apache httpd 2.0 ±×°Í°ú ÇÔ²² ¹èÆ÷µÇ´Â mod_dav DAV ¸ðµâ, Subversion º»Ã¼, ±×¸®°í, Subversion¿Í ÇÔ²² ¹èÆ÷µÇ´Â mod_dav_svnÆÄÀÏ ½Ã½ºÅÛ Á¦°ø ¸ðµâÀÔ´Ï´Ù. ÀÌ·¯ÇÑ ºÎÇ°À» ¸ðµÎ ¼Õ¿¡ ³ÖÀ¸¸é ÀúÀå¼Ò(repository)ÀÇ ³×Æ®¿öÅ©È­´Â ÀÌÇÏ¿Í °°ÀÌ °£´ÜÇÏ°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù: httpd 2.0 ÀÌÈĸ¦ ¼Õ¿¡ ³Ö¾î mod_dav¸¦ À¯È¿ÇÏ°Ô ÇØ ½ÇÇàÇÕ´Ï´Ù. mod_dav_svn ¸¦ mod_dav Ç÷¯±× ÀÎÀ¸·Î¼­ ÀνºÅç ÇÕ´Ï´Ù. ÀÌ°ÍÀº SubversionÀÇ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®¸¦ »ç¿ëÇØ ÀúÀå¼Ò(repository)¿¡ ¾×¼¼½º ÇÕ´Ï´Ù. ±×¸®°í httpd.confÆÄÀÏÀ» ÀúÀå¼Ò(repository)¸¦ °ø°³Çϵµ·Ï(µíÀÌ) ¼³Á¤ÇÕ´Ï´Ù. ÃÖÃÊÀÇ µÎ °³ÀÇ ÀÛ¾÷Àº httpd ¿Í SubversionÀ» ¿ø½Ã ÄÚµå·ÎºÎÅÍ ÄÄÆÄÀÏ ÇÏ´ÂÁö ¹ú½á ½Ã½ºÅÛ¿¡ ÀνºÅç µÇ°í ÀÖ´Â ¹ÙÀ̳ʸ® ÆÐÅ°Áö¸¦ »ç¿ëÇϸé ÇÒ ¼ö ÀÖ½À´Ï´Ù. Subverion¸¦ Apache HTTP ¼­¹ö¿Í ÇÔ²² ÀÌ¿ëÇϱâ À§Çؼ­ ¾î¶»°Ô ÄÄÆÄÀÏ Çұ ºÙÀº ÃÖ½ÅÀÇ Á¤º¸¿Í ÀÌ ¸ñÀûÀ» À§Çؼ­(¶§¹®¿¡) Apache ÀÚ½ÅÀ» ¾î¶»°Ô ¼³Á¤Çϸé ÁÁÀº °Íó·³ ºÙ¾î Subversion ¿ø½Ã ÄÚµå Æ®¸®ÀÇINSTALL ÆÄÀÏÀ» ºÁ ÁÖ¼¼¿ä. ±âº»ÀûÀÎ ApacheÀÇ ¼³Á¤ ½Ã½ºÅÛ¿¡ ÇÊ¿äÇÑ ºÎÇ°À» ¸ðµÎ ÀνºÅç ÇÏ¸é ³ª¸ÓÁö´Â Apache ÀÇ ¼³Á¤À»httpd.conf ·Î ÇÒ »ÓÀÔ´Ï´Ù. mod_dav_svn ¸ðµâÀ» ·ÎµåÇϵµ·Ï(µíÀÌ) Apache¿¡ Áö½ÃÇÏ·Á¸é LoadModule ÀνºÆ®·°¼ÇÀ» »ç¿ëÇÕ´Ï´Ù. ÀÌ ÀνºÆ®·°¼ÇÀº ´Ù¸¥ Subversion °ü·ÃÀÇ ¼³Á¤¿¡ ¾Õ¼­ ÁöÁ¤ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ¸¸¾à Apache°¡ µðÆúÆ® ¼³Á¤À¸·Î ÀνºÅç µÇ°í ÀÖ´Ù °æ¿ì mod_dav_svn ¸ðµâÀº Apache ÀνºÅç µð·ºÅ丮(´ëºÎºÐ /usr/local/apache2 (¿Í)°ú °°Àº Àå¼ÒÀÔ´Ï´Ù)ÀÇ modules¼­ºê µð·ºÅ丮¿¡ ÀνºÅç µÇ°í ÀÖÀ» °ÍÀÔ´Ï´Ù. LoadModule ÀνºÆ®·°¼ÇÀº ´Ü¼øÇÑ ±¸¹®À» °®°í À̸§ÀÌ ºÙÀº ¸ðµâÀ» µð½ºÅ©ÁßÀÇ °øÀ¯ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®ÀÇ Àå¼Ò¿¡ ¿¬°á½Ãŵ´Ï´Ù: LoadModule dav_svn_module modules/mod_dav_svn.so ¸¸¾à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 ±¸¹®À» »ç¿ëÇÕ´Ï´Ù: <Location /repos> DAV svn SVNPath /absolute/path/to/repository </Location> ¸¸¾à º¹¼öÀÇ Subversion ÀúÀå¼Ò(repository)¸¦ ¼­Æ÷Æ®ÇÏ·Á°í ÇÏ°í ÀÖ¾î ±×°ÍÀÌ ·ÎÄà µð½ºÅ©»óÀÇ °°Àº Ä£µð·ºÅ丮¸¦ °¡Áö´Â °æ¿ì ´Ù¸¥ ÀνºÆ®·°¼ÇÀ» »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ±×°ÍÀºSVNParentPath ÀνºÆ®·°¼ÇÀ¸·Î °øÅëÀÇ Ä£µð·ºÅ丮¸¦ ÁöÁ¤ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î ¸¸¾à º¹¼öÀÇ Subversion ÀúÀå¼Ò(repository)¸¦/usr/local/svn µð·ºÅ丮¿¡ ¸¸µé¾îhttp://my.server.com/svn/repos1¶óµçÁö http://my.server.com/svn/repos2¶óµçÁö ¸»ÇÏ´Â °Í °°Àº URL·Î ¾×¼¼½º ÇÏ°í ½ÍÀº °æ¿ì ÀÌÇÏÀÇ ¿¹ÀÇ °°Àº httpd.conf¼³Á¤ ±¸¹®À» »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù: <Location /svn> DAV svn SVNParentPath /usr/local/svn </Location> ÀÌ ±¸¹®À» »ç¿ëÇϸé Apache ´Â Æнº ºÎºÐÀÌ/svn/ ·Î ½ÃÀ۵Ǵ ¸ðµç URL¸¦ SubversionÀÇ DAV ÇÁ·Î¹ÙÀÌ´õ¿¡ °Ç³Ü´Ï´Ù. ÀÌ ¶§ SVNParentPath ÀνºÆ®·°¼ÇÀ¸·Î ÁöÁ¤ÇÑ µð·ºÅ丮 ¾ÈÀÇ ¾ÆÀÌÅÛÀº ½ÇÁ¦ÀÇ Subversion ÀúÀå¼Ò(repository)ÀÌ´Ù°í Çؼ®µË´Ï´Ù. ÀÌ°ÍÀº ¸Å¿ì Æí¸®ÇÑ ±¸¹®ÀÔ´Ï´Ù. ±×°ÍÀº SVNPath ÀνºÆ®·°¼Ç°ú´Â ´Þ¶ó »õ·Î¿î ÀúÀå¼Ò(repository)¸¦ ¸¸µå´Âµ¥ Apache¸¦ Àç±âµ¿ÇÑ´Ù ÇÊ¿ä°¡ ¾ø±â ¶§¹®ÀÔ´Ï´Ù. Æ۹̼Ç, ÀÎÁõ, Çã°¡ ¿©±â¼­ Æ۹̼ǿ¡ ´ëÇÑ °­ÇÑ Àǹ®ÀÌ ÀϾ´Ï´Ù. 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)´Â ´©±¸·ÎºÎÅ͵µ ¾×¼¼½º ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ¹Ù²Ù¾î ¸»ÇÏ¸é ´©±¸¶óµµ Subversion Ŭ¶óÀ̾ðÆ®¸¦ »ç¿ëÇØ ÀúÀå¼Ò(repository) URL(¿Í ±× ¼­ºê µð·ºÅ丮)ÀÇ ÀÛ¾÷ Ä«ÇǸ¦ üũ¾Æ¿ô ÇÒ ¼ö°¡ ÀÖ¾î ºê¶ó¿ìÀú·Î ÀúÀå¼Ò(repository)ÀÇ URL¸¦ ÀÔ·ÂÇÏ´Â °ÍÀ¸·Î ´©±¸¶óµµ ÀúÀå¼Ò(repository)ÀÇ ÃֽŠ¹öÀüÀ» ´ëÈ­ÀûÀ¸·Î ¿­¶÷ÇÒ ¼ö°¡ ÀÖ¾î ´©±¸¶óµµ ÀúÀå¼Ò(repository)¿¡ Ä¿¹ÔÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ¸¸¾à Àü¹ÝÀûÀ¸·Î Àоîµé¿© ȤÀº ±âÀÔÇØ ¾×¼¼½ºÀÇ Á¦ÇÑÀ» ÀúÀå¼Ò(repository)¿¡ °ÉÄ¡°í ½ÍÀº °æ¿ì ApacheÀÇ ÆíÀÔ ¾×¼¼½º Á¦¾î ±â´ÉÀ» »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ±×·¯ÇÑ °ÍÀ¸·Î 1¹ø °£´ÜÇÑ ±â´ÉÀº º£ÀÌÁ÷ ÀÎÁõ ±â±¸·Î ±× »ç¶÷ÀÌ ±× »ç¶÷ ÀÚ½ÅÀÎ °ÍÀ» È®ÀÎÇϱâ À§Çؼ­ À¯Àú¸íÀ¸·Î Æнº¿öµå¸¦ »ç¿ëÇÕ´Ï´Ù. Apache¿¡´Âhtpasswd À¯Æ¿¸®Æ¼°¡ ÀÖ¾î ¾×¼¼½º ÇÒ ¼ö ÀÖ´Â À¯Àú¿Í Æнº¿öµåÀÇ ¸®½ºÆ®¸¦ °ü¸®ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. Subversion ÀúÀå¼Ò(repository)¿¡ Ưº°ÇÑ ¾×¼¼½º ¼³Á¤À» ÇÏ°í ½ÍÀ» ¶§¿¡µµ ÀÌ°ÍÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. Sally¿Í Harry¿¡ Ä¿¹Ô ±ÇÇÑÀ» ÁÖ¾î º¾½Ã´Ù. ¿ì¼± Æнº¿öµå ÆÄÀÏ ¿¡ µÎ ¸íÀ» Ãß°¡ÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. $ ### First time: use -c to create the file $ htpasswd -c /etc/svn-auth-file harry New password: ***** Re-type new password: ***** Adding password for user harry $ htpasswd /etc/svn-auth-file sally New password: ******* Re-type new password: ******* Adding password for user sally $ ´ÙÀ½¿¡ Location ºí·ÏÀÇ ¾ÈÂÊ¿¡ httpd.conf ÀνºÆ®·°¼ÇÀ» ¸î°³Àΰ¡ Ãß°¡ÇØ Apache¿¡ ÀÌ »õ·Î¿î Æнº¿öµå¸¦ »ç¿ëÇØ ÁÙ °ÍÀ» ÀüÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. AuthType ÀνºÆ®·°¼ÇÀº ¾î¶°ÇÑ Å¸ÀÔÀÇ Çã°¡ ¹æ¹ýÀ» »ç¿ëÇÏ´ÂÁö¸¦ ÁöÁ¤ÇÕ´Ï´Ù. À̹øÀº Basic ŸÀÔÀ» ÁöÁ¤ ÇÏ°í ½Í´Ù°í ÇÕ´Ï´Ù. AuthName ´Â Çã°¡ µµ¸ÞÀÎÀ» À§Çؼ­(¶§¹®¿¡) ÀÓÀÇ¿¡°Ô ÁÖ´Â À̸§ÀÔ´Ï´Ù. ´ëºÎºÐÀÇ ºê¶ó¿ìÀú´Â À¯Àú¿¡°Ô À̸§°ú Æнº¿öµå¸¦ ¹®ÀÇÇÒ ¶§ ÀÌ À̸§À» pop-up ´ÙÀÌ¾Ë·Î±× ¹Ú½ºÁß¿¡ Ç¥½ÃÇÕ´Ï´Ù. ¸¶Áö¸·¿¡AuthUserFile ÀνºÆ®·°¼ÇÀ» »ç¿ëÇØ htpasswd·Î ¸¸µç Æнº¿öµå ÆÄÀÏÀÇ Àå¼Ò¸¦ ÁöÁ¤ÇÕ´Ï´Ù. ÀÌ ¼¼ °³ÀÇ ÀνºÆ®·°¼ÇÀ» Ãß°¡ÇÑ µÚ <Location> ºí·ÏÀº ¹«¾ùÀΰ¡ ÀÌÇÏ¿Í °°ÀÌ µÇ¾î ÀÖÀ» °ÍÀÔ´Ï´Ù: <Location /svn> DAV svn SVNParentPath /usr/local/svn AuthType Basic AuthName "Subversion repository" AuthUserFile /path/to/users/file </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> ºí·ÏÀÇ ¾ÈÂÊ¿¡ ÀÖ¾î ÁÝ´Ï´Ù. <Location /svn> DAV svn SVNParentPath /usr/local/svn AuthType Basic AuthName "Subversion repository" AuthUserFile /path/to/users/file <LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept> </Location> ÀÌ·¯ÇÑ °ÍÀº ´Ü¼øÇÑ ¿¹¿¡ Áö³ªÁö ¾Ê½À´Ï´Ù. Apache ¾×¼¼½º Á¦¾î¿¡ ´ëÇÑ Á» ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â Apache ¹®¼­ Æ©Å丮¾óÁý http://httpd.apache.org/docs-2. 0/misc/tutorials.html ÀÇSecurity ÀÇ ÀåÀ» ºÁ ÁÖ¼¼¿ä. ¼­¹ö ¸íĪ°ú COPY ¿ä±¸ SubversionÀº ¼­¹ö»óÀÇ ÆÄÀÏÀ̳ª µð·ºÅ丮ÀÇ Ä«ÇǸ¦ ½ÇÇàÇÑ´Ù ¿ä±¸ ŸÀÔÀ¸·Î¼­COPY¸¦ »ç¿ëÇÕ´Ï´Ù. Apache ¸ðµâ ÀÇ Á¤ÇÕ¼º üũÀÇ ÀÏ°üÀ¸·Î¼­ Ä«ÇÇ¿ø·¡´Â Ä«ÇÇó¿Í °°Àº ¸Ó½Å»ó¿¡ ¾î´À ¿ä±¸µË´Ï´Ù. ÀÌ ¿ä±¸¸¦ ä¿ì±â À§Çؼ­(¶§¹®¿¡) mod_dav ¿¡ ¼­¹öÀÇ È£½ºÆ® ¸íĪÀ¸·Î¼­ ÀÌ¿ëÇÏ´Â À̸§À» °¡¸£Ä¥ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ÀÌ°Í¿¡´Â º¸Åë httpd.conf Áß(¾È)¿¡¼­ ServerName ÀνºÆ®·°¼ÇÀ» »ç¿ëÇØ ÁÝ´Ï´Ù. ServerName svn.red-bean.com NameVirtualHost ¸¦ »ç¿ëÇÑ ApacheÀÇ °¡»ó È£½ºÆ® ¼­Æ÷Æ®¸¦ »ç¿ëÇÏ°í ÀÖ´Â °æ¿ì ServerAlias ÀνºÆ®·°¼Ç ±×¸®°í ¼­¹öÀÇ Ãß°¡ ¸íĪÀ» ÁöÁ¤ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ÀÌ°Í¿¡ ´ëÇؼ­µµ ÀÚ¼¼ÇÏ°Ô´Â ApacheÀÇ ¹®¼­¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä. ÀúÀå¼Ò(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 ½ºÅ¸ÀÏ ½ÃÆ®¸¦ ÂüÁ¶Çϵµ·Ï(µíÀÌ) ¼³Á¤ÇÕ´Ï´Ù: <Location /svn> DAV svn SVNParentPath /usr/local/svn SVNIndexXSLT "/svnindex.xsl" … </Location> SVNIndexXSLT ÀνºÆ®·°¼Ç°ú Àß ÇÒ ¼ö ÀÖ´ø XSLT ½ºÅ¸ÀÏ ½ÃÆ®¸¦ »ç¿ëÇØ µð·ºÅ丮 Ç¥½Ã¿¡ À¥ »çÀÌÆ®³»ÀÇ ´Ù¸¥ Àå¼Ò¿¡ ÀÖ´Â Ä®¶ó ½ºÅ´À̳ª À̹ÌÁö¸¦ »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ȤÀº ¸¸¾à ¹Ù¶õ´Ù¸é SubversionÀÇ ¼Ò½º ÆÐÅ°ÁöÀÇtools/xslt/ ¿¡ ÁغñµÈ »ùÇà ½ºÅ¸ÀÏ ½ÃÆ®¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. SVNIndexXSLT ·Î ÁöÁ¤ÇÏ´Â Æнº´Â ½ÇÁ¦·Î´Â URL ÆнºÀÎ °Í¿¡ ÁÖÀÇÀÔ´Ï´Ù—±× ½ºÅ¸ÀÏ ½ÃÆ®¸¦ »ç¿ëÇϱâ À§Çؼ­ ºê¶ó¿ìÀú°¡ ±×°ÍÀ» ÀоîµéÀÏ ¼ö ¾øÀ¸¸é ¾ÈµË´Ï´Ù! ´Ù¾çÇÑ 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Àº ÀÚÀ¯·Ó°Ô ÀÌ¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. <command>svnserve</command>, Ä¿½ºÅÒ Subversion ¼­¹ö ApacheÀÇ ´ëü·Î¼­ SubversionÀº ½ºÅĵå¾ó·ÐÀÇ ¼­¹ö ÇÁ·Î±×·¥ svnserve µµ ÁغñÇØ ÀÖ½À´Ï´Ù. ÀÌ ÇÁ·Î±×·¥Àº Apacheº¸´Ù ÈξÀ °¡º±°Ô ¸¸µé¾îÁö°í ÀÖ¾î ¼³Á¤µµ ÈξÀ °£´ÜÇÕ´Ï´Ù. º¸Åë TCP/IPÁ¢¼ÓÀ» ÅëÇؼ­ Subversion Ŭ¶óÀ̾ðÆ®¿Í °íÀ¯ÀÇ ÇÁ·ÎÅäÄÝ ±×¸®°í À̾߱âÇÕ´Ï´Ù. svnserve°¡ ÀÌ¿ëÇÑ´Ù ÀÏÀ» ÇÒ ¼ö ÀÖ´Â µÎ °³ÀÇ ±âº»ÀûÀÎ ¹æ½ÄÀÌ ÀÖ½À´Ï´Ù: ÀÎÁõ ¾øÀ½ÀÇ(À͸íÀÇ) ¾×¼¼½º ÀÌ ½Ã³ª¸®¿À¿¡¼­´ÂsvnserveÇÁ·Î¼¼½º ÇÏÁö¸¸ ¼­¹ö»ó¿¡¼­ ½ÇÇàµÇ¾î Á¢¼Ó ¿ä±¸¸¦ ±â´Ù¸³´Ï´Ù. svn Ŭ¶óÀ̾ðÆ®´Â °íÀ¯ÀÇ svn:// URL Çü½ÄÀ» ÀÌ¿ëÇØ Á¢¼ÓÇÕ´Ï´Ù. Ŭ¶óÀ̾ðÆ® Á¢¼ÓÀº ¹«Á¶°Ç ¹Þ¾Æµé¿©Á® ÀúÀå¼Ò(repository)´Â ÀÎÁõµÈ À¯Àú ¸íĪµîÀ» ÀÌ¿ëÇÏ´Â ÀÏ ¾øÀÌ ¾×¼¼½º µË´Ï´Ù. ÀÚÁÖ °ü¸®ÀÚ´Â ¸®µå¿Â¸®-¿¡ demon¸¦ ¼³Á¤ÇÏ´Â °ÍÀÌ ÀÖ½À´Ï´Ù. ÀÎÁõ ºÙ¾î ÀÖ´Â(SSH) ¾×¼¼½º ÀÌ ½Ã³ª¸®¿À¿¡¼­´Â svn Ŭ¶óÀ̾ðÆ®´Â °íÀ¯ÀÇ svn+ssh:// URL Çü½ÄÀ» »ç¿ëÇÏ´Â; ÀÌ°ÍÀº ·ÎÄÃÀÎ ½ÃÅ¥¾î Á¶°¡ºñ(SSH) ÇÁ·Î¼¼½º¸¦ ±âµ¿ÇØ ¼­¹ö¿¡ Á¢¼ÓÇÏ°í ³ª¼­ ÀÚ±â ÀÚ½ÅÀ» ÀÎÁõÇÕ´Ï´Ù. ÀÌ°Í¿¡´Â À¯Àú´Â ÇϵîÀÇ ÇüÅÂÀÇ ½Ã½ºÅÛ ¾îÄ«¿îÆÃÀ» ¼­¹ö À§¿¡ °¡Áö°í ÀÖÀ» ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ÀÎÁõ ¿Ï·á ÈÄ SSH ÇÁ·Î¼¼½º°¡ ÀϽÃÀûÀ¸·Î ³»ºÎÀû svnserveÇÁ·Î¼¼½º¸¦ ¼­¹ö»ó¿¡ ±âµ¿ÇØ ÀÎÁõµÇ¾ú´Ù À¯Àú·Î¼­ ½ÇÇàµË´Ï´Ù. ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ®´Â ¾ÏȣȭµÈ ssh ÅͳΠ(À»)¸¦ °³ÀÔ½ÃÄÑ Åë½ÅÇÕ´Ï´Ù. ÀÌ µÎ °³ÀÇsvnserveÀÇ ÀÌ¿ë ¹æ¹ýÀº ¼­·Î ¹èŸÀûÀÎ ¹°°ÇÀº ¾Æ´Ñ °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä; ¾çÂÊ ¸ðµÎÀÇ ±¸Á¶¸¦ ¼­¹ö»ó¿¡¼­ µ¿½Ã¿¡ ÀÌ¿ëÇÏ´Â °Í ÇÏÁö¸¸ ÇÒ ¼ö ÀÖ½À´Ï´Ù. À͸í TCP/IP¾×¼¼½ºÀÇ ¼³Á¤ ¿É¼Ç¾øÀÌ ½ÇÇàÇϸé(ÀÚ)svnserve (Àº)´Â svn Ŭ¶óÀ̾ðÆ®¿Í ¼¼¼ÇÀ» È®¸³Çϱâ À§Çؼ­ µ¥ÀÌÅ͸¦ Ç¥ÁØ Ãâ·Â¿¡ ½á Ç¥ÁØ ÀÔ·ÂÀ¸·ÎºÎÅÍ ¹Þ½À´Ï´Ù: $ svnserve ( success ( 1 1 ( ANONYMOUS ) ( ) ) ) ÀÌ°ÍÀº Á÷Á¢ ´©±º°¡ÀÇ µµ¿òÀÌ µÇ´Â °ÍÀº ¾Æ´Õ´Ï´Ù; svnserve ´Â ÀÌ ±¸Á¶¸¦ »ç¿ëÇØinetd demon·ÎºÎÅÍ ±âµ¿ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. ±×·¯³ª svnserve (À»)¸¦ demon·Î¼­ ±âµ¿Çϴµ¥´Â ¸î°³ÀÇ ´Ù¸¥ ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù. Çϳª´«ÀÇ ¼±ÅûçÇ×Àºsvn¸¦ ¼­¹ö¸Ó½Å»óÀÇ inetdÀÇ ¼­ºñ½º·Î¼­ µî·ÏÇÏ´Â °ÍÀÔ´Ï´Ù. ±×·¸°Ô Çؼ­ µÎ¾î Ŭ¶óÀ̾ðÆ®°¡ Æ÷Åä 3690 ¿¡ Á¢¼ÓÇÏ·Á°í Çϸé ÀÌ ¹øÈ£´Â ÀÎÅÍ³Ý ÇÒ´ç ¹øÈ£ ±â°ü(IANA)¿¡ ÀÇÇØ È®º¸µÇ°í ÀÖ½À´Ï´Ù. inetd ´Â1ȸ ÇÑÁ¤ÀÇ svnserve ÇÁ·Î¼¼½º¸¦ ±âµ¿ÇØ Å¬¶óÀ̾ðÆ® (À¸)·ÎºÎÅÍÀÇ ¿ä±¸¸¦ ó¸®ÇÕ´Ï´Ù. ÀÌ Å¸ÀÔÀÇ ¼³Á¤À» ÇßÀ» °æ¿ì svnserve ÇÁ·Î¼¼½º¸¦root(Àΰ¡ ¹«Á¦ÇÑÀÇ ±ÇÇÑÀ» °¡Á³´Ù ´Ù¸¥ À¯Àú)·Î ½ÇÇàÇÏÁö ¾Ê´Â ÆíÀÌ ÁÁÀ»Áöµµ ¸ð¸¨´Ï´Ù. °ø°³ÇÏ°í ÀÖ´Â ÀúÀå¼Ò(repository)ÀÇ ¼ÒÀ¯ÀÚ¿Í Æ۹̼ǿ¡ ÀÇÇØ ´Ù¸¥—¾Æ¸¶ »õ·ÎÀÌ ¸¸µç—À¯ÀúÀÎ °ÍÀÌ º¸´Ù ¹Ù¶÷Á÷ÇÒ °ÍÀÔ´Ï´Ù. ¿¹¸¦ µé¾î svn (ÀÌ)¶ó´Â À̸§ÀÇ À¯Àú¸¦ »õ·Ó°Ô ¸¸µé¾î ±× À¯Àú¿¡°Ô Subversion ÀúÀå¼Ò(repository)¿¡ ´ëÇÑ ¹«Á¦ÇÑÀÇ ±Ç¸®¸¦ ÁÖ¾îsvnserve ÇÁ·Î¼¼½º¸¦ ±× À¯Àú·Î ½ÇÇàÇϵµ·Ï(µíÀÌ) ¼³Á¤ÇÕ´Ï´Ù. ¹°·Ð ÀÌ ÃÖÃÊÀÇ ¹æ¹ýÀºinetd(Àΰ¡ ±×·¯ÇÑ) demon¸¦ °¡Áø ¸Ó½ÅÀ¸·Î ¸¸ ÇÒ ¼ö ÀÖ´Â °ÍÀÔ´Ï´Ù. ÀÌ°ÍÀº ÀϹÝÀûÀ¸·Î Unix»ó¿¡¼­´Â ÇÑÁ¤µÈ ȯ°æÀÔ´Ï´Ù. ´Ù¸¥ ¹æ¹ýÀº svnserve ¸¦ ½ºÅĵå¾ó·ÐÀÇ demon·Î¼­ ½ÇÇàÇÏ´Â °ÍÀÔ´Ï´Ù. ¿É¼Ç µ¹ÃâÇÏ°í ±âµ¿Çϸé svnserve ´Â Áï½Ã ÇöÀçÀÇ Á¶°¡ºñ ÇÁ·Î¼¼½º¸¦ ¶¼¾î³» °è¼Ó ¿µ±¸È÷ ´Þ¸®´Â ¹é±×¶ó¿îµå ÇÁ·Î¼¼½º¿Í µË´Ï´Ù. ±×¸®°í Æ÷Åä 3690À¸·Î ¿ä±¸¸¦ °è¼Ó ±â´Ù¸³´Ï´Ù. $ svnserve -d $ # svnserve is still running, but the user is returned to the prompt Ŭ¶óÀ̾ðÆ®°¡svnserve ÇÁ·Î¼¼½º¿¡ ³×Æ®¿öÅ© Á¢¼ÓÀ» Ä¡¸é (ÀÌ°ÍÀº demon·Î¼­ ½ÇÇàµÇ°í ÀÖ´ÂÁö 1ȸ ÇÑÁ¤ÀÇ Ã³¸®Àϱ ÀÇÇÏÁö ¾Ê°í) ÀÎÁõ È®ÀÎÀº ¿ÏÀüÈ÷ ½ÇÇàµÇÁö ¾Ê½À´Ï´Ù. ¼­¹ö ÇÁ·Î¼¼½º´Â ´©°¡ ±×°ÍÀ» ½ÇÇàÇÏ°í À־ ÀúÀå¼Ò(repository)¿¡ ¾×¼¼½º ÇØ Å¬¶óÀ̾ðÆ®°¡ Ä¿¹ÔÀ» ¹ßÇàÇÏ¸é »õ·Î¿î ¸®ºñÀüÀÌ svn:author¼Ó¼º¾øÀÌ ÀÛ¼ºµË´Ï´Ù. ÇÑ ¹ø svnserve ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ¸é(ÀÚ) ±×°ÍÀº ½Ã½ºÅÛ»óÀÇ ¸ðµç ÀúÀå¼Ò(repository)¸¦ ³×Æ®¿öÅ©·ÎºÎÅÍ ÀÌ¿ë °¡´ÉÇÏ°Ô ÇÕ´Ï´Ù. ¹Ù²Ù¾î ¸»Çϸé(ÀÚ) Ŭ¶óÀ̾ðÆ®°¡ svn://example.com/usr/local/repos/project (À»)¸¦ üũ¾Æ¿ô ÇÏ·Á°í Çϸé example.com »ó¿¡¼­ µ¿ÀÛÇÏ°í ÀÖ´Âsvnserve ÇÁ·Î¼¼½º´Â Àý´ë Æнº/usr/local/repos/project¿¡ ÀÖ´Ù ÀúÀå¼Ò(repository)¸¦ º¸·¯ °©´Ï´Ù. ½ÃÅ¥·¯Æ¼¸¦ È®º¸ÇÏ·Á¸ésvnserve ¿¡¿É¼ÇÀ» °Ç³×ÁÖ¾î ±× Æнº ÀÌÇÏÀÇ ÀúÀå¼Ò(repository)¸¸À» °ø°³Çϵµ·Ï(µíÀÌ) Á¦ÇÑÇÕ´Ï´Ù: $ svnserve -d -r /usr/local … ¿É¼ÇÀÇ ÀÌ¿ëÇϸé ÇÁ·Î±×·¥ÀÌ Ãë±ÞÇÑ´Ù Æнº À§Ä¡¸¦ Á¢¼Óó ÆÄÀÏ ½Ã½ºÅÛ °ø°£ÀÇ ·çÆ®·Î¼­ Ãë±ÞÇÒ ¼ö°¡ ÀÖ´Ù °°°Ô µË´Ï´Ù. ÀÌ ¶§¹®¿¡ Ŭ¶óÀ̾ðÆ®´Â URLÁßÀÇ ÆнºÀÇ ÀϺθ¦ »ý·« ÇÑ´Ù ÀÏÀÌ »ý°Ü Á» ´õ ªÀº(±×¸®°í ¼­¹ö¿¡ ÀÖ¾î Á» ´õ ¾ÈÀüÇÑ) URL¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù: $ svn checkout svn://example.com/repos/project … ¸¶Áö¸·À¸·Î ÀúÀå¼Ò(repository)ÀÇ ±âÀÔ ¾×¼¼½º¸¦ ±ÝÁöÇÏ·Á¸é svnserve¸¦ ¿É¼ÇÀ¸·Î ±âµ¿ ÇØ ÁÖ¼¼¿ä. ÀÌ°ÍÀº ÀúÀå¼Ò(repository)»óÀÇ µ¥ÀÌÅÍ¿¡ ´ëÇؼ­ ¸®µå Á¶ÀÛ¸¸À» Çã¶ôÇÕ´Ï´Ù. SSH ¾×¼¼½ºÀÇ ¼³Á¤ ÀϹÝÀûÀ¸·Î ¾î´À À¯Àú(ÀáÀçÀûÀ¸·Î À¯ÀúÀÇ ¹üÀ§°¡ ÁöÁ¤µÇ¾î ÀÖÁö ¾ÊÀº °Í °°Àº »óȲÀ¸·Î) ÇÏÁö¸¸ º¯°æ¿¡ ´ëÇؼ­ Ã¥ÀÓÀÌ ÀÖÀ»±î¸¦ ¾Æ´Â °ÍÀº Èï¹Ì·Î¿î ÀÏÀÔ´Ï´Ù. ¾î´À ÇÑ ¹«¸®ÀÇ »ç¶÷ÀÎ ¸¸Å­ ÀúÀå¼Ò(repository)ÀÇ ±âÀÔ ±ÇÇÑÀ» Á¦ÇÑÇÒ ¼ö ÀÖ´Â °ÍÀº Á» ´õ Áß¿äÇÕ´Ï´Ù. ¸ðµÎ¿¡ ÀÓÇؼ­ ÀÚÀ¯·Î¿î ¼³Á¤Àº ÀÚÁÖ È¥µ·µÇ¾î ¹ö¸®´Â °ÍÀÔ´Ï´Ù. ÀÌ·¯ÇÑ ¾çÂÊ ¸ðµÎÀÇ ¿ä°ÇÀ» ä¿ì´Âµ¥ libsvn_ra_svn¸¦ »ç¿ëÇϴ Ŭ¶óÀ̾ðÆ® (Àº)´Â SSH¸¦ »ç¿ëÇØ ³×Æ®¿öÅ© ¼¼¼ÇÀ» ÅͳΠÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ÀÌ »ý°¢¿¡¼­´Â Ŭ¶óÀ̾ðÆ®°¡ Subversion ÀúÀå¼Ò(repository)¿¡ Á¢¼Ó ÇÏ·Á°í ÇÒ ¶§¸¶´Ù »õ·Î¿îsvnserve ÇÁ·Î¼¼½º ÇÏÁö¸¸ ·ÎÄÃÀÎ SSH ÇÁ·Î¼¼½º¿¡ ÀÇÇØ ¼­¹ö»ó¿¡¼­ ±âµ¿µË´Ï´Ù. ÀÌ °æ¿ì ½ºÅĵå¾ó·Ð ÀÇ svnservedemon¸¦ ±âµ¿ÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù — Ŭ¶óÀ̾ðÆ®ÀÇ ÀÎÁõµÈ SSH Á¢¼ÓÀº ±× ÀÎÁõµÈ À¯Àú·Î ½ÇÇàµÈ´Ù ¼­¹ö»óÀÇ »çÀûÀÎ svnserve ÇÁ·Î¼¼½º¸¦ ±âµ¿ÇÕ´Ï´Ù. ( ½ÇÀº ÀÌ°ÍÀº CVS°¡ :ext:¾×¼¼½º ¹æ¹ý°ú SSH¸¦ »ç¿ëÇØ ½ÇÇàµÈ´Ù ÀÇ¿Í °°Àº ¹æ¹ýÀÔ´Ï´Ù. ) SSH ÀÚ½ÅÀº ÀÎÁõµÈ À¯ÀúÀÎ °ÍÀ» ¿ä±¸ÇϹǷΠÀÍ¸í ¾×¼¼½º°¡ ÀϾ °ÍÀº ¾ø½À´Ï´Ù. ±×¸®°í ÀÍ¸í ¾×¼¼½º µÇ´Â °Í ÇÏÁö¸¸ ¾ø±â ¶§¹®¿¡ ¾î¶°ÇÑ ÀúÀå¼Ò(repository)ÀÇ º¯°æ¿¡ ´ëÇؼ­µµ ÀÎÁõµÈ À¯Àú ¸íĪÀÌ ±× ½ÇÇàÀڷμ­ ±â·ÏµÈ´Ù°í ÇÏ´Â °ÍÀÌ µË´Ï´Ù. Subversion Ŭ¶óÀ̾ðÆ®´Âsvn+ssh://Çü½Ä°ú ÀúÀå¼Ò(repository)¿¡ ´ëÇÑ Àý´ë Æнº¸¦ ÁöÁ¤ÇÏ´Â °Í¿¡ ÀÇÇØ SSH ÅͳθµÀ» ½ÇÇà ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ÀÌÇÏ¿Í °°Àº ´À³¦ÀÔ´Ï´Ù: $ svn checkout svn+ssh://example.com/usr/local/repos/project Password: … µðÆúÆ®¿¡¼­´Â svn Ŭ¶óÀ̾ðÆ®´Â À¯ÀúÀÇ$PATH ÀÇ ¾îµð¿£°¡ ÀÖ´Âssh¶ó´Â À̸§ÀÇ ÇÁ·Î±×·¥À» ½ÇÇàÇÏ·Á°í ÇÕ´Ï´Ù. ±×·¯³ª ÀÌÇÏÀÇ ¾î´À ÂÊÀΰ¡ÀÇ ¹æ¹ýÀ¸·Î SSH ÇÁ·Î±×·¥ÀÇ À̸§À» µ¡¾²±âÇÒ ¼öµµ ÀÖ½À´Ï´Ù. SVN_SSHȯ°æ º¯¼ö¸¦ »õ·Î¿î À̸§À¸·Î ¼³Á¤ÇÏ´ÂÁö Ŭ¶óÀ̾ðÆ®ÀÇ ½ÇÇà½ÃconfigÆÄÀÏÀÇ[tunnels]¼½¼Ç ÀÇsshº¯¼öÀÇ °ªÀ» ¼³Á¤ÇÏ´ÂÁö ÀÔ´Ï´Ù. ¿¹¸¦ µé¾î sshÇÁ·Î¼¼½º´Â ¼­¹ö ÀÎÁõÀ¸·Î ´ç½ÅÀÇ ÇöÀçÀÇ À¯Àú¸íÀ» ÀÌ¿ëÇÕ´Ï´Ù. ±× ´ë½Å¿¡ssh·Î ´Ù¸¥ À¯Àú¸íÀ» ÀÌ¿ëÇÏ°í ½ÍÀ»Áöµµ ¸ð¸¨´Ï´Ù. ±× °æ¿ì ÀÌÇÏ¿Í °°Àº Ä¿¸àµå¸¦ ½ÇÇàÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. $ export SVN_SSH="ssh -l username" … ȤÀº ÀÌÇϸ¦ Æ÷ÇÔÇϵµ·Ï(µíÀÌ) ½ÇÇà½Ãconfig (À»)¸¦ ÆíÁýÇÒ ¼öµµ ÀÖ½À´Ï´Ù. [tunnels] ssh = ssh -l username config ½ÇÇà½Ã ¼³Á¤ ÆÄÀÏÀÇ ¼³Á¤¿¡ ºÙÀº ÀÚ¼¼ÇÑ °ÍÀºÀ» ºÁ ÁÖ¼¼¿ä. ¾î´À ¼­¹ö¸¦ »ç¿ëÇϸé ÁÁÀº°Å¾ß? Apache HTTP ¼­¹ö¿Í Ä¿½ºÅÒsvnserve ÇÁ·Î±×·¥ ÀÇ ¾î´À ÂÊÀ» »ç¿ëÇұ ´ëÇؼ­´Â À¯ÀÏÇÑ ¿Ã¹Ù¸¥ ´ë´äÀº ¾ø½À´Ï´Ù. °³º°ÀÇ ¿ä±¸¿¡ ÀÇÇØ ¾î´À ÂÊÀΰ¡ÀÇ ¹æ¹ýÀÌ º¸´Ù ¹Ù¶÷Á÷ÇÒÁöµµ ¸ð¸¨´Ï´Ù. ±×¸®°í ÀÌ µÎ °³ÀÇ ¼­¹ö´Â µ¿½Ã¿¡ ½ÇÇàÇÒ ¼öµµ ÀÖ¾î ±× °æ¿ì °¢°¢ÀÇ ÀúÀå¼Ò(repository)¿¡ °¢°¢ÀÇ ¹æ¹ýÀ¸·Î ¾×¼¼½º ÇØ ¼­·Î¸¦ ¹æÇØ Çϰųª ÇÏ´Â °ÍÀº ¾ø½À´Ï´Ù. ÀüÀÇ µÎ °³ÀÇ ¸¶µð¸¦ Á¤¸®ÇØ ¿©±â¿¡ µÎ °³ÀÇ Subversion ¼­¹öÀÇ ºñ±³Ç¥¸¦ µé¾î µÓ´Ï´Ù—´ç½Å°ú ´ç½ÅÀÇ À¯Àú¿¡°Ô ÀÖ¾î ¹Ù¶÷Á÷ÇÏ´Ù ÆíÀ» »ç¿ëÇØ ÁÖ¼¼¿ä. Apache/mod_dav_svn ÀÎÁõ(Authentication): http ±âº»/´ÙÀÌÁ¦½ºÆ® ÀÎÁõ, Áõ¸í¼­, LDAP µî. Apache ´Â ³ÐÀº ¹üÀ§ÀÇ ÀÎÁõ ¸ðµâÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ½Ã½ºÅÛ ¾îÄ«¿îÆÃÀ» ¸¸µç´Ù ÇÊ¿ä´Â ¾ø½À´Ï´Ù Àΰ¡(Authorization): ÀÐ°í ¾²±â ¾×¼¼½º´Â ÀúÀå¼Ò(repository) ¸¶´Ù (httpd.conf ÀνºÆ®·°¼Ç¿¡ ÀÇÇØ) Á¦ÇÑÇÏ´ÂÁö µð·ºÅ丮¸¶´Ù(mod_authz_svn¸¦ »ç¿ëÇØ) ¿¡ Á¦ÇÑÇÒ ¼ö°¡ ÀÖ´Ù. »õ·Î¿î ÆÄÀÌ¾î ¿ù(fire wall) Æ÷Å並 ºñ¿ï ÇÊ¿ä´Â ¾ø´Ù ÆíÀÔÀÇ À¥ ºê¶ó¿ìÀú¿¡ ÀÇÇÑ ÀúÀå¼Ò(repository) ¿­¶÷ ±â´É(Á¦ÇÑ ÀÖ¾î) ´Ù¸¥ WebDAV Ŭ¶óÀ̾ðÆ®¿ÍÀÇ Á¦ÇÑ ´ÙÇÏ°í »óÈ£ Á¦ÈÞ ´Ù¸¥ WebDAV Ŭ¶óÀ̾ðÆ®¿ÍÀÇ Á¦ÇÑµÈ »óÈ£ ¿î¿ë¼º HTTP ÇÁ·Ï½ÃÀÇ Ä³½¬¸¦ ÀÌ¿ëÇÏ´Â ´É·Â ±ä ±â°£¿¡ °ÉÃļ­ ½ÇÁõ µÇ°í ÀÖ´Â ½ºÄÉÀ̶óºñ¸®Æ¼ —Apache´Â ¹«¼öÇÑ Å« »çÀÌÆ®¿¡¼­ ÀÌ¿ëµÇ°í ÀÖ´Â À¥ ¼­¹öÀÔ´Ï´Ù. ¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ³ÐÀº È®À强: ¿©·¯°¡Áö ÀÎÁõ, Çã°¡ µî ¾×¼¼½º, ¾Ïȣȭ, ¾ÐÃà svnserve ÀÎÁõ(Authentication): SSH ÅͳΠ°æÀ¯¸¸. À¯Àú´Â ½Ã½ºÅÛ ¾îÄ«¿îÆÃÀÌ ÇÊ¿ä Àΰ¡(Authorization): ÀúÀå¼Ò(repository) DB ÆÄÀÏ»óÀÇ °øÀ¯µÇ¾ú´Ù ¼ÒÀ¯°Ç/Çã°¡ Á¤º¸¸¦ °æÀ¯ Apache º¸´Ù ²Ï °¡º±°í ´ëºÎºÐÀÇ Á¶ÀÛ¿¡ °üÇؼ­ °í¼Ó Apacheº¸´Ù Âß °£´ÜÇÏ°Ô ¼³Á¤ÇÒ ¼ö ÀÖ´Ù ±âÁ¸ÀÇ SSH ½ÃÅ¥·¯Æ¼¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù ÀúÀå¼Ò(repository)ÀÇ ÆÛ¹Ì¼Ç ¾î¶»°Ô ÇØ ´Ù¾çÇÑ ¹æ¹ýÀ¸·Î ÀúÀå¼Ò(repository)¿¡ ¾×¼¼½º ÇÒ ¼ö ÀÖÀ»±î¸¦ ºÁ ¿Ô½À´Ï´Ù. ±×·¯³ª, ÀúÀå¼Ò(repository)¿¡ ´ëÇؼ­ µ¿½Ã¿¡ º¹¼öÀÇ ¹æ¹ýÀ¸·Î ¾×¼¼½º ÇÏ´Â °ÍÀº °¡´É—°Ô´Ù°¡ ¾ÈÀüÇÏ°Ô—Àϱî¿ä? ´ë´äÀº ¿¹½ºÀÔ´Ï´Ù. Á¶±Ý(»Ó)¸¸ ÅëÂû·ÂÀÌ ÇÊ¿äÇÕ´Ï´Ù¸¸. ¾ðÁ¦¶óµµ ÀÌ·¯ÇÑ ÇÁ·Î¼¼½º´Â ÀúÀå¼Ò(repository)¿¡ ´ëÇؼ­ Àоîµé¿©/±âÀÔ ¿ä±¸¸¦ ³¾ ¼ö°¡ ÀÖ½À´Ï´Ù: Subversion Ŭ¶óÀ̾ðÆ®¸¦ »ç¿ëÇØ ÀúÀå¼Ò(repository)¿¡ Á÷Á¢ ¾×¼¼½º ÇÏ´Â º¸Åë ½Ã½ºÅÛ À¯Àú. SSH°¡ ±âµ¿ÇÑ »çÀûÀÎ svnserve ÇÁ·Î¼¼½º¿¡ Á¢¼ÓÇÏ´Â º¸Åë ½Ã½ºÅÛ À¯Àú. ±× ÇÁ·Î¼¼½º°¡ ½ÇÁ¦·Î´Â ÀúÀå¼Ò(repository)¿¡ ¾×¼¼½º ÇÕ´Ï´Ù. ƯÁ¤ÀÇ °íÁ¤µÈ À¯Àú·Î¼­ ½ÇÇàµÇ°í Àִ—demonÀϱî inetd¿¡ ÀÇÇØ ±âµ¿µÇ¾ú´ÂÁö ÇÑ — svnserve ÇÁ·Î¼¼½º. ƯÁ¤ÀÇ °íÁ¤µÈ À¯Àú·Î¼­ ½ÇÇàµÇ°í ÀÖ´Ù Apache httpd ÇÁ·Î¼¼½º. °ü¸®ÀÚ°¡ ¸Ó¸®¸¦ ¿òÄÑ Áã´Â 1¹ø ÀÚÁÖ ÀÖ´Â ¹®Á¦´Â ¼ÒÀ¯±Ç°ú Æ۹̼ÇÀÔ´Ï´Ù. ÀüÀÇ ¸®½ºÆ®ÁßÀÇ ¸ðµç ÇÁ·Î¼¼½º(ȤÀº À¯Àú)°¡ BerkeleyDB ÆÄÀÏ¿¡ ÀÐ°í ¾²±â ¾×¼¼½º ÇÒ ±Ç¸®°¡ ÀÖ´Â °ÍÀϱî¿ä? UnixdzÀÇ operating systemÀÇ °æ¿ì¸¦ »ý°¢ÇÏ¸é ¼ÖÁ÷ÇÑ ¾îÇÁ·ÎÄ¡ ´Â ¸ðµç ÀáÀçÀûÀÎ ÀúÀå¼Ò(repository) À¯Àú¸¦ »õ·Î¿îsvn ±×·ì¿¡ µé¾î°¥ ¼ö ÀÖ¾î ¹ö·Á ÀúÀå¼Ò(repository)´Â ¸ðµÎ ±× ±×·ì¿¡ ÀÇÇØ ¼ÒÀ¯µÈ´Ù°í ÇÏ´Â °ÍÀÔ´Ï´Ù. ±×·¸Áö¸¸ ±×°ÍÀº ÃæºÐÇÏÁö´Â ¾Ê½À´Ï´Ù. ÇÁ·Î¼¼½º´Â µ¥ÀÌŸº£À̽º¿¡ ´ëÇؼ­ Á¦ÇÑÀÇ ¾î·Á¿î umask¸¦ »ç¿ëÇØ ±âÀÔÇÒÁöµµ ¸ð¸£´Ï±î ÀÔ´Ï´Ù. —±×°ÍÀº ´Ù¸¥ À¯ÀúÀÇ ¾×¼¼½º¸¦ ¹æÇØÇØ ¹ö¸®°ÚÁö¿ä. ±×·¡¼­ ÀúÀå¼Ò(repository) À¯ÀúÀÇ °øÅë ±×·ìÀÇ ¼³Á¤ÀÇ ´ÙÀ½ÀÇ ½ºÅÜÀº ¸ðµç ÀúÀå¼Ò(repository)¿¡ ¾×¼¼½º ÇÏ´Â ÇÁ·Î¼¼½º¿¡ ÀûÀýÇÑ umask ¸¦ »ç¿ëÇÏ°Ô ÇÑ´Ù ÀÏÀÔ´Ï´Ù. ÀúÀå¼Ò(repository)¿¡ Á÷Á¢ ¾×¼¼½º ÇÏ´Â À¯Àú¿¡°Ô´Â svnÇÁ·Î±×·¥À» ·¡ÆÛ ½ºÅ©¸³Æ®¿¡ °¡µÎ¾î ³¡³» ±× ½ºÅ©¸³Æ®ÀÇ ¼±µÎ¿¡¼­umask 002 ¸¦ ¼³Á¤ ÇÏ°í ³ª¼­ ÁøÂ¥svn Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥À» ½ÇÇàÇÕ´Ï´Ù. °°Àº ·¡ÆÛ¸¦svnserve ÇÁ·Î±×·¥¿ëÀ¸·Î ½á umask 002 Ä¿¸àµå¸¦ ApacheÀÇ ±âµ¿ ½ºÅ©¸³Æ®·Î ¾î´Àapachectl¿¡ Ãß°¡ÇÕ´Ï´Ù. ±×·¯ÇÑ ÀåÇظ¦ ³Ñ¾î ¹ö¸®¸é ÀúÀå¼Ò(repository)´Â ¸ðµç ÇÊ¿äÇÑ ÇÁ·Î¼¼½º·ÎºÎÅÍ ¾×¼¼½º ÇÒ ¼ö ÀÖ°Ô µÇ¾î ÀÖÀ» °ÍÀÔ´Ï´Ù. Á¶±Ý ±ÍÂú°í º¹ÀâÇÏ´Ù°í »ý°¢ÇÒÁöµµ ¸ð¸£Áö ¾Ê½À´Ï´Ù¸¸ °øÅëÀÇ ÆÄÀÏ¿¡ ´ëÇÑ´Ù º¹¼ö À¯ÀúÀÇ ±âÀÔ ¾×¼¼½ºÀÇ °øÀ¯ÀÇ ¹®Á¦´Â ¿¹»Ú°Ô ÇØ°áÇÒ ¼ö ¾ø´Ù °íÀüÀûÀÎ ¹®Á¦ÀÇ ÇϳªÀÔ´Ï´Ù. Çà¿îÀÇ ÀÏ·Î ´ëºÎºÐÀÇ ÀúÀå¼Ò(repository) °ü¸®ÀÚ´Â ±×·¯ÇÑ º¹ÀâÇÑ ¼³Á¤ÀÇ ¹®Á¦¿¡ ¸Ó¸®¸¦ ¾ÈÀ»ÇÊ¿ä´Â ¾ø½À´Ï´Ù . °°Àº ¸Ó½Å»óÀÇ ½ÇÇàÁßÀÇ ÀúÀå¼Ò(repository)¿¡ ¾×¼¼½º ÇÏ°í ½Í´Ù°í »ý°¢ÇÏ´Â À¯Àú´Â file://¾×¼¼½º URLÀÇ »ç¿ë¿¡ Á¦Çѵǰí ÀÖÁö ¾Ê½À´Ï´Ù. —º¸ÅëÀº Apache HTTP ¼­¹ö³ªsvnserve ¼­¹ö ¿¡ÀÇ Á¢¼Ó¿¡ http:// ³ªsvn:// ÀÇ ÇüÅÂÀÇ URL¸¦ »ç¿ëÇØ ±× ÁßÀÇ ¼­¹ö ¸íĪÀ»localhost (À¸)·Î ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ±×¸®°í Subversion ÀúÀå¼Ò(repository)¿¡ÀÇ º¹¼ö ¼­¹ö ÇÁ·Î¼¼½º ÀÇ °ü¸®´Â ½ÇÁ¦·Î´Â Á»Ã³·³ ÀϾÁö ¾Ê´Â´Ù°í »ý°¢µË´Ï´Ù. 1¹ø ¿ëµµ¿¡ ¸ÂÀº ¼­¹öÀÇ ÇüŸ¦ ¼±ÅÃÇØ ±× ¸¸Å­À» »ç¿ëÇÏ´Â °ÍÀÌ ÃßõÇÏ´Â ¹æ¹ý ÀÔ´Ï´Ù. ÇÁ·ÎÁ§Æ®ÀÇ Ãß°¡ ÀúÀå¼Ò(repository)°¡ ¸¸µé¾îÁ® ¼³Á¤µÇ¸é ÈÄ´Â »ç¿ëÇÒ »ÓÀÔ´Ï´Ù. ¸¸¾à ¹ú½á µ¥ÀÌÅÍÀÇ ¸ðÀÓÀ» °¡Áö°í ÀÖ¾î ±×°ÍÀ» ¹öÀü °ü¸®ÇÏ°í ½Í´Ù °æ¿ì´Â ¹Ýµå½ÃsvnŬ¶óÀ̾ðÆ® ÇÁ·Î±×·¥ÀÇ import ÇÏÀ§ ¸í·É¾î¸¦ »ç¿ëÇÏ°í ½Í´Ù°í »ý°¢ÇÏ°ÚÁö¿ä. ±×·¯³ª ±×·¸°Ô Çϱâ Àü¿¡ ÀúÀå¼Ò(repository)¿¡ ´ëÇØ Àå±âÀûÀÎ ½ÃÁ¡¿¡¼­ ÁÖÀÇ ±í°í »ý°¢ÇØ¾ß ÇÕ´Ï´Ù. ÀÌ ¸¶µð¿¡¼­´Â ÀúÀå¼Ò(repository)ÀÇ ·¹À̾ƿôÀ» ¾î¶»°Ô °èȹÇÏ´ÂÁö ±×¸®°í ±× ·¹À̾ƿô¾È¿¡ ¾î¶»°Ô µ¥ÀÌÅ͸¦ ¹èÄ¡ÇÑ´Ù ÀÇ°¡ ÁÁÀº °Íó·³ ºÙ¾î Á¶±Ý ¾îµå¹ÙÀ̽º ÇÕ´Ï´Ù. ÀúÀå¼Ò(repository) ·¹À̾ƿôÀÇ ¼±Åà SubversionÀ» »ç¿ëÇÏ¸é ´ç½ÅÀº Á¤º¸¸¦ ÀÒ´Â °Í ¾øÀÌ ¹öÀüÈ­ µÈ ÆÄÀÏÀ̳ª µð·ºÅ丮¸¦ ¿©±âÀú±â·Î À̵¿ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù¸¸ ±×·¸°Ô ÇÏ´Â °ÍÀº µ¥ÀÌÅÍ°¡ ƯÁ¤ÀÇ Àå¼Ò¿¡ ÀÖ´Â °ÍÀ» ±â´ëÇÏ°í ÀÖ´Ù °¡²û ÀúÀå¼Ò(repository)¿¡ ¾×¼¼½º ÇÏ´Â »ç¶÷µéÀÇ ÀÛ¾÷À» ÁߴܽÃÄÑ ¹ö¸±Áöµµ ¸ð¸¨´Ï´Ù. ¾Õµµ Á¶±ÝÀº »ý°¢ÇØ ÁÖ¼¼¿ä. ¹öÀü °ü¸®ÇÏ¿¡ µ¥ÀÌÅ͸¦ µÎ±â Àü¿¡ ¹Ì¸® °èȹÀ» ¼¼¿ö ÁÖ¼¼¿ä. ÀúÀå¼Ò(repository)ÀÇ ³»¿ëÀ» ÃÖÃÊ·Î Àß·¹À̾ƿô ÇØ µÎ¸é ³ªÁß¿¡ ¸Ó¸®¸¦ ¿òÄÑ Áã´Â °ÍÀÌ ¾ø¾îÁý´Ï´Ù. Subversion ÀúÀå¼Ò(repository)¸¦ ¼³Á¤ÇÒ °æ¿ì¿¡ »ý°¢ÇØ µÎ¸é ÁÁÀº ÀÏÀÌ ¸î°³Àΰ¡ ÀÖ½À´Ï´Ù. ´ç½ÅÀÌ ÀúÀå¼Ò(repository) °ü¸®ÀÚ·Î ÇÏ°í ÀÖ°í ±¸µÎÀΰ¡ÀÇ ÇÁ·ÎÁ§Æ®ÀÇ ¹öÀü °ü¸® ½Ã½ºÅÛÀÇ ¼­Æ÷Æ® Ã¥ÀÓÀÚ°¡ µÇ¾ú´Ù°í ÇսôÙ. ÃÖÃÊÀÇ ÆÇ´ÜÀº º¹¼ö ÇÁ·ÎÁ§Æ®¿¡ ´ëÇؼ­ ÇϳªÀÇ ÀúÀå¼Ò(repository)¸¦ »ç¿ëÇÏ´ÂÁö ÇÁ·ÎÁ§Æ® ¸¶´Ù ÀúÀå¼Ò(repository)¸¦ ÁغñÇÏ´ÂÁö ±× ¾çÀÚÀÇ ÀýÃæ¾ÈÀ¸·Î °¥±îÀÔ´Ï´Ù. º¹¼ö ÇÁ·ÎÁ§Æ®¸¦ À§Çؼ­(¶§¹®¿¡) ÇϳªÀÇ ÀúÀå¼Ò(repository)¸¦ »ç¿ëÇÏ´Â °Í¿¡´Â ¸î°³Àΰ¡ ÀÌÁ¡ÀÌ ¿©½Â ´Ù¶÷Áã. 1¹ø ¶Ñ·ÇÇÑ °ÍÀº Áߺ¹ ÇÑ ¸ÞÀÎÆ®³Í½º ÀÛ¾÷ÀÌ ºÒÇÊ¿äÇÏ´Ù¸é ¸»ÇÏ´Â °ÍÀÔ´Ï´Ù. ÇϳªÀÇ ÀúÀå¼Ò(repository)´Â 1Á¶ÀÇ Ç«½º Ŭ¸³Æ® ÇϳªÀÇ Á¤±â ¹é¾÷ SubversionÀÇ ¸±¸®½º°¡ ¾ç¸³ ºÒ°¡´ÉÇÑ »õ·Î¿î ¹öÀü¿¡ µÇ¾úÀ» ¶§ÀÇ 1ȸÀÇ ´ýÇÁ¿Í ·Îµå ¹Û¿¡ ÇÊ¿ä ¾ø½À´Ï´Ù. ¶Ç ÇÁ·ÎÁ§Æ®°£ÀÇ µ¥ÀÌÅÍ À̵¿Àº °£´ÜÇÏ°í È÷½ºÅ丮 ¹öÀü Á¤º¸¸¦ ÀÒ´Â °Í ¾øÀÌ ÁÙ ¼ö°¡ ÀÖ½À´Ï´Ù. ÇϳªÀÇ ÀúÀå¼Ò(repository)¸¦ »ç¿ëÇÏ´Â µð¸Þ¸®Æ®´Â ´Ù¸¥ ÇÁ·ÎÁ§Æ®´Â ´Ù¸£´Ù Ä¿¹Ô ¸ÞÀϸµ¸®½ºÆ®¸¦ °¡Áö°í Àְųª ´Ù¸¥ ÀÎÁõ Çã°¡µîÀÌ ÇÊ¿äÇÑ°¡µµ ¸ð¸£´Â °ÍÀÔ´Ï´Ù. ¶Ç SubversionÀº ÀúÀå¼Ò(repository) ±Û·Î¹úÀÎ ¸®ºñÀü ¹øÈ£¸¦ »ç¿ëÇÏ°í ÀÖ´Ù ÀÏ·Î ÁÖÀÇÇØ ÁÖ¼¼¿ä. »ç¶÷¿¡ µû¶ó¼­´Â º¯°æÀÌ ÀÚ½ÅÀÇ ÇÁ·ÎÁ§Æ®¿¡ ¾Æ¹«°Íµµ ¾ø´Âµ¥ ´Ù¸¥ ÇÁ·ÎÁ§Æ®°¡ È°¹ßÇÏ°Ô »õ·Î¿î ¸®ºñÀüÀ» Ãß°¡ÇÑ´Ù °Í¿¡ ÀÇÇØ ÃֽŠ¸®ºñÀü ¹øÈ£°¡ Ä«¿îÆ®¾÷µÇ¾î °¡´Â °ÍÀÌ ÁÁ¾ÆÇÏÁö ¾ÊÀ»Áöµµ ¸ð¸¨´Ï´Ù. ÀýÃæÃ¥À» ÃëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î ¼­·Î ¾î´À Á¤µµ ±í°Ô °ü°èÇÏ°í ÀÖÀ»±î¿¡ ÀÇÇØ ÇÁ·ÎÁ§Æ®¸¦ ±×·ìÈ­ ÇÑ´Ù ÀÏÀÌ »ý±é´Ï´Ù. °¢°¢ÀÇ ÀúÀå¼Ò(repository)¿¡ ¸î°³ÀÇ ÇÁ·ÎÁ§Æ®¸¦ °®°ÔÇÑ´Ù ÀÏ·Î ÀûÀº ¼öÀÇ ÀúÀå¼Ò(repository)¸¦ °ü¸®ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ ¹æ¹ý¿¡¼­´Â µ¥ÀÌÅ͸¦ °øÀ¯ÇÏ°í ½ÍÀº ÇÁ·ÎÁ§Æ®´Â °£´ÜÇÏ°Ô ±×·¸°Ô ÇÒ ¼ö°¡ ÀÖ°í »õ·Î¿î ¸®ºñÀüÀÌ ÀúÀå¼Ò(repository)¿¡ Ãß°¡µÇ¸é °³¹ßÀÚ´Â ±×·¯ÇÑ »õ·Î¿î ¸®ºñÀüÀº ÀÚ½ÅÀÇ ÇÁ·ÎÁ§Æ®Àΰ¡ Àû¾îµµ °Å±â¿¡ °ü°èÇÏ°í ÀÖ´Â ÇÁ·ÎÁ§Æ®ÀÇ ´©±º°¡°¡ ÇÑ °ÍÀ̶ó°í ÇÏ´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ÀúÀå¼Ò(repository)¿¡ °ü°èÇØ ¾î¶»°Ô ÇÁ·ÎÁ§Æ®¸¦ Æí¼ºÇұ °áÁ¤ÇÑ µÚ´Â ¾Æ¸¶ ÀúÀå¼Ò(repository) ÀÚ½ÅÀÇ µð·ºÅ丮 ±¸¼ºÀ» »ý°¢ÇÏ°í ½Í´Ù°í »ý°¢ÇÏ°ÚÁö¿ä. SubversionÀº º¸Åë µð·ºÅ丮 Ä«ÇǸ¦ ºê·£Ä¡(branch)È­¿¡µµ ÅÂ±× Áö¾î¿¡µµ »ç¿ëÇϹǷÎ(ÂüÁ¶) SubversionÀÇ Ä¿¹Â´ÏƼ ±×·³ µÎ °³°¡ ´Ù¸¥ ¾îÇÁ·ÎÄ¡ÀÇ ¾î´À ÂÊÀÎÁö¸¦ »ç¿ëÇÏ´Â °ÍÀ» ÁøÇà½ÃÅ°°í ÀÖ½À´Ï´Ù. ¾î´À ÂÊÀÇ ¹æ¹ýµµtrunk¶ó´Â À̸§ÀÇ µð·ºÅ丮¸¦ »ç¿ëÇÕ´Ï´Ù¸¸ ÀÌ°ÍÀº ¸ÞÀÎÀÇ ÇÁ·ÎÁ§Æ® °³¹ßÀ» ÇÏ°í ÀÖ´Â Àå¼Ò¿¡¼­ branches´Â ¸ÞÀÎ ÇÁ·ÎÁ§Æ®·ÎºÎÅÍ ¸¸µé¾ú´Ù ´Ù¾çÇÑ À̸§ÀÌ ºÙÀº ºê·£Ä¡(branch)¸¦ µÎ´Â µð·ºÅ丮ÀÔ´Ï´Ù. ÃÖÃÊÀÇ ¹æ¹ýÀº ·çÆ® ÆÄÀÏ ½Ã½ºÅ۾Ʒ¡¿¡ ÇÁ·ÎÁ§Æ®¸¶´ÙÀÇ ¼­ºê µð·ºÅ丮¸¦ ÀϾ °¢°¢ÀÇ ¼­ºê µð·ºÅ丮ÀÇ Á÷ÇÏ¿¡ trunk ¿Íbranches ÀÇ µð·ºÅ丮¸¦ µÓ´Ï´Ù. Figure 5-1 ¸¦ ºÁ ÁÖ¼¼¿ä.
ÃßõÇÏ´Â ¹æ¹ý, ±× 1
µÎ¹ø°ÀÇ ¹æ¹ýÀº ÀÌ ¹Ý´ëÀÔ´Ï´Ù—ÃÖ»óÁ¤µµ ÆÄÀÏ ½Ã½ºÅÛÀÇ Á÷ÇÏ¿¡ ¿ì¼±trunk ¿Íbranches¸¦ µÎ¾î ±× ¾Æ·¡¿¡ ¸ðµç ÇÁ·ÎÁ§Æ® µÓ´Ï´Ù. Figure 5-2 ¸¦ ºÁ ÁÖ¼¼¿ä.
ÃßõÇÏ´Â ¹æ¹ý ±× 2
ÁÁ´Ù°í »ý°¢µÇ´Â ¹æ¹ýÀ¸·Î ÀúÀå¼Ò(repository)¸¦ ·¹À̾ƿô ÇØ ÁÖ¼¼¿ä. SubversionÀº ·¹À̾ƿôÀÇ ±¸¼º¿¡ ´ëÇØ ¾Æ¹«°Íµµ °¡Á¤ÇÏÁö ¾Ê½À´Ï´Ù — SubversionÀº µð·ºÅ丮¿¡¼­ ¸¸³ª¸ç µð·ºÅ丮 ÀÌ¿ÜÀÇ ´©±¸¶óµµ ¾ø½À´Ï´Ù. °á±¹ ÀúÀå¼Ò(repository)ÀÇ ·¹À̾ƿôÀº ÇÊ¿ä¿¡ µû¶ó¼­ ÇÁ·ÎÁ§Æ®¿¡ ¾î¿ï¸®´Â ¹æ¹ýÀ» ¼±ÅÃÇØ ÁÖ¼¼¿ä.
·¹À̾ƿôÀÇ ÀÛ¼º°ú Ãʱ⠵¥ÀÌÅÍÀÇ ÀÓÆ÷Æ® ÀúÀå¼Ò(repository)Áß¿¡¼­ÀÇ ÇÁ·ÎÁ§Æ®ÀÇ ·¹À̾ƿôÀÌ Á¤ÇØÁö¸é ±× ·¹À̾ƿôÀÇ ÇüÅ¿¡ ÀúÀå¼Ò(repository)¸¦ ±¸¼ºÇØ ÇÁ·ÎÁ§Æ®ÀÇ Ãʱ⠵¥ÀÌÅ͸¦ ·ÎµåÇÏ°í ½Í´Ù°í »ý°¢ÇÏ°ÚÁö¿ä. ÀÌ°Í¿¡´Â ¿©·¯°¡Áö ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù. Çϳª Çϳª ÀúÀå¼Ò(repository) ·¹À̾ƿô¿¡ µû¶ó µð·ºÅ丮¸¦ ¸¸µå´Âµ¥ svn mkdir Ä¿¸àµå¸¦ »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù ( ÂüÁ¶). Á» ´õ ¹ÎøÇÑ °ÍÀº svn import Ä¿¸àµå¸¦ »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù. (ÂüÁ¶) ÃÖÃÊ·Î µð½ºÅ©ÀÇ ÀϽÃÀûÀÎ Àå¼Ò¿¡ ·¹À̾ƿôÀ» ¸¸µé¾î µÎ¾î ±× Àüü¸¦ 1ȸÀÇ Ä¿¹ÔÀ¸·Î ÀúÀå¼Ò(repository)¿¡ ÀÓÆ÷Æ® ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù: $ mkdir tmpdir $ cd tmpdir $ mkdir projectA $ mkdir projectA/trunk $ mkdir projectA/branches $ mkdir projectB $ mkdir projectB/trunk $ mkdir projectB/branches … $ svn import projectA file:///path/to/repos --message 'Initial repository layout' Adding projectA Adding projectA/trunk Adding projectA/branches Adding projectB Adding projectB/trunk Adding projectB/branches Committed revision 1. $ cd .. $ rm -rf tmpdir $ »À´ë°¡ µÇ´Â ·¹À̾ƿôÀÌ »ý°Ü ¸¸¾à ¹ú½á ÀÓÆ÷Æ® ÇÏ°í ½Í´Ù µ¥ÀÌÅÍ°¡ Á¸ÀçÇÏ°í ÀÖ´Ù¸é ±×°ÍÀ» ÀúÀå¼Ò(repository)¿¡ ÀÓÆ÷Æ® ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ÀÌ°Í¿¡µµ ¿ª½Ã ¿©·¯°¡Áö ¹æ¹ýÀ» ÃëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. svn import¸¦ »ç¿ëÇÒÁöµµ ¸ð¸¨´Ï´Ù. »õ·Î¿î ÀúÀå¼Ò(repository)·ÎºÎÅÍ ÀÛ¾÷ Ä«ÇǸ¦ ÀÏ´Ü Ã¼Å©¾Æ¿ô ÇØ ÀÛ¾÷ Ä«ÇÇÁß¿¡¼­ µ¥ÀÌÅ͸¦ À̵¿Çϰųª Æí¼º ´Ù½Ã ÇÏ°í ³ª¼­ svn add ¿Ísvn commit Ä¿¸àµå¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ±×·¯³ª ÀÏ´Ü ±×·¯ÇÑ À̾߱⸦ ½ÃÀÛÇϸé ÀÌÁ¦ ¹ú½á ÀúÀå¼Ò(repository) °ü¸®¿¡ ´ëÇؼ­´Â ³íÀÇÇÏÁö ¾Ê½À´Ï´Ù. ¸¸¾à ¾ÆÁ÷svn Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥¿¡ Ä£¼÷ÇÔÀÌ ¾ø´Ù¸é (À»)¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä.
Åë°è ¿©±â±îÁö·Î ´ç½ÅÀº ¾î¶»°Ô Subversion ÀúÀå¼Ò(repository)¸¦ ÀÛ¼ºÇØ ¼³Á¤ÇÒ±î ¿¡ ´ëÇÑ ±âº»ÀûÀÎ ÀÌÇظ¦ ÇÒ ¼ö ÀÖ¾úÀ» °ÍÀÔ´Ï´Ù. ÀÌ ÀÛ¾÷À» µ½´Â ´Ù¾çÇÑ Åø (À»)¸¦ ¼Ò°³Çß½À´Ï´Ù. ³×Æ®¿öÅ© ³Ñ¾î·Î ÀúÀå¼Ò(repository)¿¡ ¾×¼¼½º °¡´É°úÇϱâ À§ÇÑ ±âº»ÀûÀÎ Apache ÀÇ ¼³Á¤ ¼ø¼­¿¡ ´ëÇØ ´Ù·ç¾ú½À´Ï´Ù. ±×¸®°í ÀåÀüü¸¦ ÅëÇؼ­ °ü¸®ÀÚ°¡ Àß ºüÁú °Í °°Àº ÀÏÀ» ÁÖ¾î ¾î¶»°Ô ±×°ÍÀ» ÇÇÇÏ´ÂÁö¸¦ ³íÀÇ Çß½À´Ï´Ù. ±×¸®°í´Â ÀúÀå¼Ò(repository)¿¡ ¾î¶°ÇÑ µ¥ÀÌÅ͸¦ ³ÖÀ»±î¿¡ ÀÓÇؼ­ »ý°¢ÇÒ »ÓÀÔ´Ï´Ù.