· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Subversion Book/Repository Administration

ÀúÀå¼Ò °ü¸®

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 À¯Æ¿¸®Æ¼¿¡ ÀúÀå¼Ò¸¦ ¸¸µå´Â ¼­ºê Ä¿¸Çµå°¡ ÀÖ½À´Ï´Ù. »õ ÀúÀå¼Ò¸¦ ¸¸µå·Á¸é ´ÜÁö ´ÙÀ½°ú °°Àº ¸í·É¸¸ ¾²¸é µË´Ï´Ù.

$ 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ÀÇ µµ±¸ ÇÑ ¹ú µûÀ§ÀÇ) ¼­µåÆÄƼ µµ±¸¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¡µµ ¸î¸î ¿¹¿Ü°¡ ÀÖÀ¸¸ç Â÷Â÷ ¼³¸íÇÏ°Ú½À´Ï´Ù.


1.2.1. ÈÅ ½ºÅ©¸³Æ®(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 ÀúÀå¼Òµµ Æ÷ÇÔÇÏ¿©)¿¡ °°Àº »ç¿ëÀÚ·Î Á¢±ÙÇÑ´Ù´Â ¶æÀÔ´Ï´Ù. ÈÅÀÌ ÁöÁ¤µÈ ÀÛ¾÷À» ¼öÇàÇϴµ¥ ±ÇÇÑ ¼³Á¤¿¡ °ü·ÃµÈ ¹®Á¦°¡ ÀϾ °¡´É¼ºÀÌ ÀÖÀ¸¹Ç·Î ÁÖÀÇÇϽñ⠹ٶø´Ï´Ù.


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. 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ÀÇ ÇÏÀ§ ¸í·É¾î ´ëºÎºÐÀº ¸®ºñÀüÀ̳ª Æ®·£Àè¼Ç Æ®¸®¸¦ ´Ù·ç¸ç, Æ®¸® ÀÚü¿¡ ´ëÇÑ Á¤º¸¸¦ º¸¿©Áְųª ÀúÀå¼ÒÀÇ ¿¹Àü ¸®ºñÀüµé°ú ¾î¶»°Ô ´Ù¸¥Áö º¸¿©ÁÝ´Ï´Ù. ¸®ºñÀüÀ̳ª Æ®·£Àè¼ÇÀ» ÁöÁ¤Çϱâ À§Çؼ­ --revision°ú --transaction ¿É¼ÇÀ» »ç¿ëÇϽʽÿÀ. ¸®ºñÀü ¹øÈ£´Â ÀÚ¿¬¼ö·Î Ç¥½ÃÇÏÁö¸¸ Æ®·£Àè¼Ç À̸§Àº ¾ËÆĺª°ú ¼ýÀÚ·Î ±¸¼ºµÈ ¹®ÀÚ¿­·Î Ç¥½ÃÇÑ´Ù´Â °ÍÀ» ÁÖÀÇÇϼ¼¿ä. ÆÄÀϽýºÅÛÀº Ä¿¹ÔµÇÁö ¾ÊÀº Æ®·£Àè¼Ç(¾ÆÁ÷ »õ ¸®ºñÀüÀ¸·Î ¹Ù²îÁö ¾ÊÀº Æ®·£Àè¼Ç)¸¸À» Ç¥½ÃÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ±â¾ïÇϼ¼¿ä. ¾Æ¸¶ ´ëºÎºÐÀÇ ÀúÀå¼Ò¿¡´Â ±×·± Æ®·£Àè¼ÇÀÌ ¾øÀ» °ÍÀÔ´Ï´Ù. º¸Åë Æ®·£Àè¼ÇÀº Ä¿¹ÔµÇ°Å³ª Ä¿¹ÔÀÌ ÁßÁöµÈ ÈÄ Áö¿öÁö±â ¶§¹®ÀÔ´Ï´Ù.

--revisionÀ̳ª --transaction ¿É¼ÇÀ» µÑ ´Ù ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é 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 ÇÏÀ§ ¸í·É¾îÀÇ Ãâ·ÂÀº ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾî ÀÖ½À´Ï´Ù.

  1. ÀÛ¾÷ÀÚ, ÁٹٲÞ

  2. ³¯Â¥, ÁٹٲÞ

  3. ·Î±× ¸Þ¼¼ÁöÀÇ ±æÀÌ, ÁٹٲÞ

  4. ·Î±× ¸Þ¼¼Áö, ÁٹٲÞ

ÀÌ Ãâ·ÂÀº Àΰ£ÀÌ ÀÐÀ» ¼ö°¡ ÀÖ½À´Ï´Ù. ÀÏÀÚÀÇ Å¸ÀÓ ½ºÅÆÇÁ µîÀº ¹«¾ùÀΰ¡ ¹ÙÀ̳ʸ® Ç¥Çö°ú °°Àº °ÍÀÌ ¾Æ´Ï°í ÅؽºÆ® Çü½ÄÀÌ µÇ¾î ÀÖ½À´Ï´Ù. ±×·¯³ª ÀÌ°ÍÀº ¶Ç ¸Ó½Åµµ Çؼ®ÇÒ ¼ö ÀÖ´Â Çü½ÄÀÇ °ÍÀÔ´Ï´Ù ·Î±× ¸Þ¼¼Áö´Â º¹¼öÇà¿¡ °ÉÄ¥ ¼ö°¡ ÀÖ¾î ±æÀÌÀÇ Á¦ÇÑÀÌ ¾ø±â ¶§¹®¿¡ 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

ÃֽŠ¸®ºñÀü ¹øÈ£¸¦ Ç¥½ÃÇÕ´Ï´Ù.


1.3.1.2. 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

ÀúÀå¼ÒÀÇ ³»¿ëÀ» °ËÁõÇÕ´Ï´Ù. °ËÁõ ÀýÂ÷¿¡´Â ÀúÀå¼Ò¿¡ ÀÖ´Â ¹öÀüÈ­µÈ µ¥ÀÌÅÍÀÇ Ã¼Å©¼¶ ºñ±³µµ Æ÷ÇԵ˴ϴÙ.


1.3.1.3. 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¸í·ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

Example 1-1. 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ÀÇ --transaction ¿É¼Ç¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â Æ®·£Àè¼ÇµéÀÇ ¸ñ·ÏÀ̱⵵ ÇÕ´Ï´Ù.

½©ÀÇ ÀÌ¿ëÀ» Á¾·áÇÏ·Á¸é 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)¸¦ Á¦°øÇÏ°í ÀÖ½À´Ï´Ù.

$ 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ÀÇ Â÷À̸¦ ÀǽÄÇÏÁö ¾Ê°í µ¥ÀÌŸº£À̽º ¸Ó½Å°£¿¡ Àü¼Û Çϴµ¥ Æí¸®ÇÑ ¹æ¹ýÀÔ´Ï´Ù.


1.3.2. ÀúÀå¼Ò û¼Ò

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 ÀÇ »ç¿ë¹ýÀº Á¾·áÇÏ°í ÀÖÁö ¾Ê´Ù ¾Æ¸¶ Á×¾î ¹ö¸°Subversion Æ®·£Àè¼Ç(transaction)¿¡ °üÇÑ ÀúÀå¼Ò(repository)¿¡ÀÇ ¹®ÀÇÀÔ´Ï´Ù. Ä¿¹ÔÀÌ ½ÇÆÐÇßÀ» ¶§ º¸Åë Æ®·£Àè¼Ç(transaction)´Â ¿¹»Ú°Ô ¼Ò°ÅµË´Ï´Ù. Áï Æ®·£Àè¼Ç(transaction) (Àº)´Â ÀúÀå¼Ò(repository)·ÎºÎÅÍ »èÁ¦µÇ¾î ±× Æ®·£Àè¼Ç(transaction)¿¡(ÀÎ ¸¸Å­) °ü·ÃÇß´Ù µ¥ÀÌÅ͵µ ÀÌ¿Í °°ÀÌ »èÁ¦µË´Ï´Ù. ±×·¯³ª, ÀÚÁÖ Æ®·£Àè¼Ç(transaction)ÀÇ Ã»¼Ò°¡ ÀϾÁö ¾Ê°í ½ÇÆÐÇÏ´Â °ÍÀÌ ÀÖ½À´Ï´Ù. ÀÌ°Í¿¡´Â ¸î°³ÀÇ ÀÌÀ¯°¡ »ý°¢µË´Ï´Ù: ¾Æ¸¶ Ŭ¶óÀ̾ðÆ®ÀÇ Á¶ÀÛÀÌ À¯Àú¿¡ ÀÇÇØ ³­ÆøÇÏ°Ô Á¾·áµÇ¾ú´ÂÁö ³×Æ®¿öÅ©ÀÇ ÀÌ»óµîÀÌ Ã³¸®ÀÇ µµÁß¿¡ ÀϾÀ» °æ¿ìÀÔ´Ï´Ù. ÀÌÀ¯¿¡ °ü°è¾øÀÌ ÀÌ·¯ÇÑ Á×¾ú´Ù Æ®·£Àè¼Ç(transaction)´Â ÀúÀå¼Ò(repository)¸¦ ¾îÁú·¯ µð½ºÅ©¸¦ ¸ÔÀ» »ÓÀÔ´Ï´Ù.

svnadminÀÇlstxns Ä¿¸àµå (À»)¸¦ »ç¿ëÇØ ±× ½ÃÁ¡¿¡¼­ÀÇ ¹Ì¿Ï·áÀÇ Æ®·£Àè¼Ç(transaction)ÀÇ À̸§ÀÇ À϶÷Ç¥½Ã ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.

$ svnadmin lstxns myrepos
19
3a1
a45
$

Ãâ·Â °á°úÀÇ °¢°¢ÀÇ Ç׸ñÀºsvnlook (¿Í ±×--transaction ¿É¼Ç)(À¸)·Î »ç¿ëÇÒ ¼ö°¡ ÀÖ¾î ´©°¡ Æ®·£Àè¼Ç(transaction)¸¦ ¸¸µé¾î ±×°ÍÀº ¾ðÁ¦·Î ¾î¶°ÇÑ º¯°æÀÌ Æ®·£Àè¼Ç(transaction)¿¡ ÀϾ´ÂÁö ¸¦ ¾Ë ¼ö°¡ ÀÖ½À´Ï´Ù. ¹Ù²Ù¾î ¸»Çϸé(ÀÚ) ±× Æ®·£Àè¼Ç(transaction)´Â »èÁ¦ ´ë»óÀ¸·Î ÇØ ¾ÈÀüÇÑ Èĺ¸Àΰ¡ ºÎµð¶ó°í ÇÏ´Â °ÍÀ»ÀÔ´Ï´Ù. ¸¸¾à ±×·¯¸é Æ®·£Àè¼Ç(transaction)ÀÇ À̸§À»svnadmin rmtxns ¿¡ °Ç³×ÁÙ ¼ö°¡ ÀÖ¾î ±× Æ®·£Àè¼Ç(transaction)´Â ¿¹»Ú°Ô »èÁ¦ µË´Ï´Ù. rmtxns ÇÏÀ§ ¸í·É¾î´Â lstxnsÀÇ Ãâ·ÂÀ» ±×´ë·Î ÀÔ·ÂÀ¸·Î¼­ ÃëÇÒ ¼öµµ ÀÖ½À´Ï´Ù!

$ svnadmin rmtxns myrepos `svnadmin lstxns myrepos`
$

ÀÌ·¯ÇÑ µÎ ÇÏÀ§ ¸í·É¾î¸¦ »ç¿ëÇÏ´Â °æ¿ì ÀúÀå¼Ò(repository)¸¦ ÀϽÃÀûÀ¸·Î Ŭ¶óÀ̾ðÆ®·ÎºÎÅÍ ¾×¼¼½º ÇÒ ¼ö ¾ø°Ô ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ÀÌ°ÍÀ¸·Î ¾Æ¹«µµ ´ç½ÅÀÌ Å¬¸° ¾÷À» ½ÃÀÛÇϱâ Àü¿¡ ¿Ã¹Ù¸¥ Æ®·£Àè¼Ç(transaction) (À»)¸¦ °³½ÃÇÒ ¼ö ¾ø°Ô µË´Ï´Ù. ÀÌÇÏ´Â ÀúÀå¼Ò(repository)³»ÀÇ ¹ÌÇØ°áÀÇ Æ®·£Àè¼Ç(transaction) ÀÇ °¢°¢ ºÙÀº Á¤º¸¸¦ Àçºü¸£°Ô »ý¼ºÇϱâ À§ÇÑ ¾à°£ÀÇ ½ºÅ©¸³Æ®ÀÔ´Ï´Ù:

Example 1-2. 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) »óŸ¦ È®ÀÎÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.


1.3.3. ÀúÀå¼Ò(repository)ÀÇ º¹±¸

ÀúÀå¼Ò(repository)ÀÇ µ¥ÀÌÅ͸¦ ÁöÅ°±â À§Çؼ­ µ¥ÀÌŸº£À̽º ¿¬±¸ ÃÖÁ¾ ´Ü°è´Â ¶ôÀÇ ±¸Á¶¸¦ ÀÌ¿ëÇÕ´Ï´Ù. ÀÌ ±¸Á¶´Â µ¥ÀÌŸº£À̽º°¡ ÀÖ´Ù ºÎºÐÀº º¹¼öÀÇ µ¥ÀÌŸº£À̽º¿¡ ¾×¼¼½º ÇÏ°í ÀÖ´Â »ç¶÷À¸·ÎºÎÅÍ µ¿½Ã¿¡ º¯°æµÇ´Â °ÍÀÌ ¾ø´Â °ÍÀ» ÇÁ·ÎÅؼÇÇØ °¢°¢ÀÇ ÇÁ·Î¼¼½º´Â µ¥ÀÌŸº£À̽º (À¸)·ÎºÎÅÍ ÀÐÈù µ¥ÀÌÅÍ°¡ Ç×»ó ¿Ã¹Ù¸¥ »óÅ¿¡ ÀÖ´Â °Íó·³ º¸ÀÌ´Â °ÍÀ» ÇÁ·ÎÅؼÇÇÕ´Ï´Ù. ÇÁ·Î¼¼½º°¡ µ¥ÀÌŸº£À̽ºÁßÀÇ ¹«¾ùÀΰ¡¸¦ º¯°æÇÒ ÇÊ¿ä°¡ ÀÖ´Ù °æ¿ì ±×°ÍÀº ¿ì¼± ¸ñÀûÀÇ µ¥ÀÌÅÍ°¡ ¶ôµÇ¾î ÀÖÁö ¾ÊÀºÁö ¾î¶²Áö¸¦ È®ÀÎ ÇÕ´Ï´Ù. ¸¸¾à µ¥ÀÌÅÍ°¡ ¶ôµÇ¾î ÀÖÁö ¾ÊÀ¸¸é ±× ÇÁ·Î¼¼½º´Â µ¥ÀÌÅ͸¦ Àá±×¾î ÇÊ¿äÇÑ º¯°æÀ» ´õÇØ ¸¶Áö¸·¿¡ ¶ôÀ» ¶Á´Ï´Ù. ´Ù¸¥ ÇÁ·Î¼¼½º´Â µ¥ÀÌŸº£À̽ºÀÇ ±× ºÎºÐ¿¡ ¾×¼¼½º ÇÏ´Â Çã°¡¸¦ ¾ò´Â´Ù Àü¿¡ ¶ôÀÇ ÇØÁ¦¸¦ ±â´Ù¸®´Â °ÍÀ» °­¿ä´çÇÕ´Ï´Ù.

Subversion ÀúÀå¼Ò(repository)¸¦ »ç¿ëÇϴµ¥ À־ Ä¡¸íÀûÀÎ ¿¡·¯(µð½ºÅ©°¡ °¡µæ µÇ°Å³ª ¸Þ¸ð¸®°¡ ¾ø¾îÁö°Å³ª)³ª ¼¼Ä¡±â¿¡ ÀÇÇØ µ¥ÀÌŸº£À̽º¿¡ °ÉÄ£ ¶ôÀ» »èÁ¦ÇÒ ±âȸ¸¦ ¾ø¾Ö ¹ö¸®´Â ÀÏÀÌ ÀÖ½À´Ï´Ù. ±× °á°ú ¿¬±¸ ÃÖÁ¾ ´Ü°èÀÇ µ¥ÀÌŸº£À̽º´Â"±»¾îÁ®"¹ö¸³´Ï´Ù. ÀÌ·¸°Ô µÇ¾úÀ» ¶§¿¡´Â ÀúÀå¼Ò(repository)¿¡ÀÇ ¾î¶°ÇÑ ¾×¼¼½ºµµ ¿µ±¸È÷ ±â´Ù¸®°Ô µÈ´Ù °ÍÀ¸·Î µÇ¾î ¹ö¸³´Ï´Ù. (¶ó°í ÇÏ´Â °ÍÀº ¸ðµç »õ·Î¿î ¾×¼¼½º´Â ¶ô ÇÏÁö¸¸ ÇØÁ¦µÇ´Â °ÍÀ» ±â´Ù¸³´Ï´Ù¸¸ ±×°ÍÀº °áÄÚ ¿ÀÁö ¾Ê±â ¶§¹®ÀÔ´Ï´Ù)

¿ì¼± ±×·± °ÍÀÌ ÀúÀå¼Ò(repository)¿¡ ÀϾµµ ºñ¸íÀ» Áö¸£Áö ¸¶ ÁÖ¼¼¿ä. SubversionÀÇ ÆÄÀÏ ½Ã½ºÅÛÀº µ¥ÀÌÅͺ£ÀÕ Æ®·»¼½¼Ç (¿Í)°ú üũ Æ÷ÀÎÆ® °Å±â¿¡ »çÀü Àú³Î ±âÀÔÀÇ ±¸Á¶¸¦ Àß ÀÌ¿ëÇÏ°í ÀÖ¾î Á¤¸»·Î ÆĸêÀûÀÎ »ç°Ç ÀÌ¿Ü´Â [2] µ¥ÀÌŸº£À̽º ȯ°æÀ» ¿µ±¸È÷ ¸ÅÀåÇØ ¶°³¯ ¼ö ¾ø´Â °ÍÀ» ÇÁ·ÎÅؼÇÇÕ´Ï´Ù. ÃæºÐÈ÷ ½Å°æÁúÀûÀÎ ÀúÀå¼Ò(repository) °ü¸®ÀÚ´Â ¹«½¼ÀÀµîÀ̳ª ¹æ¹ýÀ¸·Î ÀúÀå¼Ò(repository) µ¥ÀÌÅÍÀÇ ¿ÀÇÁ ¶óÀÎ ¹é¾÷À» ÃëÇÏ°í ÀÖÀ»Áöµµ ¸ð¸£Áö ¾Ê½À´Ï´Ù¸¸ ¹é¾÷ Å×ÀÌÇÁ¸¦ restore ÇØ ÁÖ°í¿Í ½Ã½ºÅÛ °ü¸® Ã¥ÀÓÀÚ¸¦ ºÎ¸£´Â °ÍÀº ¾ÆÁ÷ÀÔ´Ï´Ù.

´ÙÀ½¿¡ ÀÌÇÏÀÇ ¼ø¼­¸¦ »ç¿ëÇØ ÀúÀå¼Ò(repository)ÀÇ"º¹±¸" (À»)¸¦ ½ÃÇèÇØ º¸¼¼¿ä:

  1. ÀúÀå¼Ò(repository)¿¡ ¾×¼¼½º ÇÏ°í ÀÖ´Â(ȤÀº ÇÏ·Á°í ÇÏ°í ÀÖ´Ù) ÇÁ·Î¼¼½º°¡ Çϳªµµ ¾ø´Â °ÍÀ» È®ÀÎÇØ ÁÖ¼¼¿ä. ³×Æ®¿öÅ© ¾×¼¼½º °¡´ÉÇÑ ÀúÀå¼Ò(repository)¿¡¼­´Â ÀÌ°ÍÀº Apache HTTP ¼­¹ö¸¦ ½¸´Ù¿î ÇÑ´Ù Àϵµ ÀǹÌÇÕ´Ï´Ù.

  2. ÀúÀå¼Ò(repository)¸¦ ¼ÒÀ¯ÇØ °ü¸®ÇÏ°í ÀÖ´Â À¯Àú°¡ µÇ¾î ÁÖ¼¼¿ä.

  3. 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.
  4. Subversion ¼­¹öÀÇ Àç±âµ¿

ÀÌ ¹æ¹ýÀº ´ëºÎºÐÀÇ ÀúÀå¼Ò(repository) ¶ôÀ» ÇؼÒÇÕ´Ï´Ù. ÀÌ Ä¿¸àµå´Â ´ÜÁö root°¡ µÇ´Â °ÍÀÌ ¾Æ´Ï¶ó µ¥ÀÌŸº£À̽º (À»)¸¦ ¼ÒÀ¯ÇØ °ü¸®ÇÏ°í ÀÖ´Â À¯Àú·Î ½ÇÇàÇÏ´Â °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä. º¹±¸ ÀÛ¾÷Àº »óó¸¦ ÀÔÀº ¿©·¯°¡Áö µ¥ÀÌŸº£À̽º ÆÄÀÏ (À¸)·ÎºÎÅÍÀÇ ÀçÀÛ¼ºÀÇ ÀÛ¾÷µµ Æ÷ÇÔÇÕ´Ï´Ù. (¿¹¸¦ µé¾î °øÀ¯ ¸Þ¸ð¸® area µîÀÔ´Ï´Ù) root ¿¡¼­ÀÇ º¹±¸´Â root °¡ ¼ÒÀ¯ÇÏ°í ÀÖ´Â ÆÄÀÏÀ» ÀÛ¼ºÇÏ´Â °ÍÀ¸·Î ÀÌ°ÍÀº ÀúÀå¼Ò(repository)¿¡ÀÇ Á¢¼Ó »óȲÀÌ º¹±¸ÇÑ ´ÙÀ½¿¡µµ Åë»óÀÇ À¯Àú´Â ÀÌ°Í¿¡ ´ëÇؼ­ ¾×¼¼½º ÇÑ´Ù ÀÏÀ» ÇÒ ¼ö ¾ø´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù.

¸¸¾à Áö±Ý ¸»ÇÑ ÀÛ¾÷ÀÌ ¹«¾ùÀΰ¡ÀÇ ÀÌÀ¯·Î Àß ÀúÀå¼Ò(repository)¸¦ Á¤»óÀûÀ¸·Î µÇµ¹¸± ¼ö ¾ø´Â °æ¿ì µÑÀ» ÇØ¾ß ÇÕ´Ï´Ù. ¿ì¼± ¸Á°¡Áø ÀúÀå¼Ò(repository)¸¦ Ä¡¿ö ¸¶Áö¸· ¹é¾÷À» restore ÇÕ´Ï´Ù. ±×¸®°í Subversion ÀÇ °³¹ß ¸®½ºÆ®¿¡ email ÇÕ´Ï´Ù. (ÀÌ°ÍÀº ÀÔ´Ï´Ù) ÀÌ ¶§ ¹®Á¦Á¡À» ÀÚ¼¼ÇÏ°Ô ¼³¸íÇØ ÁÖ¼¼¿ä. µ¥ÀÌÅÍÀÇ ÀÏ°ü¼ºÀº Subversion °³¹ßÀÚ¿¡°Ô ÀÖ¾î ¸Å¿ì ³ôÀº priorityÀÔ´Ï´Ù.


1.3.4. ÀúÀå¼Ò(repository)ÀÇ ÀÌÇà

Subversion ÆÄÀÏ ½Ã½ºÅÛÀº ´Ù¾çÇÑ µ¥ÀÌŸº£À̽º Å×ÀÌºí¿¡ ºÐ»êµÇ¾ú´Ù µ¥ÀÌÅ͸¦ °¡Áý´Ï´Ù¸¸ ÀÌ°ÍÀº ÀϹÝÀûÀ¸·Î´Â Subversion °³¹ßÀÚ¸¸ÀÌ ¾Ë°í ÀÖ´Ù (¶ó°í Èï¹Ì°¡ ÀÖ´Ù) ÀÏÀÔ´Ï´Ù. ±×·¯³ª ¸ðµç ȤÀº ÀϺÎÀÇ µ¥ÀÌÅ͸¦ ÇϳªÀÇ ¿î¹Ý¿¡ Æí¸®ÇÑ ´Ü¼øÇÑ ÆÄÀÏ Çü½Ä¿¡ Á¤¸®ÇÏ°í ½ÍÀº °ÍÀÌ ÀÖ½À´Ï´Ù. Subversion ´Â ±×·¯ÇÑ ±¸Á¶¸¦svnadmin ÇÏÀ§ ¸í·É¾î ÀÇ Á¶¿¡ ÀÇÇØ ½ÇÀåÇÏ°í ÀÖ½À´Ï´Ù: dump ¿Í loadÀÔ´Ï´Ù.

Subversion ÀúÀå¼Ò(repository)¸¦ ´ýÇÁ Çϰųª ·ÎµåÇϰųª ÇÏ´Â Á¦ÀÏ ÀÚÁÖ ÀÖ´Â ÀÌÀ¯´Â Subversion ÀÚ½ÅÀÇ º¯°æ¿¡ ÀÖ½À´Ï´Ù. SubversionÀÌ ¿Ï¼º¿¡ °¡±î¿öÁö´Â °Í¿¡ µû¶ó ¾î¶² Á¾·ùÀÇ º¯°æÀÌ ¿¬±¸ ÃÖÁ¾ ´Ü°è µ¥ÀÌŸº£À̽ºÀÇ schema·Î º¯°æµÉ ¶§ ÀúÀå¼Ò(repository)ÀÇ ÀüÀÇ ¹öÀü°úÀÇ È£È¯¼ºÀÌ ¾ø¾îÁ® ¹ö¸³´Ï´Ù. ÀÌ·¯ÇÑ È£È¯¼ºÀÇ °æ°è¸¦ ³Ñ¾î ¾÷±×·¹À̵å ÇÒ °æ¿ì¿¡ ±ÇÇÏ´Â ¹æ¹ýÀº ºñ±³Àû ´Ü¼øÇÑ °ÍÀÔ´Ï´Ù:

  1. ÇöÇà ¹öÀüÀÇsvnadmin (À»)¸¦ »ç¿ëÇØ ÀúÀå¼Ò(repository)¸¦ ´ýÇÁ ÆÄÀÏ¿¡ ´ýÇÁ ÇØ ÁÖ¼¼¿ä.

  2. SubversionÀÇ »õ·Î¿î ¹öÀü¿¡ÀÇ ¾÷±×·¹À̵å.

  3. ³°Àº ÀúÀå¼Ò(repository)¸¦ Ä¡¿ö »õ·Î¿î ÇÏ´ÃÀÇ ÀúÀå¼Ò(repository)¸¦ °Å±â¿¡ ¸¸µì´Ï´Ù¸¸ ÀÌ°Í¿¡´Â»õ·Î¿î svnadmin (À»)¸¦ »ç¿ëÇØ ÁÖ¼¼¿ä.

  4. Çѹø ´õ»õ·Î¿îsvnadmin¸¦ »ç¿ëÇØ ´ýÇÁ ÆÄÀÏÀ» °¢°¢ ¸¸µçÁö ¾ó¸¶ ¾ÈµÈ ÀúÀå¼Ò(repository)¿¡ ·ÎµåÇØ ÁÖ¼¼¿ä.

  5. ¸¶Áö¸·¿¡ ³°Àº ÀúÀå¼Ò(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 ´Â ¸®ºñÀüÀÇ ¹üÀ§¸¦ Ãâ·ÂÇÕ´Ï´Ù. --revision ¿É¼ÇÀ» »ç¿ëÇϸé ÇϳªÀÇ ¸®ºñÀüÀÇ ´ýÇÁ³ª ¸®ºñÀü ¹üÀ§ÀÇ ´ýÇÁ°¡ »ý±é´Ï´Ù. ÀÌ ¿É¼ÇÀ» »ý·« ÇÏ¸é ¸ðµç Á¸ÀçÇÏ´Â ÀúÀå¼Ò(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)¸¦ ´ýÇÁ ÇÒ °æ¿ì¿¡--incremental ¿É¼ÇÀ» Ãß°¡Çϸé(ÀÚ) 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

--incremental ¿É¼ÇÀ» »ç¿ëÇÑ ´Ù¸¥ ±Ù»çÇÑ ¹æ¹ýÀº ¹ú½á Á¸ÀçÇÏ°í ÀÖ´Â ´ýÇÁ ÆÄÀÏ¿¡ »õ·Î¿î ´ýÇÁ ¸®ºñÀü ¹üÀ§¸¦ Ãß°¡ÇÏ´Â °ÍÀÔ´Ï´Ù. ¿¹¸¦ µé¾î post-commit ÈÅÀÌ ÀÖ¾î ±×°ÍÀº ´ÜÁö ÈÅÀ» Æ®¸®°ÅÇÏ´Â °Í °°Àº ÇϳªÀÇ ¸®ºñÀüÀÇ ÀúÀå¼Ò(repository) ´ýÇÁ¸¦ Ãß°¡ÇÏ´Â °ÍÀÔ´Ï´Ù. ȤÀº ÀÌÇÏ¿Í °°Àº ½ºÅ©¸³Æ® (ÀÌ)°¡ ÀÖ¾î ¸ÅÀÏ Àú³á ¸¶Áö¸·¿¡ ÀÌ ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÏ°í ³ª¼­ ¸®Æ÷ÁöÆ® ¸®¿¡ Ãß°¡µÈ ¸ðµç ¸®ºñÀüÀÇ ´ýÇÁ ÆÄÀÏ µ¥ÀÌÅ͸¦ Ãß°¡ÇÏ´Â °ÍÀÔ´Ï´Ù.

Example 1-3. ÀúÀå¼Ò(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) ´ýÇÁ ÆÄÀÏ Çü½ÄÀÇ ´Ù¸¥ ÀÌ¿ë ¹æ¹ý°ú Çؼ­´Â ´Ù¸¥ º¸Á¸ÀÇ ±¸Á¶³ª ¹öÀü ÄÜÆ®·Ñ ½Ã½ºÅÛÀ¸·ÎºÎÅÍÀÇ º¯È¯ÀÔ´Ï´Ù. ´ýÇÁ ÆÄÀÏ Çü½ÄÀº ´ëºÎºÐÀÌ Àΰ£ÀÌ ÀÐÀ» ¼ö ÀÖ´Â ÇüÅ°¡ µÇ¾î ÀÖÀ¸¹Ç·Î [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 ¿¡ Ãß°¡ÇØ ÁÖ¼¼¿ä:

(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 ÈÅÀÇ °è±â ¿¡Á¶Â÷ µÇÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù. [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 2.0 ÀÌÈĸ¦ ¼Õ¿¡ ³Ö¾î mod_dav¸¦ À¯È¿ÇÏ°Ô ÇØ ½ÇÇàÇÕ´Ï´Ù.

  • mod_dav_svn ¸¦ mod_dav Ç÷¯±× ÀÎÀ¸·Î¼­ ÀνºÅç ÇÕ´Ï´Ù. ÀÌ°ÍÀº SubversionÀÇ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®¸¦ »ç¿ëÇØ ÀúÀå¼Ò(repository)¿¡ ¾×¼¼½º ÇÕ´Ï´Ù. ±×¸®°í

  • httpd.confÆÄÀÏÀ» ÀúÀå¼Ò(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 ÀνºÆ®·°¼ÇÀº ´Ü¼øÇÑ ±¸¹®À» °®°í À̸§ÀÌ ºÙÀº ¸ðµâÀ» µð½ºÅ©ÁßÀÇ °øÀ¯ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®ÀÇ Àå¼Ò¿¡ ¿¬°á½Ãŵ´Ï´Ù:

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¸¦ Àç±âµ¿ÇÑ´Ù ÇÊ¿ä°¡ ¾ø±â ¶§¹®ÀÔ´Ï´Ù.


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)´Â ´©±¸·ÎºÎÅ͵µ ¾×¼¼½º ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ¹Ù²Ù¾î ¸»Çϸé

  • ´©±¸¶óµµ 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 ÀÇ ÀåÀ» ºÁ ÁÖ¼¼¿ä.


1.4.1.4. ¼­¹ö ¸íĪ°ú COPY ¿ä±¸

SubversionÀº ¼­¹ö»óÀÇ ÆÄÀÏÀ̳ª µð·ºÅ丮ÀÇ Ä«ÇǸ¦ ½ÇÇàÇÑ´Ù ¿ä±¸ ŸÀÔÀ¸·Î¼­COPY¸¦ »ç¿ëÇÕ´Ï´Ù. Apache ¸ðµâ ÀÇ Á¤ÇÕ¼º üũÀÇ ÀÏ°üÀ¸·Î¼­ Ä«ÇÇ¿ø·¡´Â Ä«ÇÇó¿Í °°Àº ¸Ó½Å»ó¿¡ ¾î´À ¿ä±¸µË´Ï´Ù. ÀÌ ¿ä±¸¸¦ ä¿ì±â À§Çؼ­(¶§¹®¿¡) mod_dav ¿¡ ¼­¹öÀÇ È£½ºÆ® ¸íĪÀ¸·Î¼­ ÀÌ¿ëÇÏ´Â À̸§À» °¡¸£Ä¥ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ÀÌ°Í¿¡´Â º¸Åë httpd.conf Áß(¾È)¿¡¼­ ServerName ÀνºÆ®·°¼ÇÀ» »ç¿ëÇØ ÁÝ´Ï´Ù.

ServerName svn.red-bean.com

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 ½ºÅ¸ÀÏ ½ÃÆ®¸¦ ÂüÁ¶Çϵµ·Ï(µíÀÌ) ¼³Á¤ÇÕ´Ï´Ù:

Location /svn
  DAV svn
  SVNParentPath /usr/local/svn
  SVNIndexXSLT "/svnindex.xsl"
  
/Location

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ÇÁ·Î¼¼½º ÇÏÁö¸¸ ¼­¹ö»ó¿¡¼­ ½ÇÇàµÇ¾î Á¢¼Ó ¿ä±¸¸¦ ±â´Ù¸³´Ï´Ù. svn Ŭ¶óÀ̾ðÆ®´Â °íÀ¯ÀÇ svn:// URL Çü½ÄÀ» ÀÌ¿ëÇØ Á¢¼ÓÇÕ´Ï´Ù. Ŭ¶óÀ̾ðÆ® Á¢¼ÓÀº ¹«Á¶°Ç ¹Þ¾Æµé¿©Á® ÀúÀå¼Ò(repository)´Â ÀÎÁõµÈ À¯Àú ¸íĪµîÀ» ÀÌ¿ëÇÏ´Â ÀÏ ¾øÀÌ ¾×¼¼½º µË´Ï´Ù. ÀÚÁÖ °ü¸®ÀÚ´Â ¸®µå¿Â¸®-¿¡ demon¸¦ ¼³Á¤ÇÏ´Â °ÍÀÌ ÀÖ½À´Ï´Ù.

ÀÎÁõ ºÙ¾î ÀÖ´Â(SSH) ¾×¼¼½º

ÀÌ ½Ã³ª¸®¿À¿¡¼­´Â svn Ŭ¶óÀ̾ðÆ®´Â °íÀ¯ÀÇ svn+ssh:// URL Çü½ÄÀ» »ç¿ëÇÏ´Â; ÀÌ°ÍÀº ·ÎÄÃÀÎ ½ÃÅ¥¾î Á¶°¡ºñ(SSH) ÇÁ·Î¼¼½º¸¦ ±âµ¿ÇØ ¼­¹ö¿¡ Á¢¼ÓÇÏ°í ³ª¼­ ÀÚ±â ÀÚ½ÅÀ» ÀÎÁõÇÕ´Ï´Ù. ÀÌ°Í¿¡´Â À¯Àú´Â ÇϵîÀÇ ÇüÅÂÀÇ ½Ã½ºÅÛ ¾îÄ«¿îÆÃÀ» ¼­¹ö À§¿¡ °¡Áö°í ÀÖÀ» ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ÀÎÁõ ¿Ï·á ÈÄ SSH ÇÁ·Î¼¼½º°¡ ÀϽÃÀûÀ¸·Î ³»ºÎÀû svnserveÇÁ·Î¼¼½º¸¦ ¼­¹ö»ó¿¡ ±âµ¿ÇØ ÀÎÁõµÇ¾ú´Ù À¯Àú·Î¼­ ½ÇÇàµË´Ï´Ù. ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ®´Â ¾ÏȣȭµÈ ssh ÅͳΠ(À»)¸¦ °³ÀÔ½ÃÄÑ Åë½ÅÇÕ´Ï´Ù.

ÀÌ µÎ °³ÀÇsvnserveÀÇ ÀÌ¿ë ¹æ¹ýÀº ¼­·Î ¹èŸÀûÀÎ ¹°°ÇÀº ¾Æ´Ñ °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä; ¾çÂÊ ¸ðµÎÀÇ ±¸Á¶¸¦ ¼­¹ö»ó¿¡¼­ µ¿½Ã¿¡ ÀÌ¿ëÇÏ´Â °Í ÇÏÁö¸¸ ÇÒ ¼ö ÀÖ½À´Ï´Ù.


1.4.2.1. À͸í TCP/IP¾×¼¼½ºÀÇ ¼³Á¤

¿É¼Ç¾øÀÌ ½ÇÇàÇϸé(ÀÚ)svnserve (Àº)´Â svn Ŭ¶óÀ̾ðÆ®¿Í ¼¼¼ÇÀ» È®¸³Çϱâ À§Çؼ­ µ¥ÀÌÅ͸¦ Ç¥ÁØ Ãâ·Â¿¡ ½á Ç¥ÁØ ÀÔ·ÂÀ¸·ÎºÎÅÍ ¹Þ½À´Ï´Ù:

$ svnserve
( success ( 1 1 ( ANONYMOUS ) ( ) ) ) 

ÀÌ°ÍÀº Á÷Á¢ ´©±º°¡ÀÇ µµ¿òÀÌ µÇ´Â °ÍÀº ¾Æ´Õ´Ï´Ù; svnserve ´Â ÀÌ ±¸Á¶¸¦ »ç¿ëÇØinetd demon·ÎºÎÅÍ ±âµ¿ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. ±×·¯³ª svnserve (À»)¸¦ demon·Î¼­ ±âµ¿Çϴµ¥´Â ¸î°³ÀÇ ´Ù¸¥ ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù.

Çϳª´«ÀÇ ¼±ÅûçÇ×Àºsvn¸¦ ¼­¹ö¸Ó½Å»óÀÇ inetdÀÇ ¼­ºñ½º·Î¼­ µî·ÏÇÏ´Â °ÍÀÔ´Ï´Ù. ±×·¸°Ô Çؼ­ µÎ¾î Ŭ¶óÀ̾ðÆ®°¡ Æ÷Åä 3690 ¿¡ Á¢¼ÓÇÏ·Á°í Çϸé [7] inetd ´Â"1ȸ ÇÑÁ¤ÀÇ" svnserve ÇÁ·Î¼¼½º¸¦ ±âµ¿ÇØ Å¬¶óÀ̾ðÆ® (À¸)·ÎºÎÅÍÀÇ ¿ä±¸¸¦ ó¸®ÇÕ´Ï´Ù.

ÀÌ Å¸ÀÔÀÇ ¼³Á¤À» ÇßÀ» °æ¿ì svnserve ÇÁ·Î¼¼½º¸¦root(Àΰ¡ ¹«Á¦ÇÑÀÇ ±ÇÇÑÀ» °¡Á³´Ù ´Ù¸¥ À¯Àú)·Î ½ÇÇàÇÏÁö ¾Ê´Â ÆíÀÌ ÁÁÀ»Áöµµ ¸ð¸¨´Ï´Ù. °ø°³ÇÏ°í ÀÖ´Â ÀúÀå¼Ò(repository)ÀÇ ¼ÒÀ¯ÀÚ¿Í Æ۹̼ǿ¡ ÀÇÇØ ´Ù¸¥¾Æ¸¶ »õ·ÎÀÌ ¸¸µçÀ¯ÀúÀÎ °ÍÀÌ º¸´Ù ¹Ù¶÷Á÷ÇÒ °ÍÀÔ´Ï´Ù. ¿¹¸¦ µé¾î svn (ÀÌ)¶ó´Â À̸§ÀÇ À¯Àú¸¦ »õ·Ó°Ô ¸¸µé¾î ±× À¯Àú¿¡°Ô Subversion ÀúÀå¼Ò(repository)¿¡ ´ëÇÑ ¹«Á¦ÇÑÀÇ ±Ç¸®¸¦ ÁÖ¾îsvnserve ÇÁ·Î¼¼½º¸¦ ±× À¯Àú·Î ½ÇÇàÇϵµ·Ï(µíÀÌ) ¼³Á¤ÇÕ´Ï´Ù.

¹°·Ð ÀÌ ÃÖÃÊÀÇ ¹æ¹ýÀºinetd(Àΰ¡ ±×·¯ÇÑ) demon¸¦ °¡Áø ¸Ó½ÅÀ¸·Î ¸¸ ÇÒ ¼ö ÀÖ´Â °ÍÀÔ´Ï´Ù. ÀÌ°ÍÀº ÀϹÝÀûÀ¸·Î Unix»ó¿¡¼­´Â ÇÑÁ¤µÈ ȯ°æÀÔ´Ï´Ù. ´Ù¸¥ ¹æ¹ýÀº svnserve ¸¦ ½ºÅĵå¾ó·ÐÀÇ demon·Î¼­ ½ÇÇàÇÏ´Â °ÍÀÔ´Ï´Ù. -d ¿É¼Ç µ¹ÃâÇÏ°í ±âµ¿Çϸé 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 ¿¡-r¿É¼ÇÀ» °Ç³×ÁÖ¾î ±× Æнº ÀÌÇÏÀÇ ÀúÀå¼Ò(repository)¸¸À» °ø°³Çϵµ·Ï(µíÀÌ) Á¦ÇÑÇÕ´Ï´Ù:

$ svnserve -d -r /usr/local

Notes

[1]

ÀÌ·¸°Ô ¸»ÇÏ¸é ¸Å¿ì °í»óÇÑ ÀÏó·³ »ý°¢µË´Ï´Ù¸¸ ÀÛ¾÷ Ä«ÇÇ ³Ê¸Ó¿¡ ÀÖ´Â ½ÅºñÀÇ ¿µ¿ª¿¡ Èï¹Ì¸¦ °¡Áö´Â ¸ðµç »ç¶÷À» ÀǹÌÇÏ´Â ¸»ÀÔ´Ï´Ù.

[2]

¿¹¸¦ µé¾î: ÇÏµå µð½ºÅ© + °­ÇÑ ÀüÀÚÀå = Æĸê

[3]

SubversionÀÇ ÀúÀå¼Ò(repository) ´ýÇÁ ÆÄÀÏ Çü½ÄÀº RFC-822 Çü½Ä¿¡ ÀÚÁÖ(Àß) ºñ½ÁÇØ ´ëºÎºÐÀÇ email ·Î ÀÌ¿ëµÇ°í ÀÖ´Â °Í°ú °°Àº Çü½ÄÀÔ´Ï´Ù.

[4]

¿¹¸¦ µé¾îsvnadmin setlog´Â ¾î·µç ÈÅ ÀÎÅÍÆäÀ̽º¸¦ ¿ìȸ ÇϹǷΠÇß´Ù.

[5]

¾Æ½Ã´Â ¹ÙÀÔ´Ï±î ±×³àÀÇ ¸ðµç"¿Í ¿ì¿¬"À» ³ªÅ¸³»´Â ÁýÇÕ¸í»çÀÔ´Ï´Ù.

[6]

±×·¸°Ô ÇÏ´Â °Í ±×µéÀº Á¤¸»·Î ½È¾îÇÏ°í ÀÖ½À´Ï´Ù.

[7]

ÀÌ ¹øÈ£´Â ÀÎÅÍ³Ý ÇÒ´ç ¹øÈ£ ±â°ü(IANA)¿¡ ÀÇÇØ È®º¸µÇ°í ÀÖ½À´Ï´Ù.


ID
Password
Join
Good fortune in love, as well as a better position.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2005-11-03 16:40:13
Processing time 0.0024 sec