///////////////////////////////////////////////////////////////////////////
//
//
// ÀúÀå¼Ò ¹× µð·ºÅ丮 »ý¼º ¹× ÃʱâÈ
// ´Ù¿î·Îµå : http://www.cvshome.org
//
//
///////////////////////////////////////////////////////////////////////////
mkdir /home/cvs
cvs =d /home/cvs init
adduser cvs
chown root.cvs /home/cvs -R
chmod 770 /home/cvs -R
// À¯Àú ÆÐ½º¿öµå ¼³Á¤
htpasswd -nb [ID] [PASS]
// cvs server start
/etc/xinetd.d/cvspserver
/////////////////////////////////////////////////////////////////////////////
//
//
// cvs¼¹ö¸¦ ½ÇÇà ½Ã۱â À§Çؼ ¾Æ·¡ ÆÄÀÏÀ» »ý¼º
//
//
/////////////////////////////////////////////////////////////////////////////
// ÆÄÀϸí
/etc/xinetd.d/cvspserver
// ³»¿ë
service cvspserver
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = cvs
server = /usr/bin/cvs
server_args = --allow-root=/home/cvs pserver
}
// ÆÄÀÏ »ý¼ºÈÄ ÁøÇà ÀÛ¾÷
service xinetd restart
netstat -an grep 2401
////////////////////////////////////////////////////////////////////////
//
//
// cvs ·Î±×ÀÎ Çϱâ
//
//
////////////////////////////////////////////////////////////////////////
cvs -d:pserver:kurome@localhost:2401/home/cvs login
:[Á¢¼Ó¹æ¹ý]:[cvs»ç¿ëÀÚID]@[ÁÖ¼Ò:Æ÷Æ®/°æ·Î]
¸Ç³¯ Çϱ⠱ÍÂú¾Æ¼¸® ´Ù¸¥ ¹æ¹ýÀÌ Á¸ÀçÇϴµ¥
~/.bash_profile
¿¡´Ù°¡ ¾Æ·¡ ³»¿ëÀ» Ãß°¡ÇÑ´Ù.
export CVSROOT=:pserver:kurome@localhost:/home/cvs
Ãß°¡ÇѵÚ
source ~/.bash_profile
À» ¸í·ÉÇÑ´Ù.
¿©±â¼ pserver ´ë½Å ext¸¦ »ç¿ëÇÏ°Ô µÇ¸é ½Ã½ºÅÛ °èÁ¤À» ÀÌ¿ëÇÑ rsh ³ª ssh·Î Á¢¼Ó ÇÏ´Â °ÍÀ» ÀǹÌÇÑ´Ù.
////////////////////////////////////////////////////////////////////////
//
//
// cvs ÆÄÀÏ µî·ÏÇϱâ
//
//
////////////////////////////////////////////////////////////////////////
cvs import -m
"diary project start " diary project start
////////////////////////////////////////////////////////////////////////
//
//
// cvs ÇÁ·ÎÁ§Æ® ÆÄÀÏ ¹Þ¾Æ ¿À±â
//
//
////////////////////////////////////////////////////////////////////////
cvs checkout diary
³ª
cvs co diary
////////////////////////////////////////////////////////////////////////
//
//
// cvs ¼öÁ¤ÇÑ ³»¿ëÀ» ÀúÀå¼Ò µð·ºÅ丮¿¡ ¹Ý¿µ
//
//
////////////////////////////////////////////////////////////////////////
cvs commit -m
"main.c file comment append" main.c
////////////////////////////////////////////////////////////////////////
//
//
// cvs ¼öÁ¤ÇÑ ÆÄÀÏÀÌ ¸¹Àºµ¥ ÀÏÀÏÈ÷ ¼öÁ¤Çϱ⠰ï¶õÇÒ ¶§ ÀÌ¿ë
//
//
////////////////////////////////////////////////////////////////////////
cvs ci
////////////////////////////////////////////////////////////////////////
//
//
// cvs ÇöÀç ÀÛ¾÷ µð·ºÅ丮¿¡ ÃֽŠ¼Ò½º ¹Ý¿µÇϱâ
//
//
////////////////////////////////////////////////////////////////////////
cvs update
³ª
cvs up
////////////////////////////////////////////////////////////////////////
//
//
// cvs ÆÄÀϰú µð·ºÅ丮 Ãß°¡ ¹× »èÁ¦
//
//
////////////////////////////////////////////////////////////////////////
cvs add newfile.c
// ÆÄÀÏ Ãß°¡
////////////////////////////////////////////////////////////////////////
//
//
// cvs µð·ºÅ丮 Æ®¸®¸¦ Ãß°¡ÇÏ´Â ½ºÅ©¸³Æ® ÆÄÀÏ
//
//
////////////////////////////////////////////////////////////////////////
#!/usr/bin/python
# vi: set ts=4 sts=4 sts=4 sw=4 : #
import os
import sys
import getopt
import glob
def read_dir(args, dirname, filenames) :
if not dirname.endswith(
"CVS") :
if dirname.endswith(
"/") :
dirname = dirname[ 0:dirname.rindex(
"/")]
os.system(
"cvs add " + dirname)
for f in filenames :
if os.path.isfile(dirname +
"/" + f) :
os.system(
"cvs add " + dirname + "/" + f)
################ main start ###############
if len(sys.argv) > 1:
options, args = getopt.getopt(sys.argv[1:],
"t:")
for op, var in options:
if op ==
"-t" :
os.path.walk(var, read_dir, [] )
os.system(
"cvs ci -m \"append directories\"")
À§ ½ºÅ©¸³Æ®¸¦ cvsadd.py ·Î ÀÛ¼ºÇϰí chmod 755 /usr/local/cvsadd.py ¸í·ÉÀ¸·Î ½ÇÇà ±ÇÇÑ
À» ÁØ´Ù. ±×¸®°í newdir µð·ºÅ丮ÀÇ »óÀ§ µð·ºÅ丮¿¡¼ ¾Æ·¡¿Í °°ÀÌ ¸í·ÉÀ» ³»¸®¸é newdir µð·º
Å丮 ÀÌÇÏ ¸ðµç ÆÄÀϰú µð·ºÅ丮°¡ CVS ¼¹ö¿¡ Ãß°¡µÈ´Ù.
cvsadd.py -t newdir
////////////////////////////////////////////////////////////////////////
//
//
// cvs µð·ºÅ丮ÀÇ »èÁ¦
//
//
////////////////////////////////////////////////////////////////////////
rm -rf newfile.c
cvs remove newfile.c
cvs ci -m
"newfile.c ÆÄÀÏ Á¦°Å"
////////////////////////////////////////////////////////////////////////
//
//
// cvs ÇöÀç ¹öÀü È®ÀÎ
//
//
////////////////////////////////////////////////////////////////////////
cvs status newfile.c
////////////////////////////////////////////////////////////////////////
//
//
// cvs ÀÌÀü ¹öÀüÀ¸·Î º¹±Í
//
//
////////////////////////////////////////////////////////////////////////
cvs up -r 1.5 -p newfile.c > newfile.c
ÀÌ°Ç ÀϽÃÀûÀº º¹±ÍÀÌ°í ¿ÏÀüÈ÷ º¹±Í Çϱâ À§Çؼ´Â
cvs add newfile.c ¸í·ÉÀ» »ç¿ëÇÏ¿© ÆÄÀÏÀ» Ãß°¡ ÇØ¾ß ÇÑ´Ù.
cvs up -j 1.6 -j 1.5 newfile.c
±âŸ > À̹ÌÁö¿Í °°Àº ¹ÙÀ̳ʸ® ÆÄÀÏÀÇ °æ¿ì´Â -kb ¿É¼ÇÀ» ÁÖ¾î ¹ÙÀ̳ʸ®
ÆÄÀÏ À̶ó´Â °ÍÀ» ¾Ë·Á¾ß ÇÑ´Ù.
cvs add -kb image.jpg
±âŸ > °£È¤ ·Ñ¹é(Rollback)À» ÇÏ°í ·Ñ¹éÇÑ ÆÄÀÏÀ» ¼öÁ¤ÇÑ ÈÄ commitÀ» ÇÒ¶§
sticky tag `1.2`¿Í °°Àº ¸Þ½ÃÁö°¡ Ãâ·Â µÇ¸é¼ commit ÀÌ µÇÁö ¾Ê´Â °æ¿ì°¡ ¹ß
»ýÇÒ °æ¿ì°¡ Àִµ¥ ÀÌ´Â ÆÄÀÏ¿¡ sticky tag°¡ ÀÖ¾î¼ ±×·¸´Ù. sticky tag´Â ÀÌ
Àü ¹öÀüÀ¸·Î µÇµ¹¸°´Ù°Å³ª ÇÒ ¶§ ÀÚµ¿À¸·Î µé¾î°¡°Ô µÇ´Âµ¥ sticky tag°¡ µé¾î
°¡´Â ÀÌÀ¯´Â main.cÆÄÀÏÀ» 1.2·Î ¹Ù²Ù°í commitÀÌ °¡´ÉÇÏ´Ù¸é ÇöÀç ÀúÀå¼Ò
µð·ºÅ丮¿¡ ÀÖ´Â main.c ÆÄÀÏÀº ÈξÀ ÀÌÀü ¹öÀüÀÎ 1.2 ¹öÀüÀ¸·Î ¹Ù²î±â ¶§¹®
ÀÌ´Ù.
ÀÌ·± ÀÏÀ» ¹Ì¿¬¿¡ ¹æÁöÇϰíÀÚ CVS´Â cvs up -r 1.2 main.c ¸í·ÉÀ¸·Î main.c
ÆÄÀÏÀ» 1.2 ¹öÀüÀ¸·Î µÇµ¹¸± ¶§ Ç×»ó ½ºÆ¼Å° ű׸¦ Áý¾î ³Ö´Â´Ù. ½ºÆ¼Å° Á¸Àç
À¯¹«´Â cvs status [ÆÄÀϸí]À¸·Î È®ÀÎ °¡´ÉÇÏ´Ù.
cvs up -A main.c
////////////////////////////////////////////////////////////////////////
//
//
// cvs ÆÄÀÏ ·Î±× ¹× ƯÁ¤ ºÎºÐÀ» ¼öÁ¤ÇÑ »ç¶÷ È®ÀÎ
//
//
////////////////////////////////////////////////////////////////////////
cvs log [ÆÄÀϸí]
À» ÀÌ¿ëÇÏ¸é ¹öÀüº°·Î ¼öÁ¤ÇÑ »ç¶÷ÀÌ ³ªÅ¸³ª°Ô µÇ°í
cvs annotate [filename] or cvs ann [filename]
À» ÀÌ¿ë ¼Ò½º ¶óÀÎ º°·Î ¼öÁ¤ÇÑ »ç¶÷ÀÌ ³ªÅ¸³ª°Ô µÈ´Ù.
////////////////////////////////////////////////////////////////////////
//
//
// cvs ÆÄÀÏ ¹öÀü´ëº° Â÷ÀÌÁ¡ È®ÀÎ
//
//
////////////////////////////////////////////////////////////////////////
cvs diff -r 1.5 -r 1.6 main.c
1.5¹öÀü¿¡¼ main.c ÆÄÀϰú 1.6 ¹öÀüÀÇ main.c ÆÄÀÏ¿¡¼ ´Þ¶óÁø ºÎºÐÀÌ ÀÖ
´ÂÁö Ãâ·ÂÇÑ´Ù.
////////////////////////////////////////////////////////////////////////
//
//
// cvs ÇöÀç ÀÛ¾÷ µð·ºÅ丮¿¡ ÀÖ´Â main.c ¿Í ÀúÀå¼Ò µð·ºÅ丮 ³»¿ë ºñ±³
//
//
////////////////////////////////////////////////////////////////////////
cvs diff -r HEAD main.c
////////////////////////////////////////////////////////////////////////
//
//
// cvs ¼Ò½º¿¡ TAG°É±â
//
//
////////////////////////////////////////////////////////////////////////
¼Ò½º ÆíÁý »óŸ¦ ÀúÀå Çϱâ À§Çؼ ƯÁ¤ ½ÃÁ¡¿¡ TAGÀ» °É ¼ö °¡ ÀÖ´Ù.
cvs tag TAG_1
ÀÌ·±½ÄÀ¸·Î ÇöÀç »óŸ¦ űë ÇØ³õÀ¸¸é ÃßÈÄ TAG_1 ÀÇ »óÅ·Πµ¹¾Æ
°¥¼ö °¡ ÀÖ´Ù.
cvs up -r TAG_!
ÀÌ·¸°Ô ű׸¦ °Å´Â°Ç ¹ö±× ¼öÁ¤ Çϰųª ¼Ò½º¸¦ ¸¹ÀÌ ¼öÁ¤ÇØ¾ß ÇÒ °æ¿ì À¯¿ë
ÇÏ´Ù.
///////////////////////////////////////////////////////////////////////
cvs command
///////////////////////////////////////////////////////////////////////
login : cvs server login
logout : cvspass file¿¡¼ ÀúÀå¼Ò Á¦°Å
import : ÇÁ·ÎÁ§Æ® ÆÄÀÏ µî·Ï
checkout(co, get) : ÇÁ·ÎÁ§Æ® ÆÄÀÏ °¡Á®¿À±â
commit(ci) : project file ¼öÁ¤ÈÄ cvs ¼¹ö¿¡ ¹Ý¿µ
update(up) : cvs serverÀÇ ÃֽйöÀüÀ» ÀÛ¾÷ µð·ºÅ丮¿¡ ¹Ý¿µ
add(new) : ÆÄÀÏ ¶Ç´Â µð·ºÅ丮 Ãß°¡
remove(rm, delete) : ÆÄÀÏ »èÁ¦
diff : ÆÄÀÏ ¹öÀü¿¡ µû¸¥ Â÷ÀÌÁ¡ ºñ±³
log : ÆÄÀÏ ·Î±× º¸±â
annotate(ann) : Çະ Á¤º¸ Ãâ·Â(³¯Â¥ ÀÛ¼ºÀÚ µî)
status : ÆÄÀÏ »óÅ º¸±â
history : °¢Á¾ È÷½ºÅ丮 º¸±â
tag : ÇÁ·ÎÁ§Æ® ÆÄÀϵé űë
rtag : ÀúÀå¼Ò µð·ºÅ丮¿¡ űë
release : ¸ðµâ release
/////////////////////////////////////////////////////////////////////////
ÂüÁ¶ »çÀÌÆ®
http://wiki.kldp.org/wiki.php/DocbookSgml/CVS_Tutorial-KLDP
http://jakarta-k.sourceforge.net/guide/HOWTO_Sourceforge_CVS.html#%C1%D8%BA%F1%B9%B0
´Ù¿î·Îµå »çÀÌÆ®
http://www.cvshome.org