U E D R , A S I H C RSS

Pragmatic Version Control WithCVS/CommonCVS Commands

1. Common CVS Commands

žฅ—„œ๋Š” šฐ๋ฆฌฐ€ cvs๋ฅผ šฉ•„œ •˜๋Š” ž‘—…˜ 90ผ„Šธ๋ฅผ ฐจง€•˜๋Š” ๋Œ€๋ถ€๋ถ„˜ ๋ช…๋ –ด๋ฅผ ๋‹ค๋ฃฌ๋‹ค.
(ด๋ฒˆžฅฑ…—„œ ฐ€žฅ Ž˜ง€ˆ˜ฐ€ ๋งŽ€ žฅด๋‹ค. ๋Œ€๋žต 4~50 Ž˜ง€  •๋„ด๋‹ค.  •๋„นŒง€๋งŒ ๋ณด๋ฉด cvs ‚ฌšฉ•˜๋Š”๋ฐ ฐ ๋ฌด๋ฆฌ๋Š” —†„ ๋“ฏ•˜‹ค.)

1.1. Checking Things Out

~cpp 
root@eunviho:~/tmp2# cvs co sesame sesame2
cvs checkout: Updating sesame
U sesame/color.txt
U sesame/number.txt
cvs checkout: Updating sesame2
U sesame2/color.txt
U sesame2/number.txt
cvs server —„œ sesame sesame2 2œ˜ ๋ชจ๋“ˆด๋‚˜ •˜œ„ ๋ชจ๋“ˆ„ •˜๋‚˜ƒ˜ ๋™•œ ด๋ฆ„˜ ง€—ญ ๋””๋ ‰† ๋ฆฌ๋กœ ฐ€ ˜

~cpp 
root@eunviho:~/tmp2# cvs co sesame2/sesame2
cvs checkout: Updating sesame2/sesame2
U sesame2/sesame2/color.txt
U sesame2/sesame2/number.txt
cvs checkout: Updating sesame2/sesame2/templates
U sesame2/sesame2/templates/test.test
 €žฅ†Œ— กดžฌ•˜๋Š” •˜œ„ ๋ชจ๋“ˆ˜ ๋””๋ ‰† ๋ฆฌ•ˆ—„œ ผ๋ถ€๋ถ„๋งŒ„ ฒดฌ•„›ƒ•œ‹ค.

-r : Šน ••œ œ๋ฐœŒ„ ฒดฌ•„›ƒ. ๋ฒ„ „๋ฒˆ˜˜€ ผฌ๋ฆฌ‘œ๋กœ ง€ •.
CVS๋Š” HEAD, BASE๋ผ๋Š” 2œ˜ ผฌ๋ฆฌ‘œ๋ฅผ ž๋™œผ๋กœ  œณต•œ‹ค.
HEAD :  €žฅ†Œ—„œ ฐ€žฅ œ‹  ๋ฒ„ „. ๋Œ€๋ถ€๋ถ„˜ ๋ช…๋ –ด˜ ธฐ๋ณธด๋‹ค.
BASE : ๋งˆง€๋ง‰œผ๋กœ ˜„žฌ ๋””๋ ‰† ๋ฆฌ— ฒดฌ•„›ƒ๋œ œ •Œ
-D : ๋‚ œ๋ฅผ šฉ•„œ ฒดฌ•„›ƒ.

~cpp 
root@eunviho:~/tmp2# cvs log sesame
cvs log: Logging sesame

RCS file: /home/CVSHOME/sesame/color.txt,v
Working file: sesame/color.txt
head: 1.2
branch:
locks: strict
access list:
symbolic names:
        initial: 1.1.1.1
        sesame: 1.1.1
keyword substitution: kv
total revisions: 3;     selected revisions: 3
description:
----------------------------
revision 1.2
date: 2005-08-02 13:16:58 +0000;  author: sapius;  state: Exp;  lines: +4 -0
ยฐíยฐยดÀÌ 4ยคยกÁö »öÀ» ยดõ ยฟรธÇÔ
----------------------------
revision 1.1
date: 2005-08-02 05:50:14 +0000;  author: sapius;  state: Exp;
branches:  1.1.1;
Initial revision
----------------------------
revision 1.1.1.1
date: 2005-08-02 05:50:14 +0000;  author: sapius;  state: Exp;  lines: +0 -0
 
=============================================================================
.
.
.
root@eunviho:~/tmp2# cvs co -r 1.1 sesame
cvs checkout: Updating sesame
U sesame/color.txt
U sesame/number.txt
ŒŒ˜ ๋‚ดšฉ„ ™••˜๋ฉด checkout ๋œ ŒŒด 1.1๋ฒ„ „˜ ฒƒž„„ ™••  ˆ˜ žˆ๋‹ค.

cvs ฐ€ ‹•˜๋Š” ๋‚ œ˜ ˜•ƒœ
ISO8601 2003-06-04
20030604
2003-06-04 20:12
2003-06-04T20:12
2003-06-04 20:12Z
2003-06-05 20:12:00-0500
E-Mail format Mon Jun 9 17:12:56 CDT 2003
Mon, Jun 9 17:12:56 2003
Jun 9 17:12:56 2003
June 9, 2003
Relative 1 day ago
27 minutes ago
last monday
yesterday
third week ago

1.2. Keeping Up To Date

‹ˆ˜˜ ”„๋กœธ๋ž˜๋จธ๋“ค”„๋กœ Šธ๋ฅผ „–‰•˜๋Š” ƒ™ฉ•˜—„œ๋Š” ๋‚ดฐ€ ”„๋กœธ๋žจ„ ฐฑ‹ •˜  žˆ๋Š” ๋™•ˆ ๋‹ค๋ฅธ ”„๋กœธ๋ž˜๋จธ๋“ค๋„ ”„๋กœธ๋žจ˜ ฐฑ‹ „ •  ฐ€๋Šฅ„ด ๋Œ€๋‹žˆ ๋†’๋‹ค. ๋งŒ•ฐฑ‹ ฃผธฐฐ€ ธธ–ด„‹ค๋ฉด ”„๋กœธ๋ž˜๋จธฐ€ ˜๋ฆฌ•••  merge ž‘—…ƒ๋‹•  ฒƒด๋‹ค. ๋•Œ๋ฌธ— ฃผธฐ œผ๋กœ ”„๋กœ Šธ๋ฅผ checkout •˜๋Š” ฒƒ‘š”•˜‹ค.

cvs update -d files or directory : ˜„žฌ ๋””๋ ‰† ๋ฆฌ— กดžฌ•˜๋Š” ๋ชจ๋“  ŒŒด๋”๋ฅผ  €žฅ†Œ˜ œ‹ ๋ฒ„ „œผ๋กœ ฒดฌ•„›ƒ. -d ˜…˜€ ถ”ฐ€๋œ ๋””๋ ‰† ๋ฆฌฐ€ กดžฌ•˜๋Š” ฒฝšฐ— cvsฐ€ ˜„žฌ ด๋”— ž๋™œผ๋กœ ด๋”๋ฅผ ๋งŒ๋“ค–ด„œ ฒดฌ•„›ƒ ‹œ‚จ๋‹ค.
~cpp 
root@eunviho:~/tmpdir/sesame# cvs update -d template
cvs update: Updating template
U template/file1.java
root@eunviho:~/tmpdir/sesame# cvs update
cvs update: Updating .
U number.txt
cvs update: Updating template
update ๋„‘—๋Š” ๋ณ€ฒฝ๋œ ‚ฌ•— ๋Œ€•œ Šน‚ฌ•˜  •๋ณดฐ€ ฐ™œ ฅ๋œ‹ค.
‹Œ€ ธ๋Ÿฌ•œ ˜ˆ๋ฌธด๋‹ค.
~cpp 
StarterKit> cvs update
? SourceCode/tmpdoc.ilg
? SourceCode/tmpdoc.toc
cvs server: Updating .
RCS file: /home/CVSROOT/PP/doc/StarterKit/pragprog.sty,v
retrieving revision 1.16
retrieving revision 1.17
Merging differences between 1.16 and 1.17 into pragprog.sty
M pragprog.sty
cvs server: Updating SourceCode
A SourceCode/CommonCommands.tip
M SourceCode/HowTo.tip
A SourceCode/Releases.tip
cvs server: Updating SourceCode/images
cvs server: Updating UnitTest
P UnitTest/DesignIssues.tip
U UnitTest/InAProject.tip
P UnitTest/Introduction.tip
cvs server: Updating UnitTest/code
U UnitTest/code/Age.java
U UnitTest/code/TestMyStack.java
U UnitTest/code/testdata.txt
cvs server: Updating UnitTest/code/rev1
cvs server: Updating UnitTest/code/rev2
cvs server: Updating UnitTest/code/rev3
cvs server: Updating util
? : ž‘—…ณต„—๋Š” กดžฌ•˜๋‚˜ CVSฐ€ •Œง€๋ชป•˜๋Š” ŒŒ
A : ง€—ญ—„œ ถ”ฐ€๋˜—ˆœผ๋‚˜ •„ง  €žฅ†Œ— ฒดฌ•ˆ๋จ
M : ง€—ญ—„œ ˆ˜ •๋œ ŒŒ
U,P :  €žฅ†Œ— กดžฌ•˜๋Š” ๋ฒ„ „ง€—ญ ณต„˜ ๋ฒ„ „๋ณด๋‹œ‹ –ด„œ ฐฑ‹ ๋จ
C : ŒŒ˜ ๋ณ€•‘— ถฉ๋Œ„ œ‚ด


~cpp 
cvs ˜ ๋™ž‘๋ฐฉ‹˜ •ด
cvs ๋Š” ๋‹ผ ๋ช…๋ •„‹ˆ๋—ฌ๋Ÿฌ •˜œ„ ‹œŠค…œ˜ ‘•ฒด๋กœ ••˜๋Š” ฒƒŽธ•˜‹ค.
˜ˆ๋ฅผ ๋“ค–ด„œ

cvs -q -d /home/CVSHOME checkout -d temp
    -- ----------------          -------
    |          |                     |
quiet mode repository      checkout destination

œ„™€ ฐ™ด ๋™•œ ˜…˜ง€๋งŒ œ„˜— ๋”ฐ๋„œ ˜๋ฏธ•˜๋Š” ๋ฐ”ฐ€ ๋‹ค๋ฅธ ฒฐณผฐ€ ๋‚˜˜จ๋‹ค.

1.3. Adding Files and Directories

cvs add : ŒŒด๋‚˜ ๋””๋ ‰† ๋ฆฌ๋ฅผ  €žฅ†Œ— ถ”ฐ€•œ‹ค.
~cpp 
root@eunviho:~/tmpdir/sesame# cvs add template2
Directory /home/CVSHOME/sesame/template2 added to the repository

root@eunviho:~/tmpdir/sesame# cd template2/

root@eunviho:~/tmpdir/sesame/template2# cvs add test.txt  
cvs add: scheduling file `test.txt' for addition
cvs add: use `cvs commit' to add this file permanently

root@eunviho:~/tmpdir/sesame/template2# cvs commit -m "new file added"
cvs commit: Examining .
/home/CVSHOME/sesame/template2/test.txt,v  <--  test.txt
initial revision: 1.1

1.3.1. CVS and binary files

CVS๋Š” ”„๋กœธ๋žจ †ŒŠค ฝ”๋“œ, XML ๋“ฑ …ŠคŠธ ŒŒ„ œ„ฃผ๋กœ•„œ „„๋˜—ˆ๋‹ค.
  • ๋ฐ”๋€ ๋ถ€๋ถ„๋งŒ„  €žฅ•˜ธฐ ๋•Œ๋ฌธ—  „ฒด ๋ฆฌ๋น„ „๋œ †ŒŠค๋ฅผ ๋‹ฐ€ง€๋ฉด„œ๋„ šฉ๋Ÿ‰ ˆ•
  • œ ‹‰Šค, œˆ๋„šฐ˜ „ ตฌ๋ถ„๋ฌธž๋ฅผ ตฌ๋ณ„•œ‹ค.
  • Šน • ‚ค›Œ๋“œ๋ฅผ ๋Œ€ฒด•˜๋Š” ๋ฐฉ๋ฒ•œผ๋กœ ŒŒ— ฃผ„„‹•„ค€๋‹ค. (๋น„ถ”œ)

•˜ง€๋งŒ ๋ฐ”ด๋„ˆ๋ฆฌ˜ ฒฝšฐ—๋Š” ๋ฌธ œฐ€ ๋ฐœƒ•œ‹ค.
  • ๋ฐ”ด๋„ˆ๋ฆฌ๋ฅผ ๋Œ€ƒœผ๋กœ๋Š” ๋ฏธ๋™ž‘
  • „๋ฐ”ฟˆ—†๋Š” ๋ฐ”ด๋„ˆ๋ฆฌ—„œ ๋งŒ•œˆ๋„šฐ‹˜ ๋ฐ”ด๋„ˆ๋ฆฌ ๋ถ€๋ถ„„ œ ‹‰Šค ‹œผ๋กœ ๋ฐ”พผ๋‹ค๋ฉด ๋ฐ”ด๋„ˆ๋ฆฌฐ€ นจงˆ ฒƒด๋‹ค.
  • ๋ฐ”ด๋„ˆ๋ฆฌ ŒŒ— CVS ‚ค›Œ๋“œฐ€ ๋“ค–ดžˆ๋‹ค๋ฉด ฒƒ˜™˜๋˜–ด„œ ๋ฌธ œฐ€ ๋ฐœƒ•˜ฒŒ ๋œ‹ค.

cvs add -kb File : ง€ •๋œ ŒŒ— ๋Œ€•„œ๋Š” œ •Œ ๋งˆ๋”” ŒŒ˜  „ฒด๋ฅผ  €žฅ•˜  ธฐƒ€ ˜๋ฆฌ๋ฅผ •˜ง€ •Š๋Š”๋‹ค.

๋งŒ•ฝ ๋ฐ”ด๋„ˆ๋ฆฌ ŒŒ„ -kb˜…˜„ ฃผง€ •Š€ ƒƒœ—„œ add ‹œผฐ๋‹ค๋ฉด ด๋ฅผ ๋ฐ”พธ๋Š” ๋ฐฉ๋ฒ•๋„ กดžฌ•œ‹ค.

๋งˆ๋•…•œ ๋งˆด๋„ˆ๋ฆฌฐ€ —†–ด„œ ฑ…˜ ๋‚ดšฉ„ šฉ
~cpp 
work> cvs add DataFormat.doc #<-- forgot the -kb option
cvs add: scheduling file โ€˜DataFormat.docโ€™ for addition
cvs add: use โ€™cvs commitโ€™ to add this file permanently

work> mv DataFormat.doc Temp.doc
work> cvs remove DataFormat.doc
cvs remove: removed โ€˜DataFormat.docโ€™

work> mv Temp.doc DataFormat.doc
work> cvs add -kb DataFormat.doc #<-- use the option
cvs add: scheduling file โ€˜DataFormat.docโ€™ for addition
cvs add: use โ€™cvs commitโ€™ to add this file permanently

work> cvs commit -m "Add new data format document"

œ„™€๋Š” ๋‹ค๋ฅดฒŒ -kb„ •„ •˜ง€ •Š€ ƒƒœ—„œ checkout„ ด๋ฏธ •œ ƒƒœผ๋ฉด
‹Œณผ ฐ™€ ณผ •„ †ต•„œ ๋ณตตฌฐ€ ฐ€๋Šฅ•˜‹ค.
~cpp 
work> # reset the flag in the repository
work> cvs admin -kb DataFormat.doc
work> # then reset the flags in our workspace
work> cvs update -A DataFormat.doc
work> # copy a known good copy over this file
work> cp ?/docs/DataFormat.doc DataFormat.doc
work> # and save this back in the repository
work> cvs commit -m "Reset -kb flag"

note) ๋ฐ”ด๋„ˆ๋ฆฌ๋ฅผ žฃผ ‚ฌšฉ•œ‹ค๋ฉด cvswrappers — ๋Œ€•„œ •Œ•„๋ณดž.
BOOK ฑ…˜ 76Ž˜ง€— กดžฌ•œ‹ค.

1.4. Ignoring Certain Files

œ๋ฐœ„ •˜๋Š” ๋„‘—๋Š” —ฌ๋Ÿฌœ˜ ‘„‹„˜ ŒŒผ๋“ค(.obj, .class ๋“ฑ๋“ฑ)ƒ„ฑ๋œ‹ค. ด๋Ÿฐ ŒŒ€ ตณง€ CVS  €žฅ†Œ— ๋ณดด€•˜๋Š” ฒƒ•„‹ˆ๋ผ ๋กœปฌ—  €žฅ•ด ๋‘  ‚ฌšฉžฐ€ •„𔕠•Œ๋งˆ๋‹ƒˆ๋กœ ƒ„‹œ‚ค๋Š” ฒƒ˜€ ด๋‹ค. ๋‹–‰žˆ cvs ๋Š” ด๋Ÿฌ•œ „ „ ••˜๋Š” ฒƒฐ€๋Šฅ•˜‹ค.
.cvsignore file
~cpp 
dummy.java
*.class
*.log
*.obj
๋ฅผ ๋กœปฌ ž‘—…ณต„—  €žฅ•ด๋‘๋ฉด  €žฅ๋œ .cvsignore ๋ฅผ ธฐ๋ฐ˜•„œ cvs๋Š” ธ๋Ÿฐ ŒŒ„ ๋ฌด‹œ•˜ฒŒ๋œ‹ค.
ด๋ ‡ฒŒ  €žฅ๋œ .cvsignore ๋ฅผ  €žฅ†Œ— ˜ฌ๋ ค๋‘๋ฉด  €žฅ†Œ๋ฅผ ๋ฐฉ๋ฌธ•˜๋Š” ๋ชจ๋“  ‚ฌšฉž๋“ค๋„ ๋™•œ ๋ฌด‹œ „ ••˜—„œ ž‘—…•˜๋Š” ฒƒฐ€๋Šฅ•˜‹ค.
~cpp 
root@eunviho:~/tmpdir/sesame#cvs add .cvsignore
root@eunviho:~/tmpdir/sesame#cvs commit -m"dummy write. ignore class, log, obj" .cvsignore

1.5. Renaming Files

cvs—„œ ŒŒผ, ๋””๋ ‰† ๋ฆฌ˜ ด๋ฆ„„ ๋ฐ”พธ๋Š” Šน๋ณ„•œ ˜…˜€ —†๋‹ค.
๋ฐฉ๋ฒ•€ ๋‹ง€ ๋กœปฌ ณต„˜ ŒŒด๋ฆ„„ ๋ฐ”พธ   €žฅ†Œ๋‚ด˜ ธฐกด˜ ŒŒผ๋“ค„ ‚ญ œ•œ๋’ค ๋กœปฌณต„˜ ด๋ฆ„ด ๋ฐ”๋€ ŒŒผ๋“ค„  €žฅ†Œ— ถ”ฐ€•˜๋Š” ๋ฐฉ๋ฒ•๋ฟด๋‹ค.
~cpp 
root@eunviho:~/tmp/sesame# mv color.txt color_renamed.txt
root@eunviho:~/tmp/sesame# cvs remove color.txt
cvs remove: scheduling `color.txt' for removal
cvs remove: use `cvs commit' to remove this file permanently
root@eunviho:~/tmp/sesame# cvs add color_renamed.txt 
cvs add: scheduling file `color_renamed.txt' for addition
cvs add: use `cvs commit' to add this file permanently
root@eunviho:~/tmp/sesame# cvs commit -m "color.txt renamed"
cvs commit: Examining .
cvs commit: Examining template
cvs commit: Examining template2
/home/CVSHOME/sesame/color.txt,v  <--  color.txt
new revision: delete; previous revision: 1.2
/home/CVSHOME/sesame/color_renamed.txt,v  <--  color_renamed.txt
initial revision: 1.1
ด๋ ‡ฒŒ ด€๋ฆฌ๋ฅผ •˜ฒŒ๋˜๋ฉด ›๋ž˜ กดžฌ–ˆ๋˜ color.txt๋ผ๋Š” ŒŒ— กดžฌ•˜๋Š” ธฐกด˜ ธฐ๋ก๋“ค‚ญ œ๋˜–ด„œ ŒŒ˜ ณผฑฐŒŒ„ color_rename.txt˜ ๋กœธ๋กœ šฉ•˜๋Š” ฒƒด ๋ถˆฐ€•˜‹ค. ธฐ๋กด ๋”ฐ๋กœ ๋ณดด€๋˜ธฐ ๋•Œ๋ฌธด๋‹ค.
~cpp 
root@eunviho:~/tmp/sesame# cvs status color.txt
===================================================================
File: no file color.txt         Status: Up-to-date

   Working revision:    No entry for color.txt
   Repository revision: 1.3     /home/CVSHOME/sesame/Attic/color.txt,v
œ„—„œ ๋ณด๋“ฏ color_renamed.txt๋ผ๋Š” ŒŒ˜ ๋ฒ„ „ด 1.1ฒƒ— ๋ฐ˜•„œ color.txtฐ€ 1.3๋ฒ„ „ž„„ ™••  ˆ˜ žˆ๋‹ค.

1.6. Renaming a Directory

1.7. Seeing Whatโ€™s Changed

1.8. Handling Merge Conflicts

1.9. Committing Changes

1.10. Examining Change History

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:24:01
Processing time 0.0272 sec