[Áöµð³ÝÄÚ¸®¾Æ]¸®´ª½º °³¹ßÀڵ鿡°Ô Áß¿äÇÑ °Í ÁßÀÇ Çϳª°¡ ¿ÀǼҽº ÇÁ·ÎÁ§Æ® ÁøÇàÀÌ´Ù. »ç½Ç ±¹³»¿¡¼µµ ¿ÀǼҽº ÇÁ·ÎÁ§Æ®´Â ¸¹Àº »ç¶÷µéÀÌ °ü½ÉÀ» °®°í ÀÖÁö¸¸ ¸·»ó ÇÁ·ÎÁ§Æ®¿¡ Âü¿©ÇÏ´Â »ç¶÷µéÀÇ ¼ýÀÚ´Â ¿©ÀüÈ÷ ºÎÁ·ÇÏ´Ù. ¿©±â¼´Â ¿©·¯ °³¹ßÀÚµéÀÌ µ¿½Ã¿¡ ¿ÀǼҽº ÇÁ·ÎÁ§Æ®¿¡ Âü°¡ÇÒ ¶§ °ÅÀÇ ÇʼöÀûÀ¸·Î ¾²ÀÌ´Â diff, patch, CVS(Concurrent Versions System)¿Í °°Àº ¼Ò½ºÄÚµå ¹öÀü °ü¸®Åø¿¡ ´ëÇØ »ìÆì º¸°í ¿ÀǼҽº ÇÁ·ÎÁ§Æ®¸¦ ÁøÇàÇÒ ¶§ ¾Ë¾ÆµÎ¸é ÁÁÀº Ư¼ºÀ̳ª ÀÛ¾÷ ¹æ½Ä¿¡ ´ëÇØ¼µµ ¾Ë¾Æ º»´Ù.
¿ÀǼҽº ÇÁ·ÎÁ§Æ®¶õ µµ´ëü ¾î¶² °ÍÀϱî? ¸®´ª½º¿Í ¿ÀǼҽºÀÇ ºÎ»ó°ú ´õºÒ¾î ¿ÀǼҽº °³¹ß ¹æ½ÄÀº ±âÁ¸ÀÇ »ó¿ë ¼ÒÇÁÆ®¿þ¾î °³¹ß ¹æ½Ä¿¡ ºñÇØ ÀûÀº ºñ¿ëÀ¸·Î ¾çÁúÀÇ ¼ÒÇÁÆ®¿þ¾î¸¦ °³¹ßÇÒ ¼ö ÀÖÀ¸¸ç ¼ÒÇÁÆ®¿þ¾î ½ÃÀå µ¶Á¡ÀÇ ¹®Á¦°¡ ¾ø´Ù´Â ÀǰßÀÌ ¼³µæ·ÂÀ» °è¼Ó ³ô¿©°¡°í ÀÖ´Ù.
±×·¯³ª ÇÊÀÚ°¡ º¸±â¿¡´Â ¿ÀǼҽº °³¹ß ¹æ½ÄÀº ±× È¿À²¼ºÀ» ³íÀÇÇϱâ Àü¿¡ ¿Ö ÀÌ·± ½ÄÀÇ °³¹ß ¹æ½ÄÀÌ ¸¸µé¾î Á³À¸¸ç ¿Ö ¿ÀǼҽº ½ºÅ¸ÀÏÀÇ °³¹ß ¹æ½ÄÀÌ ÀÚ¿¬½º·´°Ô Á¤ÂøµÇ¾ú´ÂÁö¸¦ ÀÌÇØÇÏ´Â °ÍÀÌ ´õ¿í Áß¿äÇÏ´Ù°í »ý°¢ÇÑ´Ù. ÇÊÀÚÀÇ ÀǰßÀ¸·Î´Â ¿ÀǼҽº´Â ¼ÒÇÁÆ®¿þ¾î¸¦ ¼ÒÇÁÆ®¿þ¾î ±× ÀÚü°¡ Áö´Ñ Ư¼º¿¡ ¸Âµµ·Ï ÀÚ¿¬½º·´°Ô °³¹ßÇÏ´Â ÇÑ ¹æ¹ýÀ̶ó°í »ý°¢ÇÑ´Ù.
´ç¿¬ÇÑ ¾ê±âÁö¸¸ ¾î¶°ÇÑ ¼ÒÇÁÆ®¿þ¾îÀÇ ¼Ò½ºÄڵ带 °ø°³ÇÏ¸é ±× ¼ÒÇÁÆ®¿þ¾î°¡ °è¼Ó ¹Ù²î¾î ³ª°¥ ¼ö ÀÖ´Â ±æÀÌ ¿¸®°Ô µÈ´Ù. ¼Ò½ºÄڵ带 °ø°³Çؼ °³¹ß ÀÛ¾÷À» ÁøÇàÇÏ´Â ¿ÀǼҽº °³¹ß ¹æ¹ýÀÌ µÎµå·¯Áö°Ô ³ªÅ¸³ °ÍÀº 1970³â´ë ÃÊ AT&T¿¡¼ ÀÚ»çÀÇ ¿î¿µÃ¼Á¦ÀÎ À¯´Ð½ºÀÇ ¼Ò½ºÄڵ带 °ø°³ÇÑ ÀÌÈĺÎÅͶó°í º¸´Â °ÍÀÌ Á¤¼³ÀÌ´Ù. AT&T¿¡¼´Â ´ëÇаú °°Àº ±³À°, ¿¬±¸ ±â°ü¿¡ ÀÚ»çÀÇ Á¦Ç°ÀÎ À¯´Ð½º¸¦ °ø±ÞÇÏ¸é¼ µ·À» ¹Þ°í ¼Ò½ºÄڵ带 ±×´ë·Î Á¦°øÇÏ´Â ¶óÀ̼±½º ¹æ½ÄÀ» ÃëÇß´Ù.
¼ÒÇÁÆ®¿þ¾î¸¦ ¹èÆ÷ÇÒ ¶§ ¼Ò½º°¡ ¾Æ´Ñ ¹ÙÀ̳ʸ®¸¦ ÁÖ·Î ¹èÆ÷ÇÏ´Â Áö±ÝÀ¸·Î¼´Â ¾ð¶æ »ó»óÇϱ⠾î·Á¿î °üÇàÀÏ ¼öµµ ÀÖÁö¸¸ ÄÄÇ»ÅÍÀÇ Á¾·ù°¡ ÅëÀϵǾî ÀÖÁö ¾Ê°í, ¼Ò¼öÀÇ Àü¹®°¡ Áý´Ü¿¡¼ À¯´Ð½º¸¦ ÁÖ·Î »ç¿ëÇß´Ù´Â Á¡À» »ý°¢ÇØ º»´Ù¸é AT&T ÀÔÀå¿¡¼ À¯Áöº¸¼ö ºñ¿ëÀ» ÁÙ¿©ÁÖ´Â ÀÌ·¯ÇÑ ¼Ò½ºÄÚµå ÇüÅÂÀÇ ¹èÆ÷´Â ³ª¸§´ë·Î ÇÕ¸®ÀûÀÎ ¼±ÅÃÀ̶ó°íµµ ÇÒ ¼ö ÀÖ°Ú´Ù.
±×·¯³ª ¿©±â¼ ¿¹»óÇÏÁö ¸øÇÑ ÀÏÀÌ ¹ú¾îÁø °ÍÀÌ ÀÌµé »ç¿ëÀÚ, ȤÀº »ç¿ëÀÚÀÌ¸é¼ °³¹ßÀÚÀ̱⵵ ÇÑ »ç¶÷µéÀÌ ¸¶À½´ë·Î ¶â¾î°íÄ¡°í µ¡ºÙÀ̱⠽ÃÀÛÇÑ ÄÚµåµéÀÌ ¿À¸®Áö³Î AT&T À¯´Ð½ºº¸´Ù ¿ÀÈ÷·Á ´õ Áß¿äÇÑ À§Ä¡¸¦ Â÷ÁöÇÏ°Ô µÈ °ÍÀÌ´Ù(BSD À¯´Ð½ºÀÇ ¹ßÀüµµ ÀÌ·¯ÇÑ °ü½À¿¡ »Ñ¸®¸¦ µÎ°í ÀÖ´Ù).
µû¶ó¼ ÀÚÀ¯ ¼ÒÇÁÆ®¿þ¾î³ª ¿ÀǼҽº¿Í °°Àº ¿ë¾îµéÀº ¼ÒÇÁÆ®¿þ¾î °³¹ß ¹æ½ÄÀÇ Ãø¸é¿¡¼ º¼ ¶§ ÀÌ¹Ì Á¸ÀçÇϰí ÀÖ´ø °³¹ß ¹æ½ÄÀ» »õ·Ó°Ô ÀçÁ¶¸íÇϰí ÀÖ´Ù°í »ý°¢ÇÒ ¼ö ÀÖ´Ù. ÀÚÀ¯ ¼ÒÇÁÆ®¿þ¾î¿¡¼´Â ¼Ò½ºÄڵ尡 °ø°³µÈ ¼ÒÇÁÆ®¿þ¾îÀÇ º¸È£¿¡ Á» ´õ ÁßÁ¡À» µÎ°í ÀÖÀ¸¸ç ¿ÀǼҽº¿¡¼´Â ¼Ò½ºÄڵ尡 °ø°³µÈ ä·Î °³¹ßµÇ´Â ¼ÒÇÁÆ®¿þ¾îÀÇ °³¹ß È¿À²¼º¿¡ Á» ´õ °ü½ÉÀ» ÁýÁßÇÏ´Â ÆíÀÌ´Ù. ¾î´À °æ¿ìÀÌµç °£¿¡, ¼Ò½ºÄڵ带 °ø°³Çؼ °³¹ßÀÚÀÇ Âü¿©¸¦ À̲ø¾î ³»´Â ¼ÒÇÁÆ®¿þ¾î °³¹ß ¹æ½ÄÀº º¯ÇÔÀÌ ¾øÀ¸¸ç, ¿ÀǼҽº¶ó´Â ´Ü¾î°¡ ¾Æ¿¹ ¾ø´ø ½ÃÀý¿¡µµ À̰ÍÀº ¸¶Âù°¡ÁöÀÎ °ÍÀÌ´Ù.
±×·¸´Ù¸é, ÀÌÁ¦ °£´ÜÇÑ »óȲ Çϳª¸¦ °¡Á¤ÇØ º¸±â·Î ÇÏÀÚ. ¿©·¯ºÐµéÀÌ Ãʱâ À¯´Ð½º ½ÃÀý ´ëÇÐ Àü»ê½Ç¿¡ ±Ù¹«ÇÏ´ø µµÁß À¯´Ð½º°¡ µµÀԵǾú´Ù°í »ý°¢Çغ¸ÀÚ. °íµÈ Æ÷ÆÃ°ú ¼³Á¤ ÀÛ¾÷ ³¡¿¡ ½Ã½ºÅÛÀÌ Á¦´ë·Î µ¹¾Æ°¡±â ½ÃÀÛÇߴµ¥ ÀÌ ¿ÍÁß¿¡¼ ¹ö±×¸¦ Çϳª ¹ß°ßÇÏ°í ±× ºÎºÐÀÇ ¼Ò½ºÄڵ带 ¼öÁ¤Çß´Ù. ÀÌ·² ¶§ ´ÙÀ½ ¹öÀüÀÇ À¯´Ð½º¿¡ ¿©·¯ºÐµéÀÌ °íÄ£ ºÎºÐÀÌ ¹Ý¿µµÇµµ·Ï ÇÏ·Á¸é ¾î¶»°Ô ÇØ¾ß ÇÒ±î?
ÀÌ·² ¶§ °¡Àå »ó½ÄÀûÀÎ ÇØ¹ýÀº °íÄ£ ºÎºÐÀÇ ¼Ò½ºÄڵ带 ¿øÀúÀÚ¿¡°Ô º¸³»ÁÖ¸é µÉ °ÍÀÌ´Ù. ±×¸®°í ±× ¹æ¹ýÀ¸·Î °¡Àå Æí¸®ÇÑ °ÍÀº ¾Æ¸¶µµ À̸ÞÀÏÀÌ ÁÁÀ» °ÍÀÌ´Ù. ÀÎÅͳÝÀÌ ¾ø´ø ½ÃÀýÀ̶ó¸é ¾Æ¸¶µµ ÀÏ¹Ý ¸ÞÀÏÀ» ÀÌ¿ëÇßÀ» °ÍÀÌ´Ù. ¾à°£Àº ³í¿ÜÀÇ À̾߱âÁö¸¸, ÀÎÅÍ³Ý ÃÊâ±â¿¡´Â ±¹³»¿¡¼ À¯Áî³Ý ´º½º±×·ì¿¡ ¿Ã¶ó¿Â ±ÛÀ» º¸±â À§ÇØ Á¤±âÀûÀ¸·Î ´º½º¼¹ö µ¥ÀÌÅÍ ¹é¾÷À» ¿Ü±¹¿¡¼ ÀÚ±â Å×ÀÌÇÁ¿¡ ¹Þ¾Æ ¼ÒÆ÷·Î Àü¼Û¹Þ±âµµ Çß´Ù°í ÇÑ´Ù. ¾î·µç ÀÌ·¯ÇÑ À̸ÞÀÏÀÇ °£ÆíÇÔ ´öºÐ¿¡ À̸ÞÀÏÀº ¿ÀǼҽº °³¹ß ÀÛ¾÷¿¡¼ °¡Àå Áß¿äÇÑ Åë½Å ¼ö´ÜÀÌ¸ç ÆÐÄ¡ Àü¼Û ¼ö´ÜÀ¸·Î ÀÚ¸® Àâ°Ô µÈ´Ù.
¿©±â¼ Çϳª »ý°¢ÇØ ºÁ¾ß ÇÒ °ÍÀÌ ¿øÀúÀÚÀÇ ÀÔÀåÀÌ´Ù. ÀÌ·¸°Ô ÆÐÄ¡¸¦ ´ã°í ÀÖ´Â ¸ÞÀÏÀÇ ¼ýÀÚ°¡ ÀûÀ» ¶§´Â ¿øÀúÀÚ´Â ±×Àú Àü¼ÛµÈ ÆÐÄ¡¸¦ °í¸¿°Ô ¹Þ¾Æ Àû¿ëÇϱ⸸ ÇÏ¸é µÇ°ÚÁö¸¸ ÆÐÄ¡ÀÇ ¼ýÀÚ°¡ ´Ã¾î³ª°í, °°Àº ¹ö±×¿¡ ´ëÇØ¼µµ µÎ Á¾·ù ÀÌ»óÀÇ Áߺ¹ ÆÐÄ¡°¡ »ý±â°Ô µÇ¸é ¾î¶² ÆÐÄ¡¸¦ ¼±ÅÃÇÒ °ÍÀÎÁö, ±×¸®°í ¸ðÀº ÆÐÄ¡¸¦ ¾î¶»°Ô ÅëÇÕÇØ¼ ÇϳªÀÇ ¼Ò½ºÄÚµå Æ®¸®·Î ¸¸µé°í ±×°ÍÀ» ¹èÆ÷(public release)ÇÒ °ÍÀÎÁö ¼±ÅÃÇØ¾ß ÇÏ´Â ¹®Á¦°¡ »ý±ä´Ù. ÀÌ·± °æ¿ì, º¸Åë ¿ÀǼҽº°èÀÇ °ü½ÀÀº ¿øÀúÀÚ, ȤÀº ÇÁ·ÎÁ§Æ® ¸®´õ¿¡°Ô ¾î¶² ÆÐÄ¡¸¦ ¹Þ¾ÆµéÀÏ °ÍÀÎÁöÀÇ °áÁ¤±ÇÀ» ¸Ã°Ü¹ö¸®´Â °æÇâÀÌ ÀÖ´Ù. ÀÌ·² ¶§ ¿øÀúÀÚ³ª ÇÁ·ÎÁ§Æ® ¸®´õ´Â ¡®ÀÚºñ·Î¿î µ¶ÀçÀÚ(benevolent dictator)¡¯¶ó´Â ¿ªÇÒÀ» ¸Ã°Ô µÇ´Â °ÍÀÌ´Ù.
¶ÇÇÑ, ÆÐÄ¡°¡ Àü¼ÛµÉ ¶§ »ç¶÷µé¸¶´Ù ÅëÀϵÇÁö ¾ÊÀº ¹æ½ÄÀ¸·Î ÆÐÄ¡¸¦ Àü¼ÛÇÏ°Ô µÇ¸é ÇÁ·ÎÁ§Æ® ¸®´õÀÇ ÀÔÀå¿¡¼´Â ¿©·¯ Á¾·ùÀÇ ÆÐÄ¡¸¦ ÇϳªÀÇ ¼Ò½ºÄÚµå Æ®¸®¿¡ Àû¿ë½ÃŰ´Â µ¥ ¸¹Àº È¥¶õÀ» °Þ°Ô µÉ °ÍÀÌ´Ù. À̸¦ ÇØ°áÇϱâ À§ÇØ µîÀåÇÑ ½ÉÇÃÇÑ µµ±¸°¡ ¹Ù·Î diff¿Í patchÀÌ´Ù.
diff¿Í patch
diff´Â À¯´Ð½º »ç¿ëÀÚ Æ©Å丮¾ó¿¡µµ °¡²û¾¿ µîÀåÇÏ´Â °£´ÜÇÑ À¯Æ¿¸®Æ¼ÀÌ´Ù. diffÀÇ ¿ªÇÒÀº µÎ ÆÄÀϰ£ÀÇ Â÷ÀÌÁ¡À» º¸¿©ÁÖ´Â µ¥ ¼Ò½ºÄÚµåÀÇ ¹Ù²ï ºÎºÐÀ» º¸¿© ÁÙ ¶§ ¸¹ÀÌ ¾²ÀδÙ. patch´Â ÀÌ·¯ÇÑ diffÀÇ Ãâ·Â °á°ú¸¦ ÀÌ¿ëÇØ¼ ÀÌ ¹Ù²ï ºÎºÐÀ» ¿ø·¡ÀÇ ¼Ò½ºÄڵ忡 ¾÷µ¥ÀÌÆ®ÇÒ ¶§ ¾²´Â À¯Æ¿¸®Æ¼ÀÌ´Ù.
diffÀÇ ÀϹݿë¹ý
¿ì¼±, diffÀÇ Çü½ÄÀº ´ÙÀ½°ú °°´Ù.
diff [options] from-file to-file
diff´Â µÎ °³ÀÇ ÆÄÀÏÀ» ÇÊ¿ä·Î ÇѴٴµ¥ ÁÖÀÇÇÏÀÚ. from-fileÀº ¿ø·¡ÀÇ ÆÄÀÏ, Áï ±¸ ¹öÀüÀÇ ÆÄÀÏÀ̸ç, to-fileÀº »õ·ÎÀÌ ¹Ù²ï »õ ¹öÀüÀÇ ÆÄÀÏÀÌ´Ù. diff´Â ÀÌ·¸°Ô Çϸé from-file¿¡¼ to-file·Î ¾î¶°ÇÑ º¯È°¡ ÀÖ¾ú´ÂÁö¸¦ Ãâ·ÂÇØ ÁØ´Ù. from-file°ú to-fileÀº ¸ðµÎ µð·ºÅ丮°¡ ¿Ã ¼öµµ Àִµ¥ µð·ºÅ丮°¡ ¿À´Â °æ¿ì´Â Á¶±Ý µÚ¿¡ »ìÆìº¸±â·Î ÇÏÀÚ. Âü°í·Î °£´ÜÇÑ ¿¹Á¦ hello1.c¿Í hello2.cÀÇ ¿¹¸¦ µé¾îº¸ÀÚ. ´ÙÀ½¿¡¼ º¼ ¼ö ÀÖµíÀÌ hello2.c´Â hello1.c¿¡¼ hello, world ºÎºÐÀÌ hello, the world of linux·Î ´ëÄ¡µÇ¾ú°í ±× ¾Æ·§ÁÙ¿¡ °ø¹é ¶óÀÎ Çϳª¿Í printf("Testing one two three.\n");°¡ Ãß°¡µÇ¾úÀ½À» º¼ ¼ö ÀÖ´Ù.
*** hello1.c:
#include
#include
main()
{
printf("hello, world.\n");
}
*** hello2.c:
#include
main()
{
printf("hello, the world of Linux.\n");
printf("Testing one two three.\n");
}
diff °á°ú´Â ´ÙÀ½°ú °°´Ù.
$ diff hello1.c hello2.c
2d1
< #include
6c5,7
< printf("hello, world.\n");
---
> printf("hello, the world of Linux.\n");
>
> printf("Testing one two three.\n");
ù ÁÙÀÇ 2d1Àº hello1ÀÇ µÎ ¹øÂ° ÁÙ¿¡¼ ÇÑ ÁÙÀ» »èÁ¦(delete)ÇÏ´Â º¯È°¡ ÀϾ´Ù´Â ÀǹÌÀÌ´Ù. ±×¸®°í Á¶±Ý ¾Æ·¡ÀÇ 6c5,7Àº hello1ÀÇ 6¹øÂ° ÁÙÀ» ¾Æ·§ºÎºÐÀ¸·Î ¹Ù²Ù´Âµ¥(change) ±× °á°ú°¡ 5¹øÂ°ºÎÅÍ 7¹øÂ° ¶óÀαîÁö µé¾î°¡°Ô µÈ´Ù´Â ÀǹÌÀÌ´Ù. ±×·¯³ª ½ÇÁ¦·Î ÇÁ·Î±×·¥ ¼Ò½ºÄڵ忡¼´Â ¿À¸®Áö³Î diffÀÇ °á°ú¹°º¸´Ù´Â unified formatÀÇ diff Ãâ·ÂÀ» ¾²´Â °æ¿ì°¡ ¸¹´Ù. unified formatÀ» ¾²·Á¸é diff¿¡ -u ¿É¼ÇÀ» Ãß°¡ÇÑ´Ù.
$ diff -u hello1.c hello2.c
--- hello1.c Tue Aug 3 14:34:46 2004
+++ hello2.c Tue Aug 3 13:25:49 2004
@@ -1,7 +1,8 @@
#include
-#include
main()
{
- printf("hello, world.\n");
+ printf("hello, the world of Linux.\n");
+
+ printf("Testing one two three.\n");
}
Âü°í·Î unified format¿¡¼´Â º¯°æµÇ´Â ºÎºÐ¸¸ÀÌ ¾Æ´Ñ º¯°æµÇ´Â ºÎºÐ ±ÙóÀÇ ³»¿ë(context)µµ °°ÀÌ Ãâ·ÂµÊÀ» º¼ ¼ö ÀÖ´Ù. »ç¶÷ÀÌ Á» ´õ ÀÐ±â Æí¸®ÇÑ context format Ãâ·Â ¿É¼ÇÀÎ -c¸¦ »ç¿ëÇÑ °á°ú´Â ´ÙÀ½°ú °°´Ù. context format ¿ª½Ã ¹Ù²î´Â ºÎºÐ ±ÙóÀÇ ³»¿ëµµ Âü°íÇϱâ ÁÁ°Ô Ãâ·ÂÀ» ÇØ ÁØ´Ù. ¾î·°Å³ª ¿ÀǼҽº ÇÁ·ÎÁ§Æ®¿¡¼´Â diff¸¦ ¾µ ¶§ ÁÖ·Î -u ¿É¼ÇÀ» ºÙÀδٴ Á¡À» ²À ¿Ü¿ö µÎµµ·Ï ÇÏÀÚ.
$ diff -c hello1.c hello2.c
*** hello1.c Tue Aug 3 14:34:46 2004
--- hello2.c Tue Aug 3 13:25:49 2004
***************
*** 1,7 ****
#include
- #include
main()
{
! printf("hello, world.\n");
}
--- 1,8 ----
#include
main()
{
! printf("hello, the world of Linux.\n");
!
! printf("Testing one two three.\n");
}
ÀÌ·¸°Ô diff·Î ¼Ò½ºÄÚµåÀÇ º¯°æµÈ ºÎºÐÀ» ÀúÀåÇÑ ´ÙÀ½ À̰ÍÀ» ¿øÀúÀÚ¿¡°Ô ¸ÞÀÏ·Î º¸³»¸é µÈ´Ù.
$ diff -u hello1.c hello2.c > hello.diff
¿©·¯ °³ÀÇ ¼Ò½º ÆÄÀÏÀ» diff·Î ºñ±³Çϱâ
¾ÕÀÇ °æ¿ì´Â ¼Ò½ºÄÚµå ÆÄÀÏ Çϳª¸¸ÀÌ º¯°æµÇ¾úÁö¸¸ »óȲ¿¡ µû¶ó¼´Â ÆÐÄ¡ °úÁ¤¿¡ ¿©·¯ ÆÄÀÏÀÌ ¼öÁ¤µÇ°í »õ·Î¿î ÆÄÀÏÀÌ Ãß°¡µÇ´Â °æ¿ì°¡ ¹ß»ýÇÒ ¼öµµ ÀÖ´Ù. diff´Â µð·ºÅ丮 ´ÜÀ§ÀÇ ÆÄÀÏ ºñ±³µµ °¡´ÉÇÏ´Ù. ¿ì¼±, ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ.
$ pwd
/home/foobar
$ ls -F
src1/ src2/ # src1Àº ¿øº», src2´Â »õ·Î¿î ±â´É Ãß°¡º»
$ ls src1
hello1.c hello2.c
$ ls src2
hello1.c hello2.c hello3.c
$ more src1/*c
::::::::::::::
src1/hello1.c
::::::::::::::
#include
#include
main()
{
printf("hello, world.\n");
}
::::::::::::::
src1/hello2.c
::::::::::::::
#include
main()
{
printf("hello, the world of Linux.\n");
printf("Testing one two three.\n");
}
$ more src2/*c
::::::::::::::
src2/hello1.c
::::::::::::::
#include
main()
{
printf("hello, world.\n");
}
::::::::::::::
src2/hello2.c
::::::::::::::
#include
main()
{
printf("hello, the world of Linux.\n");
printf("Testing one two three four.\n");
}
::::::::::::::
src2/hello3.c
::::::::::::::
#include
#include
main()
{
/* needs to be filled in */
}
src2¿¡¼´Â hello3.c ÆÄÀÏÀÌ »õ·Î Ãß°¡µÇ¾úÀ¸¸ç, hello2.c¿¡¼ ¼öÁ¤ ºÎºÐÀÌ ÀÖ°í, hello1.c¿¡¼ ºüÁø ºÎºÐÀÌ ÀÖ´Ù. ÀÌ µÎ µð·ºÅ丮 »çÀÌ¿¡¼ diff¸¦ ½ÇÇàÇÏ·Á¸é ´ÙÀ½°ú °°Àº ¸í·ÉÀ» ¾´´Ù.
$ pwd
/home/foobar
$ ls -F
src1/ src2/ # °æ·Î¸¦ Á¦´ë·Î È®ÀÎÇÑ µÚ diff¸¦ ½ÇÇàÇÑ´Ù
$ diff -urN src1 src2
diff -urN src1/hello1.c src2/hello1.c
--- src1/hello1.c Tue Aug 3 14:34:46 2004
+++ src2/hello1.c Tue Aug 3 13:35:44 2004
@@ -1,5 +1,4 @@
#include
-#include
main()
{
diff -urN src1/hello2.c src2/hello2.c
--- src1/hello2.c Tue Aug 3 13:25:49 2004
+++ src2/hello2.c Tue Aug 3 13:35:57 2004
@@ -4,5 +4,5 @@
{
printf("hello, the world of Linux.\n");
- printf("Testing one two three.\n");
+ printf("Testing one two three four.\n");
}
diff -urN src1/hello3.c src2/hello3.c
--- src1/hello3.c Thu Jan 1 09:00:00 1970
+++ src2/hello3.c Tue Aug 3 13:37:02 2004
@@ -0,0 +1,7 @@
+#include
+#include
+
+main()
+{
+ /* needs to be filled in */
+}
diff ¸í·É¿¡¼ -r ¿É¼ÇÀº recursive ¿É¼ÇÀ¸·Î ¼ºê µð·ºÅ丮±îÁö diff°¡ ¸ðµÎ Ž»öÇ϶ó´Â ÀǹÌÀ̰í, -N ¿É¼ÇÀº hello3.c¿Í °°ÀÌ »õ·Î ¸¸µé¾îÁø ÆÄÀϱîÁöµµ Æ÷ÇÔÇØ diff Ãâ·ÂÀ» »ý¼ºÇ϶ó´Â Àǹ̴Ù. ÀÌ ¿É¼Ç ¿ª½Ã -urNÀ¸·Î ¿Ü¿ö µÎ´Â °ÍÀÌ ÁÁ´Ù.
patch »ç¿ëÇϱâ
ÀÌ·¸°Ô ¸¸µé¾îÁø diffÀÇ °á°ú¹°Àº patch ¸í·ÉÀ» ÅëÇØ¼ ¿øÀúÀÚÀÇ ¼Ò½ºÄÚµå·Î ¾÷µ¥ÀÌÆ®µÈ´Ù. patch ¸í·ÉÀº -p ¿É¼Ç¸¸ Á¤È®È÷ ÀÌÇØÇÏ¸é »ç¿ëÇϴµ¥ ¹«¸®°¡ ¾ø´Ù.
-p ¿É¼ÇÀº strip ¿É¼ÇÀ̶ó°í ºÎ¸£´Âµ¥ diff ÆÄÀÏ¿¡ ¸í½ÃµÇ¾î ÀÖ´Â µð·ºÅ丮¿¡¼ ¸î ´Ü°è¸¦ ¹þ°Ü(strip)³¾ °ÍÀΰ¡¸¦ °áÁ¤ÇÑ´Ù. -p0 ¿É¼ÇÀº µð·ºÅ丮 ´Ü°è¸¦ Çϳªµµ ¹þ°Ü³»Áö ¾Ê°Ú´Ù´Â °ÍÀ̰í, -p1 ¿É¼ÇÀº ÇÑ ´Ü°è¸¦ ¹þ°Ü³½´Ù´Â ÀǹÌÀ̰í -p2´Â µÎ ´Ü°è¸¦ ÀǹÌÇÑ´Ù. ½±°Ô ÀÌÇØÇϱâ À§ÇØ <Ç¥ 1>¸¦ º¸ÀÚ. foobar/include/net µð·ºÅ丮°¡ ÀÖ´Ù°í ÇÒ ¶§ p ¿É¼ÇÀ» Àû¿ëÇÏ¸é ´ÙÀ½°ú °°ÀÌ µð·ºÅ丮°¡ ¹þ°ÜÁ® ³ª°£´Ù.
p0 foobar/include/net
p1 include/net
p2 net
À̰ÍÀÌ diff·Î »ý¼º½ÃŲ ÆÐÄ¡¸¦ Àû¿ëÇÒ ¶§ ¾î¶² Àǹ̸¦ °¡Áö°Ô µÉ±î? ¿ì¼±, ÆÄÀÏ µÎ °³¸¦ ºñ±³ÇßÀ» ¶§ »ý¼ºµÈ diff ÆÐÄ¡¿Í µð·ºÅ丮 µÎ °³¸¦ ºñ±³ÇßÀ» ¶§ »ý¼ºµÈ diff ÆÐÄ¡ÀÇ Çì´õ ºÎºÐÀ» ºñ±³Çغ¸ÀÚ.
¡ß ÆÄÀÏ µÎ °³¸¦ ºñ±³ÇßÀ» °æ¿ì:
$ diff -u hello1.c hello2.c
--- hello1.c Tue Aug 3 14:34:46 2004
+++ hello2.c Tue Aug 3 13:25:49 2004
(ÀÌÇÏ »ý·«)
¡ß µð·ºÅ丮 µÎ °³¸¦ ºñ±³ÇßÀ» °æ¿ì:
$ diff -urN src1 src2
diff -urN src1/hello1.c src2/hello1.c
--- src1/hello1.c Tue Aug 3 14:34:46 2004
+++ src2/hello1.c Tue Aug 3 13:35:44 2004
(ÀÌÇÏ »ý·«)
Áï, diff°¡ »ý¼ºÇÑ ÆÐÄ¡ ÆÄÀÏ¿¡´Â ¿øº» ÆÄÀϰú ¹Ù²ï ÆÄÀÏÀÇ µð·ºÅ丮°¡ ¸í½ÃµÇ¾î ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. patch ¸í·ÉÀ» »ç¿ëÇÒ ¶§´Â ÀÌ °æ·Î¸íÀ» °í·ÁÇØ¼ patch ¸í·ÉÀ» ½ÇÇà½ÃÄÑ Áà¾ß ÇÑ´Ù.
ÆÐÄ¡ Àû¿ëÇϱâ
¿©·¯ºÐÀÌ ¿øÀúÀÚÀÇ ÀÔÀå¿¡¼ Á¦°ø¹ÞÀº ÆÐÄ¡¸¦ Àû¿ë½ÃŰ·Á¸é ´ÙÀ½°ú °°Àº ¹æ¹ýÀ» »ç¿ëÇÏ¸é µÈ´Ù. ÆÐÄ¡ ÆÄÀÏÀº Ç¥ÁØ ÀÔ·Â(standard input)À¸·Î µé¾î°¡¸ç, Ç×»ó -p ¿É¼ÇÀ» ÁÖÀÇ ±í°Ô »ç¿ëÇØ¾ß ÇÑ´Ù. À̹ø ¿¹Á¦¿¡¼´Â µð·ºÅ丮 µÎ °³¸¦ ºñ±³ÇÑ ÆÐÄ¡°¡ Àü¼ÛµÇ¾ú´Ù°í °¡Á¤ÇØ º¸ÀÚ. ¿øÀúÀÚ´Â diff ÆÐÄ¡ÀÇ Çì´õ ºÎºÐÀ» ÀÐ°í ÆÐÄ¡ÀÇ °æ·Î¸íÀ» È®ÀÎÇÑ ´ÙÀ½ ÀûÀýÇÑ µð·ºÅ丮·Î °¡¼ patch ¸í·ÉÀ» ½ÇÇàÇÑ´Ù. ¿ì¼±, -p0 ¿É¼Ç »ç¿ë ¿¹ºÎÅÍ º¸ÀÚ. diff ÆÐÄ¡ÀÇ Çì´õ ºÎºÐÀº ´ÙÀ½°ú °°´Ù.
diff -urN src1/hello1.c src2/hello1.c
--- src1/hello1.c Tue Aug 3 14:34:46 2004
+++ src2/hello1.c Tue Aug 3 13:35:44 2004
... ÀÌÇÏ »ý·« ...
µû¶ó¼ ¿øÀúÀÚ´Â ÀÌ ÆÐÄ¡¸¦ hello.diff·Î ÀúÀåÇÑ ´ÙÀ½ ÀÚ½ÅÀÇ ¼Ò½ºÄڵ尡 ÀÖ´Â src1±îÁö °¡¼ ÆÐÄ¡¸¦ Àû¿ëÇÑ´Ù.
$ cd projects
$ pwd
/home/foobar/projects
$ ls -F
hello.diff src1/
diff ÆÄÀÏ¿¡ ±â¼úµÈ °æ·Î¸í°ú ÇöÀç °æ·Î¸íÀÌ ÀÏÄ¡Çϰí ÀÖÀ½À» ÁÖÀDZí°Ô º¸ÀÚ.
$ patch -p0 < hello.diff
$ patch -p0 < hello.diff
patching file src1/hello1.c
patching file src1/hello2.c
patching file src1/hello3.c
ÆÐÄ¡ Àü°ú ÆÐÄ¡ ÈÄÀÇ °á°ú¸¦ ºñ±³ÇØ º¸¸é ´ÙÀ½°ú °°´Ù.
ÆÐÄ¡ Àü:
$ pwd
/home/foobar/projects/src1
$ ls -al
total 16
drwxr-xr-x 2 jwsohn jwsohn 4096 8¿ù 3 16:35 .
drwxr-xr-x 3 jwsohn jwsohn 4096 8¿ù 3 16:35 ..
-rw-r--r-- 1 jwsohn jwsohn 82 8¿ù 3 14:34 hello1.c
-rw-r--r-- 1 jwsohn jwsohn 116 8¿ù 3 13:25 hello2.c
ÆÐÄ¡ ÈÄ:
$ pwd
/home/foobar/projects/src1
$ ls -al
total 20
drwxr-xr-x 2 jwsohn jwsohn 4096 8¿ù 3 16:41 .
drwxr-xr-x 3 jwsohn jwsohn 4096 8¿ù 3 16:35 ..
-rw-r--r-- 1 jwsohn jwsohn 62 8¿ù 3 16:41 hello1.c
-rw-r--r-- 1 jwsohn jwsohn 121 8¿ù 3 16:41 hello2.c
-rw-r--r-- 1 jwsohn jwsohn 83 8¿ù 3 16:41 hello3.c
ÀÌÁ¦ -p1 ¿É¼ÇÀ» Àû¿ëÇØ¼ patch ¸í·ÉÀ» ½á º¸ÀÚ. diff ÆÄÀÏ¿¡ ±â¼úµÈ °æ·Î¸í¿¡¼ µð·ºÅ丮¸¦ ÇÑ ´Ü°è ¹þ°Ü³»¸é src1 µð·ºÅ丮°¡ ¾ø¾îÁö¹Ç·Î ´ÙÀ½°ú °°Àº ¹æ½ÄÀ¸·Î ÆÐÄ¡ ÆÄÀÏÀÌ Àû¿ëµÈ´Ù.
$ pwd
/home/foobar/projects
$ ls -F
hello.diff src1/
$ cd src1
$ patch -p1 < ../hello.diff
patching file hello1.c
patching file hello2.c
patching file hello3.c
Âü°í·Î diff ÆÄÀÏÀÇ °æ·Î´Â ¾îµð¿¡ À§Ä¡ÇÏµç »ó°üÀÌ ¾ø´Ù. ÆÄÀÏ Çϳª¿¡ ´ëÇÑ ÆÐÄ¡¸¦ Àû¿ëÇÒ ¶§´Â -p0 ¿É¼ÇÀ» ¾²¸é µÉ °ÍÀÌ´Ù.
CVS »ç¿ë
CVS´Â ¾àÀÚ Áß Concurrent°¡ ÀǹÌÇϵíÀÌ Çѹø¿¡ ¿©·¯ ¸íÀÇ °³¹ßÀÚ°¡ µ¿ÀÏÇÑ ¼Ò½ºÄÚµå Æ®¸®¿¡ µ¿½Ã¿¡ ¼öÁ¤À» °¡ÇÏ¸é¼ ÀÛ¾÷À» ÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁÖ´Â µµ±¸ÀÌ´Ù. »ç½Ç ¿ÀǼҽº ÇÁ·ÎÁ§Æ®¿¡ Âü°¡ÇÏ´Â ÀÏ¹Ý °³¹ßÀÚÀÇ ÀÔÀå¿¡¼´Â CVS¿¡ ´ëÇÑ ÀϹÝÀûÀÎ Áö½ÄÀº º°´Ù¸¥ Çʿ䰡 ¾ø´Ù°í »ý°¢Çصµ ¹«¹æÇÏ´Ù. ½ÇÁ¦ ¼Ò½ºÄÚµå Æ®¸®¸¦ ¼öÁ¤ÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀ» °®°í ÀÖ´Â »ç¶÷µéÀº ÇÁ·ÎÁ§Æ® ¸®´õÀÎ ÀÚºñ·Î¿î µ¶ÀçÀÚ ÇÑ »ç¶÷À̳ª ÇÁ·ÎÁ§Æ®¿Í °ü·ÃÀÌ ±íÀº ¼Ò¼öÀÇ °³¹ßÀÚµéÀÏ °ÍÀ̱⠶§¹®ÀÌ´Ù.
Áï, ¼Ò½ºÄÚµå ¼öÁ¤ »çÇ×ÀÌ »ý±â¸é CVS¸¦ ±»ÀÌ ¾µ Çʿ䰡 ¾øÀÌ ±×³É FTP³ª http·Î ´Ù¿î¹ÞÀº ¼Ò½ºÄÚµå À§¿¡ diff¸¦ µ¹·Á¼ ÆÐÄ¡¸¸ À̸ÞÀϰú °°Àº ¼ö´ÜÀ¸·Î º¸³» ÁÖ¸é ¼Ò½ºÄÚµå ¼öÁ¤ ±ÇÇÑÀÌ ÀÖ´Â ±×ÂÊ »ç¶÷µéÀÌ(º¸Åë ¡®Ä¿¹ÌÅÍ¡¯¶ó°í ºÎ¸¥´Ù) ¾Ë¾Æ¼ 󸮸¦ ÇØ ÁÙ °ÍÀ̱⠶§¹®ÀÌ´Ù.
ÇÏÁö¸¸ °¡Àå ÃֽйöÀüÀÇ nightly buildµÈ ¼ÒÇÁÆ®¿þ¾î´Â CVS ¼¹ö¿¡ Á¢¼ÓÇØ¾ß¸¸ ±¸ÇÒ ¼ö ÀÖ´Â °æ¿ì°¡ ´ëºÎºÐÀÌ´Ù. µû¶ó¼ ¿ÀǼҽº °³¹ß ÇÁ·ÎÁ§Æ®¿¡ °ü½ÉÀÌ ÀÖ´Â °³¹ßÀÚ¶ó¸é ´ÙÀ½ Ãø¸é¿¡¼ CVS »ç¿ë¹ýÀ» ¾Ë¾Æ¾ß ÇÒ Çʿ䰡 ÀÖÀ» °ÍÀÌ´Ù.
[1] FTP³ª http ¼¹ö¿¡¼ ¼Ò½ºÄڵ带 ´Ù¿î¹Þ´Â ´ë½Å¿¡
[2] CVS ¼¹ö¿¡¼ °¡Àå ÃֽŠ¼Ò½ºÄڵ带 ´Ù¿î ¹Þ°í
[3] ÀÚ½ÅÀÌ ÆÐÄ¡ÇÑ ¼Ò½ºÄÚµå¿Í CVS ¼¹öÀÇ ¼Ò½ºÄÚµåÀÇ diff¸¦ »ý¼ºÇÏ´Â ¹æ¹ý
À͸í CVS üũ¾Æ¿ô
ÀÌÁ¦ CVS¿¡¼ ¼Ò½ºÄڵ带 ´Ù¿î¹Þ´Â ¹æ¹ýÀ» ¾Ë¾Æº¸±â·Î ÇÏÀÚ. ÀϹÝÀûÀ¸·Î ¿ÀǼҽº ÇÁ·ÎÁ§Æ®µéÀº ´ëºÎºÐ CVS ¼¹ö¸¦ Àбâ Àü¿ëÀ¸·Î ¼¼ÆÃÇØ ³õ°í ´©±¸µçÁö µé¾î¿Í¼ ¼Ò½ºÄڵ带 ´Ù¿î¹Þ¾Æ °¥ ¼ö ÀÖµµ·Ï ÇØ ³õ°í ÀÖ´Ù. À͸í FTP(anonymous FTP)¿Í ºñ½ÁÇÑ °³³äÀ¸·Î »ý°¢ÇÏ¸é µÇ°Ú´Ù. CVS ¼¹ö¿¡ »ç¿ëÀÚ°¡ Á¢¼ÓÀ» ÇØ¼ ¼Ò½ºÄڵ带 ÇÑ Ä«ÇÇ ´Ù¿î¹Þ¾Æ °¡´Â °ÍÀ» CVS¿¡¼´Â üũ¾Æ¿ô(check-out)À̶ó´Â ¿ë¾î·Î Ç¥ÇöÇÑ´Ù.
Âü°í·Î CVS´Â ·ÎÄà ¼¹ö¿¡¼ »ç¿ëÇÒ ¼öµµ ÀÖ°í, µû·Î CVS ¼¹ö¸¦ µÎ°í ¿ø°ÝÀ¸·Î Á¢¼ÓÇÒ ¼öµµ ÀÖ´Ù. ¿©±â¼´Â CVS°¡ ¿ø°Ý ¼¹ö¶ó°í °¡Á¤Çϱâ·Î ÇÑ´Ù. CVS ¼¹ö¿¡¼ ¼Ò½ºÄڵ带 ´Ù¿î¹Þ´Â ¸í·ÉÀº ´ÙÀ½°ú °°´Ù. KLDP.net ¼¹ö¿¡ À§Ä¡ÇÑ moniwiki ÇÁ·ÎÁ§Æ®¸¦ ¿¹·Î µé¾î º¸°Ú´Ù.
$ cvs -d:pserver:anonymous@cvs.kldp.net:cvsroot/moniwiki login
$ cvs -d:pserver:anonymous@cvs.kldp.net:cvsroot/moniwiki checkout moniwiki
À͸í FTP¿¡ Á¢¼ÓÇÒ ¶§ º¸´Ù´Â Á¶±Ý º¹ÀâÇØ º¸ÀδÙ. ¿ì¼±, ùÁÙÀÇ cvs ¸í·ÉÀº CVS ¼¹ö¿¡ anonmous, Áï ÀÍ¸í »ç¿ëÀÚ·Î ·Î±×ÀÎÇÏ´Â °úÁ¤ÀÌ´Ù. CVS ¼¹ö°¡ ¾ÏÈ£¸¦ ¿ä±¸ÇÏ¸é ±×³É ¿£ÅÍ Å°¸¦ ÃÄ ÁÖ¸é ÀÎÁõÀÌ ³¡³ª°í Àб⠱ÇÇÑÀÌ ºÎ¿©µÈ´Ù. ÀÏ´Ü ·Î±×ÀÎÀ» Çѹø ÇÑ ´ÙÀ½ºÎÅÍ´Â »ç¿ëÀÚÀÇ È¨ µð·ºÅ丮¿¡ .cvspass ÆÄÀÏÀÌ »ý±â¸é¼ ÀÎÁõ ÀýÂ÷°¡ »ý·«µÈ´Ù. Áï, ¸Å¹ø Á¢¼ÓÇÒ ¶§¸¶´Ù anonymous ÀÎÁõ °úÁ¤À» °ÅÃÄ¾ß ÇÏ´Â À͸í FTP¿Í´Â ´Þ¸®, CVS¿¡¼´Â Çѹø¸¸ ÀÍ¸í ·Î±×ÀÎÀ» ÇØ¼ .cvspass ÆÄÀÏÀ» »ý¼ºÇÏ°í ³ª¸é ´Ù½Ã cvs login ¸í·ÉÀ¸·Î ÀÎÁõ °úÁ¤À» °ÅÄ¥ Çʿ䰡 ¾ø´Ù.
±× ´ÙÀ½ -d ¿É¼ÇÀº CVS ¼¹ö¿¡¼ Á¦°øÇϰí ÀÖ´Â ·çÆ® µð·ºÅ丮¸¦ ÀǹÌÇÑ´Ù. moniwiki ÇÁ·ÎÁ§Æ®ÀÇ °æ¿ì´Â cvsroot/moniwiki·Î ÁöÁ¤µÇ¾î ÀÖ´Ù. ¾ÕÀÇ pserver´Â CVS ¸í·ÉÀÌ ¼Ò½ºÄڵ带 ´Ù¿î¹ÞÀ¸¸é¼ ¾µ ÇÁ·ÎÅäÄݸíÀÌ¸ç µÚÀÇ anonymous@cvs.kldp.netÀº CVS ·Î±×Àνà »ç¿ëÇÒ °èÁ¤ÀÌ´Ù.
µÎ ¹øÂ° cvs ¸í·ÉÀº ¼Ò½ºÄÚµå ÇÑ Ä«ÇǸ¦ ´Ù¿î¹Þ´Â üũ¾Æ¿ô °úÁ¤À» ½ÇÇàÇÏ°Ô µÈ´Ù. üũ¾Æ¿ô(checkout)ÇÑ ´ÙÀ½ÀÇ moniwki´Â CVS ¼¹ö¿¡¼ ÁöÁ¤ÇØ ³õÀº ÇÁ·ÎÁ§Æ® À̸§À̸ç(¸ðµâÀ̶ó°í ºÎ¸¥´Ù) À̰÷ CVS ¼¹ö¿¡¼´Â moniwki·Î ÁöÁ¤ÇØ µÎ¾ú´Ù. µÎ ¹øÂ° ¸í·ÉÀ» ½ÇÇàÇÏ¸é »ç¿ëÀÚÀÇ ÇöÀç µð·ºÅ丮¿¡ moniwiki¶ó´Â µð·ºÅ丮°¡ »ý¼ºµÇ°í ¼Ò½ºÄÚµå ´Ù¿î·Îµå°¡ ½ÃÀ۵ȴÙ. ¿©±â¿¡, -z3 ¿É¼ÇÀ» ÁÖ¸é Àü¼Û½Ã ¾ÐÃàÀ» »ç¿ëÇϱ⠶§¹®¿¡ Àü¼Û ¼Óµµ°¡ »¡¶óÁø´Ù.
$ cvs -z3 -d:pserver:anonymous@cvs.kldp.net:cvsroot/moniwiki checkout moniwiki
±×·±µ¥ CVS ¼¹ö¿¡ Á¢¼ÓÇÒ ¶§¸¶´Ù -d ¿É¼Ç µÚÀÇ ±ä µð·ºÅ丮 À̸§À» ŸÀÌÇÎÇϱâ´Â ¾Æ¹«·¡µµ ºÒÆíÇÑ °¨ÀÌ ÀÖ´Ù. -d ¿É¼ÇÀ» »ý·«ÇÏ·Á¸é ȯ°æº¯¼ö CVSROOT¿¡ -d ¿É¼ÇÀ» µî·ÏÇØ µÐ´Ù.
$ export CVSROOT=:pserver:anonymous@cvs.kldp.net:/cvsroot/moniwiki
±× ´ÙÀ½ºÎÅÍ´Â ´ÙÀ½ ¸í·ÉÀ¸·Îµµ ÃæºÐÇÏ´Ù.
$ cvs login
$ cvs checkout moniwiki
¼Ò½ºÄڵ带 ¹ÞÀº Áö ½Ã°£ÀÌ ¾î´À Á¤µµ Áö³µ´Ù¸é ±×µ¿¾È CVS ¼¹öÀÇ ³»¿ëÀÌ »õ·Ó°Ô ¾÷µ¥ÀÌÆ®µÇ¾î ÀÖÀ» ¼öµµ ÀÖ´Ù. ¹Ù²ï ºÎºÐÀ» ´Ù¿î¹ÞÀ¸·Á¸é CVS¿¡¼ update ¸í·ÉÀ» »ç¿ëÇÑ´Ù.
$ cvs update -dP
¿©±â¼ -P ¿É¼ÇÀº Prune ¿É¼ÇÀ¸·Î ºñ¾îÀÖ´Â µð·ºÅ丮¸¦ ÀÚµ¿À¸·Î »èÁ¦ÇØ ÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù. -d ¿É¼ÇÀº ±×µ¿¾È ¼¹ö ÂÊ¿¡ »õ·Î ¸¸µé¾îÁø µð·ºÅ丮°¡ ÀÖÀ¸¸é ´Ù¿î ¹ÞÀº ÀÌÂÊ¿¡µµ µ¿ÀÏÇÑ µð·ºÅ丮¸¦ ¸¸µé¾î ÁØ´Ù.
CVS ¼¹ö ¿øº»¿¡¼ diff·Î ÆÐÄ¡ ÆÄÀÏ ¸¸µé±â
ÀÌÁ¦ ±âº»ÀûÀÎ CVS ¼¹ö¿¡¼ ¼Ò½ºÄÚµå ´Ù¿î·Îµå ¹æ¹ýÀ» ¾Ë¾ÒÀ¸´Ï Á÷Á¢ CVS ¼¹öÀÇ ¼Ò½ºÄڵ带 ÀÌ¿ëÇØ¼ ÆÐÄ¡ ÆÄÀÏÀ» ¸¸µé¾î º¸ÀÚ. CVS´Â diff ¸í·ÉÀ» ¾Æ¿¹ ÀÚüÀûÀ¸·Î ³»ÀåÇϰí ÀÖ´Ù. Á¶±Ý Àü ´Ù¿î¹ÞÀº moniwikiÀÇ ¼Ò½ºÄڵ带 ¿¹·Î µé¾îº¸ÀÚ. ¿©±â¼, ÇÊÀÚ´Â monisetup.php ÆÄÀÏ¿¡ °£´ÜÈ÷ /* testing one two three */¶ó´Â ÁÖ¼®¹®À» Çϳª »ðÀÔÇß´Ù.
$ cd moniwiki
$ ls
COPYING doc secure.sh
CVS imgs theme
INSTALL index.html tools
README lib wiki.php
THANKS locale wikihttpd.php
applets monisetup.bat wikilib.php
config.php.default monisetup.php wikismiley.php
css monisetup.sh
data plugin
$ cvs diff -u -p monisetup.php
Index: monisetup.php
===================================================================
RCS file: /cvsroot/moniwiki/moniwiki/monisetup.php,v
retrieving revision 1.11
diff -u -p -r1.11 monisetup.php
--- monisetup.php 3 Jan 2004 14:26:50 -0000 1.11
+++ monisetup.php 3 Aug 2004 09:14:21 -0000
@@ -486,4 +486,5 @@ if ($_SERVER['REQUEST_METHOD']!="POST")
}
+/* testing one two three */
?>
cvs diff ¸í·ÉÀÌ ¸¶Ä¡ ·ÎÄÿ¡¼ monisetup.php ÆÄÀÏ¿¡ diff ¸í·ÉÀ» ½ÇÇàÇÑ °Í°ú °°Àº °á°ú°¡ ³ª¿ÔÀ½À» ¾Ë ¼ö ÀÖ´Ù. cvs diff ¸í·É µÚÀÇ -u ¿É¼ÇÀº diff¿Í ¸¶Âù°¡Áö·Î unified formatÀ» ÀǹÌÇϸç -p ¿É¼ÇÀº cvs diff ÀÇ Ãâ·ÂÀ» Ç¥ÁØ Ãâ·Â(standard output)À¸·Î º¸³»¶ó´Â ÀǹÌÀÌ´Ù. µð·ºÅ丮 ¾ÈÀÇ ¸ðµç ÆÄÀÏ¿¡ ´ëÇØ diff ¸í·ÉÀ¸·Î ºñ±³¸¦ ÇÏ·Á¸é ´ÙÀ½°ú °°Àº ¹æ¹ýÀ» »ç¿ëÇÑ´Ù.
$ cvs -Q diff -u -p
Index: monisetup.php
===================================================================
RCS file: /cvsroot/moniwiki/moniwiki/monisetup.php,v
retrieving revision 1.11
diff -u -p -r1.11 monisetup.php
--- monisetup.php 3 Jan 2004 14:26:50 -0000 1.11
+++ monisetup.php 3 Aug 2004 09:19:27 -0000
@@ -486,4 +486,5 @@ if ($_SERVER['REQUEST_METHOD']!="POST")
}
+/* testing one two three */
?>
Index: css/log.css
===================================================================
RCS file: /cvsroot/moniwiki/moniwiki/css/log.css,v
retrieving revision 1.1
diff -u -p -r1.1 log.css
--- css/log.css 11 Feb 2004 08:48:27 -0000 1.1
+++ css/log.css 3 Aug 2004 09:19:27 -0000
@@ -1,4 +1,5 @@
/* MoniWiki CSS 2003/11/01 by wkpark */
+/* another testing comment */
body {
font-family:Georgia,Verdana,Lucida,sans-serif;font-size:12px;
background-color:#FFFFFF;
¿©±â¼´Â monisetup.php ÆÄÀϰú css/log.css ÆÄÀÏ¿¡ ¼öÁ¤µÈ ºÎºÐÀÌ ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. cvs diff ¸í·É¿¡¼ -Q ¿É¼ÇÀº Quiet ¿É¼ÇÀ¸·Î diff Ãâ·Â ÀÌ¿ÜÀÇ ´Ù¸¥ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÏÁö ¾Êµµ·Ï ÇØ ÁØ´Ù. ±×·±µ¥ ¿©±â¼ Çϳª Àǹ®ÀÌ µé ¼ö ÀÖ´Ù. ºÐ¸íÈ÷ CVS¿¡¼´Â cvs¸¦ ÀÌ¿ëÇØ¼ Á÷Á¢ ¼Ò½ºÄڵ忡 ¼öÁ¤À» °¡ÇÒ ¼ö ÀÖÀ» °ÍÀε¥ ¿©±â¿¡¼ ¿Ö ±»ÀÌ ±¸½Ä diff¸¦ ÀÌ¿ëÇÑ ¹æ¹ýÀ» ¶Ç »ç¿ëÇϰí ÀÖ´Â °ÍÀ»±î?
±× ÀÌÀ¯´Â ¾Õ¿¡¼µµ Àá±ñ ¾ð±ÞÇßµíÀÌ, CVS ¼¹öÀÇ ³»¿ëÀ» ¼öÁ¤ÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ÀÖ´Â °³¹ßÀÚ´Â ¼Ò¼öÀ̱⠶§¹®ÀÌ´Ù. ±×¸®°í ÀÚºñ·Î¿î µ¶ÀçÀÚ¶ó´Â ¿ë¾î¿¡¼ ¾Ë ¼ö ÀÖµíÀÌ Á¦ÃâµÈ ÆÐÄ¡¸¦ ¹Þ¾ÆµéÀÏÁö ¾Æ´ÒÁöÀÇ ¿©ºÎ´Â °ü½ÀÀûÀ¸·Î º¸Åë ±×ÂÊ ÇÁ·ÎÁ§Æ® ¸®´õµéÀÇ ¸òÀÌ µÈ´Ù.
µû¶ó¼ CVS ¼¹ö¿¡ Àбâ Àü¿ëÀÇ ±ÇÇѸ¸À» °®°í ÀÖ´Â ÀÏ¹Ý ¿ÀǼҽº ÇÁ·ÎÁ§Æ® Âü°¡ÀÚµéÀº À̸ÞÀÏÀ̳ª ȤÀº ¸ÞÀϸµ ¸®½ºÆ®¿¡ diff¸¦ ÀÌ¿ëÇØ¼ ÆÐÄ¡ ÆÄÀÏÀ» Æ÷½ºÆÃÇÏ´Â °ÍÀÌ ¿ÀǼҽº ÇÁ·ÎÁ§Æ®¿¡ Âü°¡ÇÏ´Â °¡Àå ¹«³ÇÑ ¹æ¹ýÀÌ´Ù. ÀϹÝÀûÀ¸·Î ÇÁ·ÎÁ§Æ®ÀÇ Âü°¡ÀÚ°¡ Áö³ªÄ¡°Ô ¸¹Áö ¾ÊÀº °æ¿ì¸¦ Á¦¿ÜÇϰí´Â ¿ÀǼҽº ÇÁ·ÎÁ§Æ®¿¡ ¿Ã¶ó¿À´Â ÆÐÄ¡´Â ¾Æ¹«¸® »ç¼ÒÇÑ °ÍÀÌ¶óµµ ½±°Ô CVS ¼¹öÀÇ ¿øº» ¼Ò½ºÄڵ忡(repository¶ó°í ºÎ¸¥´Ù) ¹Ý¿µ µÈ´Ù.
µû¶ó¼ ÀÏ¹Ý °³¹ßÀÚÀÇ ÀÔÀå¿¡¼´Â ÇÁ·ÎÁ§Æ® ¸®´õ³ª ¸ÞÀÎ °³¹ßÀÚ°¡ µÇ±â Àü¿¡´Â CVS ¼¹ö¿¡¼ ¾²±â ±ÇÇÑÀÌ ±×´ÙÁö ÇÊ¿äÇÏÁö´Â ¾Ê´Ù. ÀÌÁ¦ °£´ÜÇÏ°Ô CVS ¼¹ö¿¡¼ ÀÚÁÖ ¾²ÀÌ´Â ±âº»ÀûÀÎ °³³ä°ú ¿ë¾î¿¡ ´ëÇØ ¾Ë¾Æº¸±â·Î ÇÏÀÚ.
CVSÀÇ °³³ä°ú ¿©·¯ ¿ë¾î
CVS ¸ðµ¨, copy-moodify-merge model
CVS´Â ÀÌÀü¿¡ ¸¹ÀÌ ¾²ÀÌ´ø RCS(Revision Control System)°ú´Â ´Þ¸® lock-modify-unlockÀÌ ¾Æ´Ñ copy-modify-merge ¸ðµ¨À» »ç¿ëÇÑ´Ù. ¿©·¯ ¸íÀÇ °³¹ßÀÚ°¡ ÇϳªÀÇ ¼Ò½ºÄÚµå Æ®¸®¿¡¼ °³¹ß ÀÛ¾÷À» ÇÒ ¶§ °¡Àå Å« ¹®Á¦´Â °°Àº ºÎºÐÀÇ ¼Ò½ºÄڵ忡 µÎ ¸í ÀÌ»óÀÇ °³¹ßÀÚ°¡ ¼·Î ´Ù¸¥ ¼Ò½ºÄڵ带 ÀÛ¼ºÇϰí ÀÖÀ» ¶§ ¹ß»ýÇÑ´Ù. À̰ÍÀ» CVS¿¡¼´Â conflictÀÌ ¹ß»ýÇß´Ù°í ÇÑ´Ù.
RCSÀÇ lock-modify-unlock Á¢±Ù¹æ½ÄÀº ÀÌ·¯ÇÑ conflict¸¦ Çѹø¿¡ µÎ ¸í ÀÌ»óÀÇ °³¹ßÀÚ°¡ °°Àº ¼Ò½ºÄÚµå ºÎºÐ¿¡ Á¢±ÙÇÒ ¼ö ¾øµµ·Ï ÇØ¼ conflict »óȲÀ» ¹Ì¿¬¿¡ ¹æÁöÇÑ´Ù. ÇÏÁö¸¸ CVS¿¡¼´Â ÀÌ·¯ÇÑ conflict »óȲÀÌ ¹ß»ýÇÏ´Â °ÍÀ» Çã¿ëÇÑ´Ù. ±×·¸´Ù¸é CVS¿¡¼´Â ÀÌ·± ¼Ò½ºÄÚµå conflict »óȲÀÌ ¹ß»ýÇÏ¸é ¾î¶»°Ô ´ëóÇÒ±î?
Àç¹ÌÀÖ°Ôµµ CVS¿¡¼´Â ÀÌ·± »óȲ¿¡¼ ¾Æ¹« Àϵµ ÇÏÁö ¾Ê´Â´Ù. ´Ù¸¸, CVS´Â ¾î´À ºÎºÐ¿¡¼ ¼Ò½ºÄÚµå conflict°¡ ¹ß»ýÇß´ÂÁö, ±×¸®°í ¾î¶² »ç¶÷ÀÌ conflict¿¡ °ü°èµÇ¾î ÀÖ´ÂÁö¸¸ Á¤È®ÇÏ°Ô ¾Ë·Á ÁØ´Ù. µû¶ó¼ ¼Ò½ºÄÚµåÀÇ conflict ¹®Á¦¸¦ ÇØ°áÇÏ´Â °ÍÀº ±â°è°¡ ¾Æ´Ñ »ç¶÷ÀÇ ¸òÀÌ µÈ´Ù.
lock-modify-unlock ¸ðµ¨Àº ÇÁ·ÎÁ§Æ®ÀÇ Àüü °³¹ßÀÚ ¼ýÀÚ°¡ ¼Ò¼öÀÌ°í °¢°¢ÀÇ °³¹ßÀÚµéÀÌ ´Ù¸¥ °³¹ßÀÚµéÀÌ ÇöÀç ¾î¶² ÀÛ¾÷À» Çϰí ÀÖ´ÂÁö ½±°Ô ¾Ë ¼ö ÀÖ´Â »óȲ¿¡ À¯¸®ÇÏ´Ù. ±×·¯³ª °³¹ßÀÚÀÇ ¼ýÀÚ°¡ ¸¹¾ÆÁö¸é ÀÌ¹Ì Àá±ÝÀÌ °É·Á ÀÖ´Â ÆÄÀÏ¿¡´Â ´Ù¸¥ °³¹ßÀÚµéÀÌ Á¢±ÙÇÒ ¼ö ¾ø±â ¶§¹®¿¡ ÀüüÀûÀÎ ¾÷µ¥ÀÌÆ®°¡ ´Ê¾îÁö´Â ¹®Á¦°¡ ¹ß»ýÇÏ°Ô µÇ°í Á» ´õ À¯¿¬ÇÑ È¯°æÀ» Á¦°øÇϱâ À§ÇØ CVS°¡ µµÀԵDZ⿡ À̸£·¶´Ù. µû¶ó¼ copy-modify-merge ¸ðµ¨ÀÇ CVS¸¦ »ç¿ëÇÏ´Â °³¹ßÀÚ´Â ±âº»ÀûÀ¸·Î ´ÙÀ½°ú °°Àº °úÁ¤À» °ÅÄ¡¸ç °³¹ß ÀÛ¾÷À» ÁøÇàÇØ ³ª°¡°Ô µÈ´Ù.
[1] °³¹ßÀÚ´Â CVS ¼¹ö·ÎºÎÅÍ ¼Ò½ºÄÚµå Ä«ÇǸ¦ ´Ù¿î·Îµå(check-out)ÇÑ ´ÙÀ½
[2] ¼Ò½ºÄڵ带 ¼öÁ¤Çϰí
[3] ¿Ï·áµÈ ÀÛ¾÷Àº ´Ù½Ã CVS ¼¹ö·Î ¿Ã·ÁÁØ´Ù(check-in, commit)
¿©±â¼ conflictÀÇ ¹ß»ý ¿©ºÎ´Â commit ÀÛ¾÷ ´Ü°è¿¡¼ ¾Ë ¼ö ÀÖ´Ù. ±×¸®°í Á¶±Ý Àü¿¡ Àá±ñ »ìÆìº¸¾ÒµíÀÌ ÇöÀç °³¹ßÀÚÀÇ ÄÄÇ»ÅÍÀÇ ¼Ò½ºÄڵ带 cvs ¼¹ö Âʰú °¡´ÉÇÑ ÇÑ µ¿ÀÏÇÏ°Ô À¯ÁöÇÏ·Á¸é update¸¦ ÀÚÁÖ ÇØ ÁÖ´Â °ÍÀÌ ÁÁ´Ù.
CVS¿Í °ü·ÃµÈ ¿ë¾î
CVS¿Í °ü·ÃµÈ ¿ë¾î´Â ÅëÀÏµÈ ¹ø¿ªÀÌ ¾ÆÁ÷ Á¸ÀçÇÏÁö ¾Ê´Â °Í °°¾Æ ¿ø¹® ±×´ë·Î ½Æ°í ¿©±â¿¡ ¼³¸íÀ» µ¡ºÙÀ̵µ·Ï ÇϰڴÙ.
¡ß repository : CVS ¼¹ö¿¡ µé¾î°¡ ÀÖ´Â ¹Ù·Î ±× ¿øº»(master copy) ¼Ò½ºÄڵ带 ÀǹÌÇÑ´Ù. ³ªÁß¿¡ ÃÖÁ¾ Ãâ½Ã°¡ µÇ´Â ¼Ò½ºÄڵ尡 ¹Ù·Î ÀÌ repositoryÀ̸ç repository´Â ±×µ¿¾È ¹öÀü¾÷µÇ¾î ¿Â Á¤º¸¸¦ ¸ðµÎ Æ÷ÇÔÇϰí ÀÖ´Ù. cvs respositoryÀÇ °³¼ö´Â Çϳª°¡ µÈ´Ù.
¡ß working copy : °¢°¢ÀÇ °³¹ßÀÚ°¡ ÀÛ¾÷À» À§ÇØ cvs repository¿¡¼ º¹»çÇØ °®°í ³ª°£(check-out) ¼Ò½ºÄڵ尡 working copyÀÌ´Ù. µû¶ó¼ working copy´Â °³¹ßÀÚÀÇ ¼ö¸¸Å Á¸ÀçÇÑ´Ù°í º¼ ¼ö ÀÖ´Ù. °³¹ßÀÚ´Â ÀÌ working copy¿¡¼ ¼Ò½ºÄÚµå ¼öÁ¤ ÀÛ¾÷À» ÇÑ ´ÙÀ½ ³ªÁß¿¡ check-in ȤÀº commit ´Ü°è¸¦ °ÅÃÄ ¿øº» cvs repository¿¡ ¼öÁ¤À» °¡ÇÏ°Ô µÈ´Ù.
¡ß check-out : °³¹ßÀÚ°¡ ÀÚ½ÅÀÌ ÀÛ¾÷ÇÒ working copy¸¦ CVS ¼¹ö¿¡¼ ÇÑ Ä«ÇÇ º¹»çÇØ °¡´Â °ÍÀ» check-outÀ̶ó°í ÇÑ´Ù.
¡ß update : update´Â check-out°ú ºñ½ÁÇÏ°Ô cvs repository¿¡¼ ¿øº» ¼ÒÇÁÆ®¿þ¾î¸¦ ÇÑ Ä«ÇÇ °¡Á®¿À´Â ¿ªÇÒÀ» ÇÏÁö¸¸, update´Â ´Ü¾îÀÇ ¿ø·¡ ¶æ ±×´ë·Î ¼öÁ¤µÈ ºÎºÐ¸¸ °¡Á®¿Í¼ ÇöÀç °³¹ßÀÚ°¡ ¾²°í ÀÖ´Â working copy°¡ Ç×»ó ÃÖ½ÅÀÇ °»½Åº»ÀÌ µÉ ¼ö ÀÖµµ·Ï ÇØ ÁØ´Ù. ÀϹÝÀûÀ¸·Î, °³¹ßÀÚ´Â Çѹø working copy¸¦ check-out ÇÑ µÚ¿¡´Â ÃÖ½ÅÀÇ ¼Ò½ºÄڵ带 À¯ÁöÇϱâ À§ÇØ ÀÌ update ¸í·ÉÀ» ÁÖ·Î ¾²°Ô µÈ´Ù.
¡ß check-in ȤÀº commit : ¿©±â¼ Àá±ñ Á¶½ÉÇØ¼ ºÁ¾ß ÇÒ °ÍÀÌ update¿Í check-inÀÇ °ü°èÀÌ´Ù. ¾óÇÍ º¸±â¿¡´Â CVS¿¡¼ check-out°ú check-inÀÌ ¹Ý´ëÀÇ °³³äÀÌ µÇ¾î¾ß ÇÒ °Í °°Àºµ¥ ½Ç»ó check-inÀÇ ¹Ý´ë °³³äÀº updateÀÌ´Ù. check-inÀº ³»°¡ ÀÛ¼ºÇÑ ¼Ò½ºÄڵ带 repository¿¡ º´ÇÕ½ÃÄѼ ´Ù¸¥ °³¹ßÀڵ鵵 ³»°¡ ÀÛ¼ºÇÑ ¼öÁ¤ ºÎºÐÀ» º¼ ¼ö ÀÖ°Ô ÇØ ÁÖ´Â ¼ÒÀ§ publish ÀÛ¾÷À̱⠶§¹®ÀÌ´Ù. µû¶ó¼ ±× ¹Ý´ë °³³äÀº ³»°¡ ´Ù¸¥ »ç¶÷µéÀÌ ÀÛ¼ºÇÑ ¼Ò½ºÄÚµå ¼öÁ¤º»À» ³ªÀÇ working copy¿¡ ¹Ý¿µ½ÃŰ´Â °ÍÀε¥ ÀÌ ÀÛ¾÷ÀÌ update °úÁ¤ÀÌ´Ù. µû¶ó¼ check-in °úÁ¤Àº ¿ÀÈ÷·Á commitÀ̶ó´Â ´Ü¾î¸¦ ½á¼ Ç¥ÇöÇÏ´Â °ÍÀÌ È¥µ¿À» ¹Ì¸® ¹æÁöÇÏ´Â È¿°ú°¡ ÀÖÁö ¾Ê³ª ½Í´Ù. Âü°í·Î commit ±ÇÇÑÀº Àá½Ã ¾ð±ÞÇßµíÀÌ ¼Ò¼öÀÇ ÁÖ¿ä ÇÁ·ÎÁ§Æ® ¸®´õµéÀÌ °®°Ô µÇ´Â °æ¿ì°¡ ¸¹´Ù. ¾î¶² ¿ÀǼҽº ÇÁ·ÎÁ§Æ®¿¡¼ Ä¿¹ÌÅÍÀÇ ¿ªÇÒÀ» ´ã´çÇÑ´Ù´Â °ÍÀº ±× »ç¶÷ÀÇ ±â¿©µµ°¡ ³ô°í ±×¸¸Å ³ôÀº À§Ä¡¸¦ ¹èÁ¤¹Þ¾Ò´Ù´Â ¶æÀÌ µÈ´Ù.
update¿Í commit¿¡ °üÇØ¼ ¶Ç Çϳª ¾Ë¾Æ³õÀ» »ó½ÄÀº update¿Í commit ÀÛ¾÷Àº °¡´ÉÇϸé ÀÚÁÖ ÇØ ÁÖ´Â °ÍÀÌ ÁÁ´Ù´Â »ç½ÇÀÌ´Ù. ´Ù¸¥ »ç¶÷µéÀÌ ³»°¡ ¾î¶² ÀÛ¾÷À» ÇÏ´ÂÁö Àß ¾Ë°í, ³ª ¿ª½Ã ´Ù¸¥ »ç¶÷µéÀÌ ¾î¶² ÀÛ¾÷À» Çϰí ÀÖ´ÂÁö Àß ¾Æ´Â °ÍÀÌ È¿À²ÀûÀÎ Çù¾÷(collaboration)ÀÇ ±âÃʰ¡ µÊÀº µÎ¸»ÇÒ Çʿ䰡 ¾ø´Ù. Ãß°¡ÀûÀ¸·Î CVSÀÇ commit ¸í·É »ç¿ë ¿¹´Â ´ÙÀ½°ú °°´Ù. -m ¿É¼Ç µÚ¿¡´Â À̹ø commit¿¡ ´ëÇÑ °£·«ÇÑ ¼³¸íÀ̳ª ÁÖ¼®¹®ÀÌ µû¶ó¿Â´Ù.
$ cvs commit -m "added additioinal messages" hello2.c # ÆÄÀÏ Çϳª commit ¿¹
$ pwd
/home/foobar/projects/src1
$ cvs commit -m "removed redundant declarations" # Àüü µð·ºÅ丮 commit ¿¹
¡ß log message : ¼öÁ¤µÈ ¼Ò½ºÄڵ带 commitÇÒ ¶§ ÀÌ ¼Ò½ºÄڵ尡 ¾î¶² ¿ªÇÒÀ» ÇÏ´ÂÁö, ¾î¶² ºÎºÐÀÌ ¹Ù²î¾ú´ÂÁö µîÀ» ±â¼úÇÏ´Â ÁÖ¼®¹® ¿ªÇÒÀÇ ¸Þ½ÃÁöÀÌ´Ù. ÀÌ°Í ¿ª½Ã ÄÚµù½Ã ÁÖ¼®¹® ÀÛ¼º¿¡ ½Å°æÀ» ¸¹ÀÌ ¾²´Â °Íó·³ ¼öÁ¤µÈ ¼Ò½ºÄڵ带 commitÇÒ ¶§ ¸¶´Ù °£°áÇϰí Á¤È®ÇÏ°Ô ½á ÁÖ´Â °ÍÀÌ ÁÁ´Ù.
¿ÀǼҽº ÇÁ·ÎÁ§Æ®¿¡ ¸¹Àº Âü¿©¸¦
Áö±Ý±îÁö ¿©·¯ ¸íÀÇ °³¹ßÀÚ, ƯÈ÷ ¿ÀǼҽº ÇÁ·ÎÁ§Æ®¿¡ Âü°¡ÇÒ ¶§ ÇʼöÀûÀ¸·Î ¾²ÀÌ´Â À¯Æ¿¸®Æ¼ÀÎ diff¿Í patch, ±×¸®°í CVSÀÇ ±âº» »ç¿ë¹ý¿¡ ´ëÇØ¼ ¾Ë¾Æº¸¾Ò´Ù. ÃÖ±Ù µé¾î¼´Â ¹®¼ ÀÛ¼ºµµ ¿ÀǼҽº¿Í ºñ½ÁÇÏ°Ô ¿©·¯ »ç¶÷ÀÌ µ¿½Ã¿¡ °°Àº ÆäÀÌÁö¸¦ °íÃÄ ³ª°¡´Â ¹æ½ÄÀÌ Á¤ÂøµÇ¾î °¡°í ÀÖ´Ù. À§Å°(wiki)ÀÇ »ç¿ëÀÌ ´Ã¾î³ª°í ÀÖ´Â °ÍÀÌ ¹Ù·Î ±×°ÍÀε¥ À§Å°´Â ³»ºÎÀûÀ¸·Î RCS¸¦ »ç¿ëÇØ¼ ¹®¼ÀÇ ¹öÀü ÄÁÆ®·ÑÀ» ÇØ ³ª°¡´Â °æ¿ì°¡ ¸¹´Ù. Áï, À§Å°¸¦ ÅëÇÑ ¹®¼ ÀÛ¼º ¹æ½Äµµ CVS¸¦ ÀÌ¿ëÇÑ ¿ÀǼҽº ¼ÒÇÁÆ®¿þ¾î °³¹ß°ú ±Ùº»ÀûÀ¸·Î ´Ù¸£Áö ¾ÊÀº °ÍÀÌ´Ù.
¾Õ¿¡¼µµ °Á¶ÇßµíÀÌ, ¿ÀǼҽº ÇÁ·ÎÁ§Æ®¿¡ Âü¿©Çϱâ À§Çؼ °¡Àå Áß¿äÇÑ °ÍÀº diff¿Í patchÀÇ »ç¿ë¹ýÀ» ¾Æ´Â °ÍÀÌ´Ù. À졧 °£´ÜÇØ º¸ÀÌ´Â ÀÌ À¯Æ¿¸®Æ¼µéÀÌ À̸ÞÀÏ, ±×¸®°í À̸ÞÀÏÀÇ È®ÀåÆÇÀÎ ¸ÞÀϸµ ¸®½ºÆ®¿Í Ãʱâ À¯Áî³Ý ´º½º±×·ì°ú °áÇÕµÇ¸é¼ ÀÎÅͳݻ󿡼 Áß¿ä ¿ÀǼҽº ¼ÒÇÁÆ®¿þ¾î °³¹ßÀÇ ¹®À» ¿¾îÁ¥Èù ÁÖ¿ªµéÀÌ´Ù.
¶ÇÇÑ, ÀÌ·¸°Ô ¿ÀǼҽº ÇÁ·ÎÁ§Æ®¿¡ Âü¿©ÇÏ´Â °ÍÀÌ »ý°¢¸¸Å ¾î·ÆÁö ¾Ê´Ù´Â Á¡À» ÀÏ¹Ý °³¹ßÀÚµéÀÌ ÀÎÁöÇÏ´Â °Íµµ Áß¿äÇÏ´Ù°í ÇϰڴÙ. ÇÊÀÚ ¿ª½Ã CVSÀÇ »ç¿ë¹ýÀ» ¾Ë±â Àü¿¡´Â ³»°¡ CVSÀÇ »ç¿ë¹ýÀ» ¸ð¸£´Âµ¥ ¿ÀǼҽº ÇÁ·ÎÁ§Æ® Âü¿©°¡ °¡´ÉÇϰڴ°¡¶ó´Â ¾µ¸ð¾ø´Â »ý°¢À» Çß´ø ÀûÀÌ ÀÖ´Ù. ÇÊÀÚÀÇ °æ¿ì´Â ½ÇÁ¦ ¶³¾îÁö´Â ÄÚµù ´É·ÂÀÌ ¿ÀǼҽº ÇÁ·ÎÁ§Æ® Âü¿©¿¡ À庮ÀÌ µÇ°í Àִµ¥ ÀÌ ±ÛÀ» Àд ¸¹Àº µ¶ÀÚµéÀÌ À̹ø ¿¬À縦 °è±â·Î ¿ÀǼҽº ÇÁ·ÎÁ§Æ®¿¡ Á» ´õ ¸¹ÀÌ Âü¿©ÇØ º¸´Â ±âȸ¸¦ °¡Áú ¼ö ÀÖÀ¸¸é ÁÁ°Ú´Ù´Â °ÍÀÌ ÇÊÀÚÀÇ ¹Ù¶÷ÀÌ´Ù. ´Ü ÇÑ ÁÙÀÇ diff·Î ¸¸µç ÆÐÄ¡¶óµµ ¿ÀǼҽº °³¹ßÀÚ¿¡°Ô´Â ¸¹Àº µµ¿òÀÌ µÇ¸ç ¶ÇÇÑ °Ý·ÁÀÇ ÀÀ¿øÀÌ µÈ´Ù. @
* ÀÌ ±â»ç´Â ZDNet KoreaÀÇ ÀÚ¸ÅÁöÀÎ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î¿¡ °ÔÀçµÈ ³»¿ëÀÔ´Ï´Ù.