SVN μ μ΄μ©ν νμ κ΄λ¦¬
π svn? git?
λΉκ΅μ μ΅κ·Όμ κ°λ°μ μ ν κ°λ°μλ€μκ²λ μμν SVN
μ λν΄μ μμ보λ ν¬μ€νΈμ
λλ€.
νμ¬ μΌνκ³ μλ νμ¬μμλ 보μμ± μ΄μλ‘ νλμ Git
μ μ¬μ©νμ§ λͺ»νκΈ° λλ¬Έμ
μ΄λ₯Ό λμ ν΄μ SVN
μΌλ‘ νλ‘μ νΈ λ²μ κ΄λ¦¬λ₯Ό μ§ννκ³ μμ΅λλ€.
μ²μ μ ν΄λ³΄λ λ²μ κ΄λ¦¬ μμ€ν μ λν΄μ μμλ³΄κ³ μ΄λ₯Ό μ νμ©ν μ μλ λ°©λ²μ μ νκΈ° μν΄μ
μ°Ύμλ³΄κ³ μ 리ν λ΄μ©λ€μ 곡μ νλλ‘ νκ² μ΅λλ€. π
π κ·Έλ λ€λ©΄ SVNμ 무μμΈκ°μ?
μνμΉ μλΈλ²μ (Subversion)
μ νλ‘μ νΈ λ²μ κ΄λ¦¬λ₯Ό μν΄ μ¬μ©νλ νμκ΄λ¦¬ ν΄μ
λλ€.
λ λ€λ₯Έ νμκ΄λ¦¬ ν΄μ΄μλ CVS
μ λ€μκ³Ό κ°μ νκ³μ μ 극볡νκΈ° μν΄ κ°λ°λμμ΅λλ€.
π‘ CVS μ νκ³μ μ?
1. CVS μ μ₯μμ νμΌλ€μ μ΄λ¦μ λ³κ²½ν μ μμ΅λλ€.
2. CVS μμλ λλ ν 리μ μ΄λμ΄λ μ΄λ¦ λ³κ²½μ νμ©νμ§ μμ΅λλ€.
3. μ λμ½λλ‘ λ νμΌμ΄λ¦μ μ νμ μΌλ‘ μ§μν©λλ€.
SVN
μ ν΄λΌμ΄μΈνΈ μλ² λͺ¨λΈ
μ λ°λ₯΄λλ‘ κ΅¬νλμ΄μμΌλ©°,
μλ²λ μμ νλ μ»΄ν¨ν° νΉμ λ³λμ μ»΄ν¨ν°μ ν λΉνμ¬ μ¬μ©ν μ μμ΅λλ€.
π SVN μ μ€μμ§μ€μ λ²μ κ΄λ¦¬ μμ€ν μ λλ€.
SVN
μ Git
κ³Ό λ¬λ¦¬ μ€μμ§μ€μ λ²μ κ΄λ¦¬ μμ€ν
(Centralized version control)μ
λλ€.
μ΄ λ°©μμμλ κ°κ°μ κ°λ°μλ€μ΄ λ³ΈμΈμ μ½λ λ³κ²½ μ¬νμ νλμ μ€μ repository
μ
commit
νλ λ°©μμΌλ‘ μ΄μλ©λλ€.
μ΄ν΄κ° μ§κ΄μ μ΄λΌλ μ₯μ μ΄ μμ§λ§ μ€μ μλ²μ λ¬Έμ κ° μκΈΈ κ²½μ°μλ
μλΉμ€ μμ²΄κ° μ€λ¨λλ νμμ΄ λ°μν μ μλ€λ μ μ΄ λ¨μ μ λλ€.
λ°λ©΄ Git
μμλ μμ κ°μ΄ μ€μ repository
λ₯Ό ν΅μ§Έλ‘ 볡μ¬ν λ³λμ repository
λ₯Ό
κ° κ°λ°μλ€μ΄ κ°μ§κ³ μμΌλ©°, κ°λ°μλ λ³κ²½ μ¬νμ ν΄λΉ λ‘컬 repository
μ λ°μνκ³ ,
μ΅μ’
μ μΌλ‘ μ΄ λ³κ²½μ¬νμ μ€μ repository
μ λ°μνκΈ° μν΄ pull request
λ₯Ό μμ²ν©λλ€.
π SVN μμ μ¬μ©νλ μ©μ΄ μ 리
Repository
server
μ μν μ νλ©° κ°λ°μμ μ½λ λ° νμ€ν λ¦¬κ° κ΄λ¦¬λλ κ³³μ
λλ€.
κ°λ°μλ repository
λ‘λΆν° λ€λ₯Έ κ°λ°μκ° λ°μν μ½λλ₯Ό μ
λ°μ΄νΈ ν μ μκ³
μμ μ΄ μμ ν λ΄μμ λ°μνμ¬ λ€λ₯Έ κ°λ°μμ 곡μ ν μ μμ΅λλ€.
Trunk
Trunk
λ νλ‘μ νΈμ μ€μ¬μ΄ λλ κΈ°λ₯
κ³Ό κ°μ μ μ₯μμ
λλ€.
μ΅μ’
λ°μλμ΄μΌ νλ μμ€μ½λ λ²μ μ μ£Όλ‘ Trunk
μμ μ μ§ν©λλ€.
Tags
Tags
λ μ§νμ€μΈ νλ‘μ νΈμ νΉμ λ²μ μ€λ
μ·μ μλ―Έκ° μλ μ΄λ¦μ λΆμΈ κ²μ
λλ€.
μ΄λ₯Ό μν΄μλ ν΄λΉ λ²μ μ΄ λ€λ₯Έ λ²μ κ³Ό ꡬλΆλλ λͺ νν μ΄λ¦μ λΆμ΄λ κ²μ΄ μ’μ΅λλ€.
Branches
Branches
λ κ°λ° λμ€ νλ‘μ νΈ μ½λμ μλ‘μ΄ κ°μ§λ₯Ό μΉλ κ²μ
λλ€.
λ°°ν¬λ λ²μ μμ λ²κ·Έλ₯Ό μμ νκ±°λ, μλ‘μ΄ κΈ°λ₯μ μΆκ°ν λ νμ©ν©λλ€.
Working Copy
Working Copy
λ repository
μ μ€λ
μ·μ
λλ€.
repository
λ λͺ¨λ κ°λ°μκ° κ³΅μ νμ§λ§ μ§μ μ μΌλ‘ μμ νμ§λ μμ΅λλ€.
λμ κ°λ°μλ κ°μμ working copy
μ checkout
νκ³ λ³ΈμΈμ μμ
μ μ§νν©λλ€.
Commit
Commit
μ κ°λ°μκ° μμ±ν μ½λμ λ³κ²½μ¬νμ λ³ΈμΈμ working copy
μμ
μ€μ repository
λ‘ λ°μνλ κ²μ μλ―Έν©λλ€.
Commit
μμ
μ atomic
νκΈ° λλ¬Έμ μ λΆ μ±κ³΅νκ±°λ μ€ν¨νμ¬ μΌλΆλ§ λ°μλλ μΌμ μμ΅λλ€.
λ°μλ λ΄μ©μ λ€λ₯Έ κ°λ°μκ° λ³ΈμΈμ working copy
λ‘ μ
λ°μ΄νΈν μ μμ΅λλ€.
π SVN μ νμ©ν λ²μ κ΄λ¦¬ νν 리μΌ
1οΈβ£ svn repository μμ±νκΈ°
μ°μ μμ λ₯Ό μν λλ ν 리λ₯Ό μμ±νκΈ°μν΄ λ€μ λͺ λ Ήμ΄λ₯Ό μ λ ₯ν©λλ€.
> svnadmin create --fs-type fsfs svn-example
2οΈβ£ svn repository μ κ·Όλ°©μ μ€μ νκΈ°
repository
μ μ κ·ΌνκΈ° μν μ¬λ¬κ°μ§ λ°©λ²μ΄ μλλ° μ΄λ² μμ μμλ κ°μ₯ κΈ°λ³Έμ μΌλ‘
μ 곡ν΄μ£Όλ svnserve
λΌλ μλ² νλ‘κ·Έλ¨μ νμ©νκ² μ΅λλ€.
μ°μ μΈμ¦μ μ¬μ©ν λ°©λ²μ μ€μ νκΈ° μν΄ svn-example/conf/svnserve.conf
λ₯Ό μμ ν©λλ€.
[general]
## ...
## ...
password-db = passwd # μ΄ λΆλΆ μ£Όμμ μ κ±°ν©λλ€.
μ΄μ μ μ κ³μ μ 보λ₯Ό μ
λ ₯νκΈ° μν΄ passwd
νμΌμ μμ ν©λλ€.
[users]
# harry = harryssecret
# sally = sallyssecret
handhand = password
3οΈβ£ SVN μλ² μ€ννκΈ°
λ€μ λͺ λ Ήμ΄λ₯Ό ν΅ν΄ svn μλ²λ₯Ό λ°λͺ¬μΌλ‘ μ€νν©λλ€.
> svnserve -d -r svn-example
netstat
λͺ
λ Ήμ΄λ‘ νμ¬ λ°λͺ¬λͺ¨λμμ μλ²κ° μ΄λ €μλ€λ κ²μ νμΈν μ μμ΅λλ€.
> netstat -na | grep 3690
tcp4 0 0 *.3690 *.* LISTEN
4οΈβ£ trunk, branches, tags λλ ν 리 μμ±νκΈ°
λ§μ§λ§μΌλ‘ svn mkdir
λͺ
λ Ήμ΄λ‘ trunk, branches, tags
λλ ν 리λ₯Ό μμ±ν©λλ€.
> svn mkdir svn://localhost/svn-example/trunk --username handhand
> svn mkdir svn://localhost/svn-example/branches --username handhand
> svn mkdir svn://localhost/svn-example/tags --username handhand
π‘ λ§μ½ μ΄ κ³Όμ μμ λ§μ½ λ€μκ³Ό κ°μ μ€λ₯κ° λ°μνλ€λ©΄...
svn mkdir
λͺ
λ Ήμ΄ μν μ λ€μκ³Ό κ°μ μ€λ₯κ° λ°μν μλ μμ΅λλ€.
svn: E205007: λ‘κ·Έ λ©μμ§λ₯Ό ꡬνκΈ° μν΄ μΈλΆ νλ‘κ·Έλ¨μ μ¬μ©ν μ μμ΅λλ€. SVN_EDITOR νκ²½λ³μλ₯Ό μ€μ νμκ±°λ --message (-m) λλ --file (-F) μ΅μ
μ μ¬μ©νμΈμ
svn: E205007: νκ²½λ³μ SVN_EDITOR, VISUAL, EDITOR μ€ νλλ μ€μ νκ±°λ, 'editor-cmd' λ₯Ό ꡬμ±νμΌμ λͺ
μν΄μΌν©λλ€
μ΄ κ²½μ° λ³ΈμΈμ΄ μ¬μ©νκ³ μλ μμ μ€μ νμΌμ 맨 νλ¨μ λ€μκ³Ό κ°μ΄ μ€μ μ μΆκ°ν΄μ€λλ€.
μ μ κ²½μ° zsh
μ μ¬μ©νκ³ μκΈ° λλ¬Έμ zshrc
λ₯Ό μ΄μ΄μ λ€μ μ½λλ₯Ό μΆκ°ν΄μ€¬μ΅λλ€.
SVN_EDITOR=/usr/bin/vim
export SVN_EDITOR
μ΄ν λ³κ²½λ μ€μ μ μ μ©νκΈ° μν΄ λ€μ λͺ λ Ήμ΄λ₯Ό μνν΄μ€λλ€.
> soruce ~/.zshrc
5οΈβ£ λλ ν λ¦¬κ° μ¬λ°λ₯΄κ² μμ±λμλμ§ νμΈνκΈ°
svn list
λͺ
λ Ήμ΄λ₯Ό ν΅ν΄μ μ λλ ν 리λ€μ΄ λ¬Έμ μμ΄ μμ±λμλμ§ νμΈν©λλ€.
> svn list svn://localhost/svn-example
branches/
tags/
trunk/
6οΈβ£ SVN νλ‘μ νΈ μμ±νκΈ°
μμ±λ repository λ‘ μ΄λν λ€ νλ‘μ νΈ μμ μ μν 곡κ°μ μμ±ν©λλ€.
> cd svn-example
> mkdir workspace
κ·Έλ¦¬κ³ νλ‘μ νΈ μ§νμ μν μ νλ‘μ νΈλ₯Ό svn repository μ μ¬λ¦¬λλ°,
μ΄ μμ
μ import
λΌκ³ ν©λλ€.
> svn import workspace svn://localhost/svn-example/trunk --username handhand
7οΈβ£ SVN νλ‘μ νΈ κ°μ Έμ€κΈ°
repository μ λ±λ‘μ λ§μΉ νλ‘μ νΈλ₯Ό μ΄μ λ€λ₯Έ κ°λ°μλ€μ΄ κ°μ Έμ μμ μ ν μ μμ΅λλ€.
μ΄ κ³Όμ μ checkout
μ΄λΌκ³ νλ©° λ€μκ³Ό κ°μ λͺ
λ Ήμ΄λ‘ μν κ°λ₯ν©λλ€.
> svn co svn://localhost/svn-example --username handhand workspace
A workspace/branches
A workspace/tags
A workspace/trunk
A workspace/trunk/example.js
8οΈβ£ SVN λ³κ²½μ¬ν λ°μνκΈ°
μ΄μ μλ‘ λ€λ₯Έ μ¬λμ΄ λ³κ²½ μ¬νμ κ°μ Έμ€λ λ°©λ²μ κ°μ νκΈ° μν΄μ
sam
κ³Ό david
λΌλ κ°μμ κ°λ°μλ€μ μμ
곡κ°μ μμ±ν΄λ³΄κ² μ΅λλ€.
μ΄ λ κ°λ°μ λͺ¨λ λμΌν repository μμ μμ
νκΈ° λλ¬Έμ μ μ μ₯μλ₯Ό checkout
ν©λλ€.
> mkdir sam
> svn co svn://localhost/svn-example --username handhand workspace
> mkdir david
> svn co svn://localhost/svn-example --username handhand workspace
μ΄ν sam
μ λ€μκ³Ό κ°μ΄ test.js
μ μλ‘μ΄ μ½λλ₯Ό μΆκ°ν©λλ€.
// test.js
console.log('hello svn!')
κ·Έλ¦¬κ³ svn status
λͺ
λ Ήμ΄λ‘ νμ¬ λ²μ κ΄λ¦¬ μνλ₯Ό νμΈν μ μμ΅λλ€.
> cd sam/workspace
> svn status
M trunk/test.js
μμ λ νμΌ λ΄μ©μ λ°μνκΈ° μν΄μ λ€μ commit
μ μνν©λλ€.
> svn commit -m "modify test.js"
μ μ‘μ€ trunk/test.js
νμΌ λ°μ΄ν° μ μ‘μ€ .done
Committing transaction...
컀λ°λ 리λΉμ 7.
μ΄μ david
μ μμ
곡κ°μμ μμ λ λ΄μ©μ κ°μ Έμ΅λλ€.
μ΄λ update
νΉμ up
λͺ
λ Ήμ΄λ₯Ό ν΅ν΄μ μν κ°λ₯ν©λλ€.
> svn up
Updating '.':
U trunk/test.js
μ
λ°μ΄νΈ λ 리λΉμ 7.
π κ·Έλ λ€λ©΄ ν¨μ¨μ μΈ SVN λ²μ κ΄λ¦¬ λ°©λ²μ?
SVN
μΌλ‘ λ²μ κ΄λ¦¬ μμ€ν
μ μ¬μ©ν κ²½μ° μ΄λ€ λ°©μμΌλ‘ μ μ₯μλ₯Ό κ΄λ¦¬ν μ§ μ νμ΄ νμν©λλ€.
ν° νμμ λ€μκ³Ό κ°μ΄ λ κ°μ§ λ°©λ²μ΄ μμ μ μμ΅λλ€.
trunk, branches, tags λ₯Ό μ΅μμ λλ ν λ¦¬λ‘ νκΈ°
κ° νλ‘μ νΈλ₯Ό μ΅μμ λλ ν λ¦¬λ‘ νκΈ°
νλ‘μ νΈ μ±κ²©μ λ°λΌ λ€λ₯΄κ² μ§λ§ μ μ μΈμκ³Ό κ·λͺ¨κ° ν¬μ§ μμ νλ‘μ νΈμμλ
μμ κ°μ κ΅¬μ‘°λ‘ μ§ννλλΌλ ν° λ¬Έμ κ° μμ κ² κ°λ€κ³ μκ°ν©λλ€.
νμ§λ§ νμ¬ μ κ° νμ¬μμ μ§ννκ³ μλ νλ‘μ νΈμ κ·λͺ¨μμλ μμ κ°μ ꡬ쑰λ§μΌλ‘λ
κ΄λ¦¬κ° μ΄λ ΅λ€κ³ νλ¨μ΄ λ€μ΄ μ’λ ꡬ체μ μΈ μ λ΅μ΄ νμνμ΅λλ€.
μ΄λ₯Ό μν κ³ λ―Όκ³Ό μ΅μ’ μ μΌλ‘ κ²°μ λ κ΄λ¦¬ λ°©λ²μ λ€μ ν¬μ€νΈμμ λ§λ보λλ‘ νκ² μ΅λλ€. π
μ°Έκ³ μλ£
μνμΉ μλΈλ²μ - μν€λ°±κ³Ό, μ°λ¦¬ λͺ¨λμ λ°±κ³Όμ¬μ
Centralized vs Distributed Version Control Systems
'π¨βπ» web.dev > ops' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
GitHub Actions λ₯Ό νμ©ν release bot λ§λ€κΈ° (0) | 2023.04.24 |
---|---|
SVN μ μ΄μ©ν νμκ΄λ¦¬ PART.2 - SVN λΈλμΉ μ λ΅ μΈμ°κΈ° (1) | 2022.03.01 |
π¬ λκΈ