PragmaticVersionControlWithCVS/WhatIsVersionControl | PragmaticVersionControlWithCVS/HowTo |
1.1. Installing CVS ¶
CVSμλ² μ€μΉλ μμμ μν΄λΌ. -_-; 리λ
μ€μμλ ν¨ν€μ§λ‘ μ€μΉνλ©΄ λκ³ , μλμ°μμλ μμμ λ°μμ μ€μΉνλ©΄ λλ€. μ΄λ―Έ μλ²κ° μμΌλ©΄ λ μ’λ€. λ΄ κ²½μ°μλ λ°λΉμ 리λ
μ€λ₯Ό μ¬μ©νλ κ΄κ³λ‘ apt-get install cvsλ‘ κ°λ¨ν μ€μΉλ₯Ό λλλ€.
1.2. Creating a Repository ¶
νμ¬ μ°λ¦¬λ ν
μ€νΈμ©μΌλ‘ CVSλ₯Ό μ°κΈ° λλ¬Έμ CVSμ μ μ₯μλ₯Ό μμλ‘ λ§λ€ νμκ° μλ€.
CVSμ μ₯μλ₯Ό λ§λλ λͺ λ Ήμ λ€μκ³Ό κ°λ€.
CVSμ μ₯μλ₯Ό λ§λλ λͺ λ Ήμ λ€μκ³Ό κ°λ€.
~cpp Unix: cvs -d ~/sandbox init // λμ κ²½μ°μλ /home/CVSHOME λ‘ μ§μ νμλ€. Wind: cvs -d d:sandbox init
1.3. CVS Commands ¶
CVSν΄λΌμ΄μΈνΈλ νμ¬ μ°λ¦¬κ° μ°λ 컀맨λ ννμ ν΄λΌμ΄μΈνΈλ μμ§λ§, GUIννμ TortoiseCVS, WinCVSλ±λ μλ€. (sourceforge.netμμ νμΈ) λν IDE μμ²΄κ° CVS ν΄λΌμ΄μΈνΈμ κΈ°λ₯μ νλ κ²λ€λ μλ€. (ex. eclipse, dev-cpp)
1.4. Creating a Simple Project ¶
κ°λ¨ν νλ‘μ νΈλ₯Ό CVSμμ λ§λ€μ. μμ λ μμ€λ‘ 보μ΄μ§λ μμ§λ§ ν¬κ² μκ΄μ μλ€.
color.text
number.text
μ΄ νμΌμ΄ μ μ₯λ ν΄λμμ λ€μμ λͺ
λ Ήμ΄λ₯Ό μ€νμν¨λ€.
-m " " νλ‘μ νΈλ₯Ό μν¬νΈν λ κΈ°λ‘ν λ©μμ§μ. (μλνν° μ½λλ₯Ό μ¬μ©νλ κ²½μ°μ μ 리νλ€.)
sesame μ μ₯μμμμ νλ‘μ νΈμ μ΄λ¦
λ§μ§λ§ 2κ°μ νλΌλ©ν°(sesame initial) tagμ΄λ€.
μ΄λ°κ³Όμ μ λ§μΉλ©΄ CVS λ£¨νΈ λλ ν 리μ νλ‘μ νΈκ° μ μμ μΌλ‘ μμ±λμλμ§ ls λͺ
λ ΉμΌλ‘ νμΈν΄λ³΄μ.
~cpp black brown red orange yellow green
~cpp zero one two three four
~cpp tmpdir#cvs -d /home/CVSHOME/ import -m " " sesame sesame initialimportλ νλ‘μ νΈλ₯Ό μ μ₯μμ λ£μ κ²μ΄λΌλ νλΌλ©ν°μ΄λ€.
-m " " νλ‘μ νΈλ₯Ό μν¬νΈν λ κΈ°λ‘ν λ©μμ§μ. (μλνν° μ½λλ₯Ό μ¬μ©νλ κ²½μ°μ μ 리νλ€.)
sesame μ μ₯μμμμ νλ‘μ νΈμ μ΄λ¦
λ§μ§λ§ 2κ°μ νλΌλ©ν°(sesame initial) tagμ΄λ€.
1.5. Starting to Work With a Project ¶
μ΄μ μ μ₯μμ μ μ₯λ νμΌμ λ‘컬 μμ
곡κ°μ 체ν¬μμν΄λ³΄μ. μ΄λ₯Όμν΄μ μΌλ¨ ~/work λΌλ λλ ν 리λ₯Ό ꡬμ±νμ.
~cpp #mkdir ~/work #cd ~/work #cvs -d /home/CVSHOME co sesame cvs checkout: Updating sesame U sesame/color.txt U sesame/number.txt~/workλ₯Ό μ‘°μ¬ν΄μ ~/work/sesame λλ ν 리μ μ μμ μΌλ‘ μ μ₯μμ νμΌμ΄ 체ν¬μμλμλ€λ©΄ μλ³Έ νμΌμ μμ νλ€.
1.6. Making Changes ¶
color.txt μ λ³κ²½
~cpp black brown red orange yellow blue purple gray whitecolor.txtλ₯Ό μμ κ°μ΄ λ³κ²½νλ€μ νλ‘ννΈμμ λ€μμ λͺ λ Ήμ΄λ₯Ό μ¬μ©ν΄λ³΄μ.
~cpp root@eunviho:~/tmpdir/sesame# cvs status color.txt =================================================================== File: color.txt Status: Locally Modified Working revision: 1.1.1.1 Tue Aug 2 05:50:14 2005 Repository revision: 1.1.1.1 /home/CVSHOME/sesame/color.txt,v Sticky Tag: (none) Sticky Date: (none) Sticky Options: (none)μκΈ°μ status μ΅μ μΌλ‘ νμΈμ΄ κ°λ₯νλ―μ΄ cvsλ μλμΌλ‘ νμ¬μ νμΌμ΄ λ‘컬 μμ 곡κ°μμ μμ λμλ€λ μ¬μ€μ νλ¨ν μ μλ€.
~cpp root@eunviho:~/tmpdir/sesame# cvs diff color.txt Index: color.txt =================================================================== RCS file: /home/CVSHOME/sesame/color.txt,v retrieving revision 1.1.1.1 diff -r1.1.1.1 color.txt 6a7,10 > blue > purple > gray > whiteλν diff μ΅μ μ μ΄μ©ν΄μ λ³κ²½λ νμΌμ΄ μ΄λ€ λ³κ²½μ΄ μμλμ§λ₯Ό μ‘°μ¬νμ¬ λ³΄μ¬μ£Όλ μ΅μ λ μ‘΄μ¬νλ€.
~cpp root@eunviho:~/tmpdir/sesame# cvs diff --side-by-side color.txt Index: color.txt =================================================================== RCS file: /home/CVSHOME/sesame/color.txt,v retrieving revision 1.1.1.1 diff --side-by-side -r1.1.1.1 color.txt black black brown brown red red orange orange yellow yellow green green > blue > purple > gray > white--side-by-side μ΅μ μ μ΄μ©νλ©΄ μ§μ λ²μ κ³Ό μ μ₯μλ²μ μ ννλ©΄μ μΆλ ₯νμ¬μ λΉκ΅λ₯Ό ν μ μλ€.
1.7. Updating the Repository ¶
νμΌμ μμ , UnitTestλ₯Ό κ±°μΉλ©΄ μμ ν λ΄μ©μ μ μ₯μμ μ μ₯ν΄μΌν κ²μ΄λ€.
(μ§μ ν΄λ³΄λ©΄ μλ€. -_-;)
~cpp root@eunviho:~/tmpdir/sesame# cvs commit -m "κ³ κ°μ΄ 4κ°μ§ μμ λ μν¨" cvs commit: Examining . /home/CVSHOME/sesame/color.txt,v <-- color.txt new revision: 1.2; previous revision: 1.1λ³κ²½λ νλ‘μ νΈλ commit μ΅μ μΌλ‘ 체ν¬μΈμν€λ κ²μ΄ κ°λ₯νλ€. μ΄λ -m μ΅μ μΌλ‘ λ³κ²½λ μ¬νμ λν μ£Όμμ λ€λ κ²μ΄ κ°λ₯νλ©°, λ§μ½ μ£Όμμ λ¬μ§ μμ κ²½μ°μλ vi μλν°κ° μ€νλλ©΄μ μ£Όμμ μ μ₯ν μ μλ νμΌμ΄ μ΄λ¦°λ€.
(μ§μ ν΄λ³΄λ©΄ μλ€. -_-;)
~cpp root@eunviho:~/tmpdir/sesame# cvs status color.txt =================================================================== File: color.txt Status: Up-to-date Working revision: 1.2 Tue Aug 2 13:08:47 2005 Repository revision: 1.2 /home/CVSHOME/sesame/color.txt,v Sticky Tag: (none) Sticky Date: (none) Sticky Options: (none)commit μ ν΅ν΄μ μ μ₯μλ₯Ό 체ν¬μΈνκ³ λλ€ statusλ‘ λ³κ²½λ νμΌμ μ 보λ₯Ό μΆλ ₯νλ©΄ κ·Έ κ²°κ³Όκ° λ°μλ κ²μ μ μ μλ€.
~cpp root@eunviho:~/tmpdir/sesame# cvs log color.txt RCS file: /home/CVSHOME/sesame/color.txt,v Working file: 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 =============================================================================logμ΅μ μ ν΅ν΄μ νΉμ νμΌμ΄ μ΄λ€ μμΌλ‘ λ³κ²½μ΄ λμλμ§λ₯Ό μ μ μλ€.
1.8. When Worlds Collide ¶
μ΄μ νκ°μ νμΌμ λμ¬λμ΄ λμμ λ³κ²½ν λ μκΈ°λ μν©μλν΄μ μ΄ν΄λ³΄μ.
μ΄λ¬ν κ²½μ°λ₯Ό μ΄νΌκΈ° μν΄μ κΈ°μ‘΄μ sesame μ΄λΌλ λλ ν 리μ΄μΈμ 곡κ°μ μ μ₯μμ μ μ₯λ sesameμ λ°μμΌνλ€.
μ΄λ κ²νλ©΄ λλ ν 리μ
sesame/number.txt
μ΅μ λ²μ μ΄ μλ λ‘컬 μμ
곡κ°μ λ΄μ©κ³Ό μ μ₯μμ λ΄μ©μ λΉκ΅νλ€
μ μ₯μμ μ΅μ λ²μ μ λ΄μ©μ λ‘컬μ λ°μνκΈ°
μ΄λ¬ν κ²½μ°λ₯Ό μ΄νΌκΈ° μν΄μ κΈ°μ‘΄μ sesame μ΄λΌλ λλ ν 리μ΄μΈμ 곡κ°μ μ μ₯μμ μ μ₯λ sesameμ λ°μμΌνλ€.
~cpp root@eunviho:~/tmpdir# cvs -d /home/CVSHOME/ co -d aladdin sesame cvs checkout: Updating aladdin U aladdin/color.txt U aladdin/number.txt
~cpp root@eunviho:~/tmpdir# ll total 8 drwxr-xr-x 3 root root 4096 2005-08-02 22:23 aladdin drwxr-xr-x 3 root root 4096 2005-08-02 22:08 sesameκ³Ό κ°μ΄ λμΌν μ μ₯μμ νλ‘μ νΈκ° μλ‘λ€λ₯Έ λλ ν 리μ λ‘컬 μμ 곡κ°μ ν λΉλ°μλ€λ κ²μ μ μ μλ€.
~cpp root@eunviho:~/tmpdir# vi sesame/number.txt zero one two three four five sixμκΈ°μ κ°μ΄ λ³κ²½ν νμΌμ 체ν¬μΈ μν¨λ€.
~cpp root@eunviho:~/tmpdir/sesame# cvs commit -m "μ«μκ° λ νμνλ€." cvs commit: Examining . /home/CVSHOME/sesame/number.txt,v <-- number.txt new revision: 1.2; previous revision: 1.1sesame ν΄λμ λ°μμ§ νμΌμ λ³κ²½νμ¬ μ²΄ν¬μΈ μμΌ°κΈ° λλ¬Έμ μ΄μ aladdin ν΄λμ μ‘΄μ¬νλ νμΌλ€μ λμ΄μ μ΅μ λ²μ μ΄ μλλ€.
~cpp root@eunviho:~/tmpdir/aladdin# cvs status number.txt =================================================================== File: number.txt Status: Needs Patch Working revision: 1.1.1.1 Tue Aug 2 05:50:14 2005 Repository revision: 1.2 /home/CVSHOME/sesame/number.txt,v Sticky Tag: (none) Sticky Date: (none) Sticky Options: (none)μκΈ°μ κ°μ΄ νμΈμ ν΄λ³΄λ©΄ aladdin/number.txt λ 체ν¬μμμ ν΅ν΄μ μ μ₯μμ μμ€μ λκΈ°νλ₯Ό ν΄μ£Όμ΄μΌνλ€λ μνλ₯Ό λνλ΄κ³ μλ€.
~cpp root@eunviho:~/tmpdir/aladdin# cvs diff -rHEAD number.txt Index: number.txt =================================================================== RCS file: /home/CVSHOME/sesame/number.txt,v retrieving revision 1.2 retrieving revision 1.1.1.1 diff -r1.2 -r1.1.1.1 6,7d5 < five < six-rHEADλ νμ¬μ branchesμ μ‘΄μ¬νλ κ°μ₯ μ΅μ λ²μ μ κ²κ³Ό λΉκ΅νλ μ΅μ μ΄λ€. λ§μ½ μ΄ μ΅μ μ΄ μλ€λ©΄ cvsλ νμ¬ λ°μμ§ μ§μ λ²μ κ³Ό λμΌν μ μ₯μμμ κΈ°λ‘λ μμ€μ λΉκ΅λ₯Ό νλ€.
~cpp root@eunviho:~/tmpdir/aladdin# cvs diff number.txtμ μ₯μμμ aladdin κ³Ό λμΌν λ²μ μ number.txtλ μ ν λ³νκ° μμκΈ° λλ¬Έμ μΆλ ₯λλ λ΄μ©μ΄ μλ€.
~cpp root@eunviho:~/tmpdir/aladdin# cvs update cvs update: Updating . U number.txtλ°μλλ νμΌμ μ€λ‘μ§ μ΅μ λ²μ μ νμΌμ΄ μ μ₯μμ μ‘΄μ¬ν κ²½μ°λ§μ΄λ€. κ·Έλ μ§ μμΌλ©΄ νμΌμ λ€μ λ°μ νμκ° μκΈ° λλ¬Έμ λ°μ§ μλλ€.
1.9. Conflict Resolution ¶
λ€μκ³Ό κ°μ΄ λ³κ²½μ ν΄μ λμμ λμ¬λμ΄ νμΌμ μμ μμ
μ νλ κ²½μ°λ₯Ό κ°μ ν΄λ³΄μ.
sesame/number.txt
sesame/number.txt
μ°μ aladdin μ νμΌλ€μ 체ν¬μΈνλ€.
κ·Έλ κ² λ§λ λ€μ sesameμ νμΌμ μμ ν μ¬λμ΄ μ²΄ν¬μΈμ νλ€κ³ μκ°ν΄λ³΄μ.
μ΄ κ²½μ°λ λμμ μμ μ΄ μΌμ΄λμ μ μ₯μμ μ΅μ λ²μ μ΄ λ°μλμ§ λͺ»νκΈ° λλ¬Έμ λ°μν κ²μ΄λ€.
μ°μ μ λ€μμ²λΌ ν΄λ³΄μ.
sesame/number.txtμ λ΄μ©μ νμΈν΄λ³΄μ
λ‘컬μ λ°μμ΄ λμμΌλ―λ‘
~cpp root@eunviho:~/tmpdir# vi sesame/number.txt ZERO one two three four five six
~cpp root@eunviho:~/tmpdir# vi aladdin/number.txt zero one two three four five SIX
~cpp root@eunviho:~/tmpdir/aladdin# cvs commit -m "make number six to be important" cvs commit: Examining . /home/CVSHOME/sesame/number.txt,v <-- number.txt new revision: 1.3; previous revision: 1.2
~cpp root@eunviho:~/tmpdir/sesame# cvs commit -m"make number zero to be emphasized" cvs commit: Examining . cvs commit: Up-to-date check failed for `number.txt' cvs [commit aborted]: correct above errors first!μκΈ°μμ 보λ―μ΄ μλ¬λ₯Ό λ΄λ©΄μ 체ν¬μΈνμ§ λͺ»νλ€.
μ°μ μ λ€μμ²λΌ ν΄λ³΄μ.
~cpp root@eunviho:~/tmpdir/sesame# cvs update cvs update: Updating . RCS file: /home/CVSHOME/sesame/number.txt,v retrieving revision 1.2 retrieving revision 1.3 Merging differences between 1.2 and 1.3 into number.txt M number.txt
~cpp root@eunviho:~/tmpdir/sesame# vi number.txt ZERO one two three four five SIXμκΈ°μμ 보λ―μ΄ cvsλ λ무λ μ λ³κ²½λ λΆλΆμ νλ¨ν΄μ νμ¬μ λ‘컬 μμ€μ λ°μμμΌμ€λ€.
~cpp root@eunviho:~/tmpdir/sesame# cvs commit -m"make number zero to be emphasized" cvs commit: Examining . /home/CVSHOME/sesame/number.txt,v <-- number.txt new revision: 1.4; previous revision: 1.3μκΈ°μ κ°μ΄ μ μμ μΈ μ²΄ν¬μΈμ΄ κ°λ₯νλ€. λ¬Όλ‘ aladdin ν΄λμ λ΄μ©λ λ€μλ² μμ μμλ μ΄μ κ°μ μΌμ΄ λ°μν κ²μ΄λ€.
1.9.1. λ°μΉκΈ° - λ³κ²½ λ΄μ©μ΄ μΆ©λνλ κ²½μ° ¶
μκΈ°μ κ²½μ°μλ 2κ°μ§ νλ‘κ·Έλ¨μ λ°λ λΆλΆμ΄ λμΌν μ€μ ν΄λΉνμ§ μκΈ° λλ¬Έμ ν° λ¬Έμ μμ΄ cvsκ° μμμ λ°μμ ν΄μ£Όμλ€. κ·Έλ λ λ§μ½ λ³κ²½λΆλΆμ΄ λμΌν λΆλΆμ΄λΌλ©΄ μ΄λ¨κΉ?
sesame/number.txt
aladdin/number.txt
μ΄λ°κ²½μ°μ rcsmerge λ κ·Έ λ³κ²½μ λ€μκ³Ό κ°μ΄ νννλ€.
sesame/number.txt
μ΄λ°μΌμ΄ λ°μν κ²½μ°μλ μ΄λ€ μΌμ΄ λ°μνλμ§ κΈ°λ‘μ μ°μ μ μΌλ‘ μ°Ύμ보μμΌνλ€.
μ΄λ° μ 보λ₯Ό μ’ ν©ν΄μ μ΄μ μμ€μ μμ ν μ¬λκ³Ό ν μλ₯Ό ν΅ν΄μ μ¬λ°λ₯Έ κ²°κ³Όλ₯Ό μ»μ΄λΌ μ μλ€.
μ΄ κ²½μ°μλ ichiλ₯Ό μ°κΈ°λ‘ νλ€κ³ κ°μ νμ. ichiμ΄μΈμ λ€λ₯Έ λΆλΆμ λμ©μ λͺ¨λ μμ νλ€. κ·Έλ¦¬κ³ ν μ κ²°κ³Ό
twoλ₯Ό dueλ‘ μ°κΈ°λ‘ νλ€κ³ νμ
μμ κ°μ λ°©μ(λμ¨ν μ κΈ)μ μν΄μ λ²μ 컀νΈλ‘€μ΄ κ°λ₯νκΈ° λλ¬Έμ λκΈ°νλ‘ μΈν λ¬Έμ λ κ±°μ λ°μνμ§ μλλ€.
----
PragmaticVersionControlWithCVS
~cpp root@eunviho:~/tmpdir# vi sesame/number.txt ZERO ichi two three four five SIX
~cpp root@eunviho:~/tmpdir# vi aladdin/number.txt ZERO uno two three four five SIX
~cpp root@eunviho:~/tmpdir/aladdin# cvs commit -m "users like italian word of one" cvs commit: Examining . /home/CVSHOME/sesame/number.txt,v <-- number.txt new revision: 1.5; previous revision: 1.4 . . root@eunviho:~/tmpdir/sesame# cvs commit -m "must be japanese of word one" cvs commit: Examining . cvs commit: Up-to-date check failed for `number.txt' cvs [commit aborted]: correct above errors first! . . root@eunviho:~/tmpdir/sesame# cvs update cvs update: Updating . RCS file: /home/CVSHOME/sesame/number.txt,v retrieving revision 1.4 retrieving revision 1.5 Merging differences between 1.4 and 1.5 into number.txt rcsmerge: warning: conflicts during merge cvs update: conflicts found in number.txt C number.txt3λ²μ¬μμ μ μ μλ―, λμΌν μ€μ μμ ν κ²½μ°μλ μΆ©λμ΄ μΌμ΄λλ€λ κ²μ μ μ μλ€.
μ΄λ°κ²½μ°μ rcsmerge λ κ·Έ λ³κ²½μ λ€μκ³Ό κ°μ΄ νννλ€.
~cpp ZERO <<<<<<< number.txt ichi ======= uno >>>>>>> 1.5 two three four five SIXμ΄ κ²½μ° λ³κ²½λ λ΄μ©μ <<<<<<< >>>>>>> μ κ°μ΄λ°μ μ‘΄μ¬νλ λ΄μ©μ΄ μΆ©λμ μΌμΌν¨ λΆλΆμ΄λ€.
~cpp root@eunviho:~/tmpdir/sesame# cvs log -r1.5 number.txt RCS file: /home/CVSHOME/sesame/number.txt,v Working file: number.txt head: 1.5 branch: locks: strict access list: symbolic names: initial: 1.1.1.1 sesame: 1.1.1 keyword substitution: kv total revisions: 6; selected revisions: 1 description: ---------------------------- revision 1.5 date: 2005-08-02 13:46:44 +0000; author: sapius; state: Exp; lines: +1 -1 users like italian word of one =============================================================================λ§μ§λ§ μΈκ°μ μ€μλ μ΄μ μ λ¨Όμ 체ν¬μΈ λ μμ€λ₯Ό μμ ν μ¬λκ³Ό κ·Έμ κ΄λ ¨λ μ£Όμ, λ³κ²½λ λΌμΈμ μ λ³΄κ° μΆλ ₯λλ€.
μ΄λ° μ 보λ₯Ό μ’ ν©ν΄μ μ΄μ μμ€μ μμ ν μ¬λκ³Ό ν μλ₯Ό ν΅ν΄μ μ¬λ°λ₯Έ κ²°κ³Όλ₯Ό μ»μ΄λΌ μ μλ€.
μ΄ κ²½μ°μλ ichiλ₯Ό μ°κΈ°λ‘ νλ€κ³ κ°μ νμ. ichiμ΄μΈμ λ€λ₯Έ λΆλΆμ λμ©μ λͺ¨λ μμ νλ€. κ·Έλ¦¬κ³ ν μ κ²°κ³Ό
twoλ₯Ό dueλ‘ μ°κΈ°λ‘ νλ€κ³ νμ
~cpp root@eunviho:~/tmpdir/sesame# vi number.txt ZERO ichi due three four five SIX . . root@eunviho:~/tmpdir/sesame# cvs commit -m "one is japanese, two is italian" cvs commit: Examining . /home/CVSHOME/sesame/number.txt,v <-- number.txt new revision: 1.6; previous revision: 1.5
PragmaticVersionControlWithCVS