· 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
Show your affection, which will probably meet with pleasant response.


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.0045 sec