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.0242 sec