U E D R , A S I H C RSS

Pragmatic Version Control WithCVS/What Is Version Control

1. What Is Version Control?

žฅ—„œ๋Š” „œ๋กœ‹ค๋ฅธ ˜๋ฏธ๋กœ ‚ฌšฉ๋˜๋Š” šฉ–ด˜  •˜๋ฅผ ๋ชฉ œผ๋กœ •œ‹ค.

1.1. the Repository

œ๋ฐœ ‘”„๋กœ Šธ˜ ๋ชจ๋“  ๋ฒ„ „ €žฅ๋˜๋Š” žฅ†Œด๋‹ค. ŒŒ‹œŠค…œ, DBˆ˜๋„ žˆœผ๋ฉฐ, –ด๋–ค ฒฝšฐ—๋Š” 2ฐ€ง€๋ฅผ ฐ™‚ฌšฉ•˜ธฐ๋„ •œ‹ค.
œ—๋Š” ๋„Šธ›Œฌ๋ฅผ šฉ•„œ ›ฒฉง€˜ „œ๋ฒ„— กดžฌ•˜๋Š”  €žฅ†Œ—  €žฅ•œ‹ค.
œ‘—๋Š” ๋„Šธ›Œฌ— —ฐฒฐ๋˜ง€ •Š€ ƒƒœ—„œ ž‘—…„ •˜  ด๋ฅผ ›„— ๋ฐ˜˜‹œœ ๋™ธฐ™”•˜๋Š” ๋งคปค๋‹ˆ˜„  œณต•˜ธฐ๋„ •จ. (ex CVS)

1.2. what should we store?

”„๋กœ Šธ˜ ธฐ๋ณธœผ๋กœ  €žฅ๋˜๋Š” †ŒŠคฝ”๋“œ. ™ธ— ๋ฒ„ „ด€๋ฆฌ— •„š”•œ ธฐƒ€ ŒŒผ๋“ค €žฅ•จ.
›น™:๋งŒ•”„๋กœ Šธ˜ „–‰—„œ —†œผ๋ฉด ณค๋ž€•œ ๋ชจ๋“  ฒƒด ๋ฒ„ „ด€๋ฆฌ˜ ๋Œ€ƒด๋œ‹ค. ฆ‰ ๋ฐ˜๋“œ‹œ ”„๋กœธ๋žจ˜ ๋นŒ๋“œ๋งŒ•„‹ˆ๋ฐจ›„— •„š”•œ‹๋„ ๋ฒ„ „ด€๋ฆฌ๋ฅผ •••  •„š”ฐ€ žˆ๋‹
ž๋™œผ๋กœ ƒ„ฑ๋˜๋Š” ž”—ฌŒŒ˜ ฒฝšฐ ตณด๋ฅผ ด€๋ฆฌ•  •„š”๋Š” —†๋‹ค. ๋Œ€‹ — Šนˆ˜•œ œ (ปดŒŒƒ€ž„. ๋„Šค)๋กœ •„š”•œ ฒฝšฐ—๋Š” ด€๋ฆฌ๋ฅผ •˜๋Š” ฒฝšฐ๋„ žˆ๋‹

1.3. workspaces and manipulate files

ง€—ญ ž‘—…ณต„(local workspace)๋Š” ›ฒฉ—  €žฅ๋œ ŒŒผ๋“ค„ ”„๋กœธ๋žจ˜ œ๋ฐœ„ œ„•„œ œ๋ฐœžฐ€ ฐ€ง€  žˆ๋Š” ปด“จ„— ๋ฐ›•„„œ ”„๋กœธ๋žจ„ ˆ˜ ••˜๋„๋ก •˜๋Š” ณต„ž„.
ฒดฌ•„›ƒ(checkout) :  €žฅ†Œ— žˆ๋Š” ŒŒ„ ž‘—…ณต„œผ๋กœ ๋ณต‚ฌ•ง€—ญ ๋ณต‚ฌ๋ณธ„ ƒ„ฑ.
 „†ก(commit) : ˆ˜ ••œ ŒŒ„  €žฅ†Œ— ๋ฐ˜˜‹œ‚ค๋Š” ฒƒ.
๋งŒ••œœ˜ ŒŒ„ 2๋ช…˜ ”„๋กœธ๋ž˜๋จธฐ€ ฐธฐ ˆ˜ •„ •œ๋’ค commit•œ‹ค๋ฉด ด๋•Œ˜ ƒ™ฉ„ –ด๋–ค‹œผ๋กœ ˜๋ฆฌ•  ฒƒฐ€?

1.4. project. module, and files

ธฐ๋ณธ œผ๋กœ Version Control —„œ ด€๋ฆฌ˜ ฐ€žฅ ž‘€ ๋‹œ„๋Š” ŒŒด๋‹ค. ™ธ— •œœ˜ ”„๋กœ Šธ ๋‹œ„๋กœ  „ฒด ”„๋กœธ๋žจ„ ด€๋ฆฌ•˜ , •˜๋ถ€— ๋ชจ๋“ˆ„ ธฐค€œผ๋กœ •„œ †ŒŠค๋ฅผ ด€๋ฆฌ•œ‹ค.

1.5. Where Do Versions Come In?

 €žฅ†Œ๋Š” ๋งณผ๋Š” ๋‹ค๋ฅดฒŒ ‚ฌ‹ค ๋งŽ€ ณผ •„ ฑฐณ„œ  €žฅ๋œ‹ค.  €žฅ†Œ๋Š” •œ๋ฒˆด๋ผ๋„ ฒดฌ•œ žˆ๋Š” ๋ชจ๋“  ๋ฒ„ „„ ๋ณดด€•œ‹ค.
ฐฐ˜ ฒดฌธ๋œ ๋ฒ„ „—๋Š” ฒดฌ•œ ๋‚ œ, ‹œฐ, ๋ณ€ฒฝ˜ ๋‚ดšฉ„  €žฅ•˜๋Š” ฃผ„ฌ•จ๋œ‹ค.
CVSฐ€ ฐธฐ˜ ŒŒ— • ‹•˜๋Š” ๋ฒ„ „˜ ๋ฒˆ˜ธ๋Š” ŒŒ˜ ๋ฒ„ „ผ๋ฟ  „ฒด ”„๋กœ Šธ˜ ๋ฒ„ „ˆ˜๋Š” —†๋‹ค. (žก๋‹ด:๋ฌผ๋ก  ๋”ฐ๋กœ ธฐ๋Šฅžˆง€ •Š„นŒ? -_-;)

1.6. Tags

๋ฒ„ „ ด€๋ฆฌ ‹œŠค…œ—„œ๋Š”  „ฒด˜ ŒŒผ, ๋ชจ๋“ˆ๋‹œ„, ”„๋กœ Šธ ๋‹œ„๋กœ — †•œ ŒŒผ๋“ค— ผฌ๋ฆฌ‘œผ๋Š” ฒƒ„ ๋ถ™ด๋Š” ฒƒฐ€๋Šฅ•˜‹ค.
PreRelease2
~cpp file1.java 1.11
file2.java 1.7
file3.java 1.10
ฒฝšฐ PreRelease2๋ฅผ ๋ถˆ๋Ÿฌ๋“คฒŒ ๋˜๋ฉด ƒธฐ˜ ๋ฒ„ „˜ ŒŒผ๋“คด ๋ถˆ๋Ÿฌ๋“ค—ฌง€ฒŒ ๋œ‹ค. ƒœธ๋Š” ”„๋กœ Šธ˜ „–‰— žˆ–ด„œ ‘š”•œ ด ๋ฐœƒ•œ ‹œ „ ธฐ๋ก•˜๋Š” ฒƒœผ๋กœ ‚ฌšฉ๋˜๋Š” ฒƒ๋„ ฐ€๋Šฅ•˜‹ค.

1.7. Branches

œ๋ฐœ‘‹•(mainline) : ผ๋ฐ˜ œ๋ฐœ™˜ฒฝ•˜—„œ œ๋ฐœž๋“ค€ ๋™•œ ฝ”๋“œ ธฐ๋ฐ˜„ ฐ€ง€  ž‘—…„ •œ‹ค. ฒดฌ•„›ƒ, œ •Œ„ ๋งŒ๋“ค–ด„œ, ๋ณ€ฒฝ‚ฌ•„ ฒดฌ•˜๋ฉด ๋ชจ๋“  œ๋ฐœžฐ€ „œ๋กœ˜ ž‘—…„ ณตœ •˜ฒŒ ๋˜๋Š” ฒƒด๋‹ค. ด๋Ÿฌ•œ œ๋ฐœ๋ฆ„„ ปฌ–ด œ๋ฐœ‘‹•ด๋•จ.

ด๋Ÿฐ œ๋ฐœ‘‹•ƒ—„œ ๋งŒ•Šน • ‹œ —„œ ”„๋กœธ๋žจ˜ ๋ฆด๋ฆฌฆˆ ๋ฒ„ „™„„ฑ๋˜–ด„œ QAณผ •œผ๋กœ ๋“ค–ดฐ”๋‹  ƒฐ•ด๋ณดž. ด๋•Œ, ”„๋กœ Šธ˜‹ค๋ฅธ Œ€›๋“คณผ ๋™‹œ— œ๋ฐœ„ „–‰‹œœ ๋‚˜ฐ€๋ฉด„œ, QAณผ •—„œ ๋ฐœƒ๋œ ˜๋ช… ธ ๋ฒ„ธ๋ฅผ ๋ณธ๋ž˜˜ œ๋ฐœ‘‹•ƒ— ๋ฐ˜˜‹œ‚คธฐ œ„•„œ ๋งŒ๋“ค–ด„ œ๋…ž„. (ธ๋ฆผžˆ–ด••ฐ€ ‰ฌšธ๋“ฏ. ธ€๋งŒ –ด„œ๋Š” SE๋ฅผ ๋“ฃง€ •Š€ ƒ •ž˜๋“ค–ด๋ณดž„.)

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

๋ฒ„ „ ๋ฒˆ˜
mainline : 1.14 -> 1.15
branches : 1.14.2.1 -> 1.14.2.2

1.8. Merging

๋ธŒ๋žœ˜๋ฅผ šฉ•˜๋ฉด •œ๋ช…˜ œ๋ฐœžฐ€ •œœ˜ ปด“จ„ฐ๋ฅผ ฐ€ง€ ๋„ ๋ฆด๋ฆฌฆˆ ๋ฒ„ „˜ ๋ฒ„ˆ˜ •ž‘—…ณผ mainlineƒ˜ ”„๋กœธ๋žจ˜ œ๋ฐœ„ ๋™‹œ— •˜๋Š” ฒƒฐ€๋Šฅ•˜‹ค.
ฒฝšฐ ๋ธŒ๋žœ˜—„œ ˆ˜ •๋œ ‚ฌ•ด mainlineƒ—๋„ ๋ฐ˜˜๋˜–ด••  •„š”ฐ€ žˆ„•Œ ด๋ฅผ ๋ณ‘•˜ ณผ •„ †ต•„œ •˜๋Š” ฒƒฐ€๋Šฅ•˜‹ค.

1.9. Locking Options

๋งŒ••œœ˜ ŒŒ„ ฐ€ง€  2๋ช…˜ ‚ฌ๋žŒด ๋™‹œ— ˆ˜ •ž‘—…„ ฑฐณ„œ ฒดฌ•˜ฒŒ๋œ‹ค๋ฉด –ด๋–ค ƒ™ฉด ๋ฒŒ–ดงˆนŒ? •„๋งˆ ด๋Œ€๋กœ๋Š” •œœ˜ ŒŒ“ฐ—ฌง€ ‹ค๋ฅธ ŒŒŒŒ„ ๋ฎ–ด “ฐ๋Š” ƒ™ฉด ๋ฒŒ–ดงˆ ฒƒด๋‹ค.
—„ฒฉ•œ ž ธˆ
ŒŒ„ ฒดฌ•„›ƒ•˜๋Š” ‹œ ๋ถ€„ŒŒผ๋“ค€ ธฐ „šฉ˜ †„œผ๋กœ ๋ณ€ฒฝ๋œ‹ค. ๋”ฐ๋„œ‹ค๋ฅธ ‚ฌ๋žŒŒŒ„ ฒดฌ•„›ƒ•˜๋”๋ผ๋„ ˆ˜ •„ •  ˆ˜๋Š” —†ฒŒ๋˜๋Š” ฒƒด๋‹ค.

๋‚™ด€  ž ธˆ
‹ˆ˜˜ ฒดฌ•„›ƒ„ —ˆšฉ•˜๋Š” ๋Œ€‹ — ฒดฌ„ •˜๋Š” ๋•Œ—,  €žฅ†Œ—  €žฅ๋œ ŒŒผ๋“ค„ ๋กœปฌ ž‘—…ณต„— ๋ฐ˜˜‹œ‚จ๋‹ค.

Original
~cpp 
public class File1 {
	public String getName() {
		return "Wibble";
	}
	public int getSize() {
		return 42;
	}
}

Fix 01
~cpp 
public class File1 {
	public String getName() {
		return "WIBBLE";
	}
	public int getSize() {
		return 42;
	}
}

Fix 02
~cpp 
public class File1 {
	public String getName() {
		return "Wibble";
	}
	public int getSize() {
		return 99;
	}
}

ƒธฐ™€ ฐ™€ ‹œผ๋กœ †ŒŠค๋ฅผ ˆ˜ ••œ๋’ค fix01, fix02๋ฅผ ˆœฐจ œผ๋กœ ฒดฌ•˜๋ฉด fix01— ˜•„œ  €žฅ†Œ— žˆ๋Š” ŒŒฐฑ‹ ๋˜—ˆธฐ ๋•Œ๋ฌธ— fix02ฐ€ ฒดฌธ ๋˜๋Š” ‹œ —„œ ถฉ๋Œ–ด๋‚˜ฒŒ ๋œ‹ค. ฒฝšฐ CVS๋Š” fix02˜ †ŒŠค—„œ fix01— ๋ฐ˜˜๋œ 3๋ฒˆงธ „˜ ๋ณ€ฒฝ๋‚ดšฉ„ ๋ณ‘••˜—ฌ ๋กœปฌ ž‘—… ณต„— ๋ฐ˜˜•˜  ฒดฌ•˜ฒŒ๋œ‹ค.
ผ๋ฐ˜ œผ๋กœ ๋‚™ด€  ž ธˆœผ๋กœ ตฌ˜„๋œ ~cpp VersionControl„ „ ˜•œ‹ค.

1.10. Configuration Management (CM)

˜•ƒด€๋ฆฌ(Configuration Management) : ”„๋กœ Šธ˜ „‹œ •„š”•œ ๋ชจ๋“  ฒƒ๋“ค„ ŒŒ•…•˜๋Š” ๋ฐฉ๋ฒ•.
----
PragmaticVersionControlWithCVS
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:24:02
Processing time 0.0293 sec