2 λΆ„ μ†Œμš”

SVNμ΄λž€?

SVN(SubVersion) μ΄λž€, Git/GitHub와 같은 ν˜•μƒκ΄€λ¦¬/μ†ŒμŠ€κ΄€λ¦¬ 도ꡬ이닀.
SVN은 λ‹€μˆ˜κ°€ μž‘μ—…ν•˜λŠ” ν”„λ‘œμ νŠΈμ˜ 경우 λ²„μ „κ΄€λ¦¬λ‚˜ 개인이 μˆ˜μ •ν•œ μ†ŒμŠ€μ˜ 톡합과 같은 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€.

ν˜•μƒκ΄€λ¦¬: μ†ŒμŠ€μ˜ λ³€ν™”λ₯Ό λŠμž„μ—†μ΄ κ΄€λ¦¬ν•˜λŠ” 것

ν”„λ‘œμ νŠΈμ˜ μ†ŒμŠ€λŠ” SVN μ„œλ²„μ˜ Trunk λΌλŠ” 곳에 μœ„μΉ˜ν•˜λŠ”λ°, 둜컬 ν™˜κ²½μ— Trunk의 μ†ŒμŠ€λ₯Ό λ‹€μš΄(Update) λ°›μ•„ μˆ˜μ • 및 μΆ”κ°€ ν›„ μ—…λ‘œλ“œ(Commit) ν•˜λŠ” 방식이닀.

μžμ‹ λ§Œμ˜ μ†ŒμŠ€λ₯Ό λ‹€λ₯Έ κ°œλ°œμžλ“€κ³Ό λ…λ¦½μ μœΌλ‘œ μž‘μ—…ν•˜λ €λ©΄ Branch(원본 μ†ŒμŠ€μ˜ λ‚˜λ­‡κ°€μ§€)λ₯Ό λ§Œλ“€μ–΄ μž‘μ—…ν•œ λ‹€μŒ, Mergeλ₯Ό ν•˜λ©΄ Trunk μ†ŒμŠ€μ™€ λ³‘ν•©λ˜λŠ” 방식이닀.

  • Git/GitHub와 μœ μ‚¬ν•˜λ‹€.

μš©μ–΄ 정리

Repository: ν”„λ‘œμ νŠΈ 파일 및 λ³€κ²½ 정보가 μ €μž₯λ˜λŠ” μž₯μ†Œ
Checkout: μ €μž₯μ†Œμ—μ„œ μ΅œμ‹  λ²„μ „μ˜ μ†ŒμŠ€μ½”λ“œλ₯Ό 졜초둜 λ°›μ•„μ˜€λŠ” 것
Import: Repository에 맨 처음 νŒŒμΌλ“€μ„ μ±„μš°λŠ” 것
Export: 버전 관리 νŒŒμΌλ“€μ„ λΊ€ 순수 파일만 λΉΌλ‚΄λŠ” 것
Update: 둜컬 μ €μž₯μ†Œμ— μžˆλŠ” νŒŒμΌλ“€μ„ μ €μž₯μ†Œμ˜ μ΅œμ‹  λ²„μ „μœΌλ‘œ λ‚΄λ € λ°›κΈ°
Commit: 둜컬 μ €μž₯μ†Œμ˜ λ³€κ²½λœ λ‚΄μš©μ„ μ„œλ²„λ‘œ 전솑 / Checkoutν•œ 파일의 μˆ˜μ •μ‚¬ν•­μ„ 갱신함
Revert: 둜컬 μ €μž₯μ†Œμ˜ λ‚΄μš©μ„ 이전 μƒνƒœλ‘œ 돌림
Add: 버전관리 λŒ€μƒμœΌλ‘œ 파일 등둝
Trunk: 개발 μ†ŒμŠ€λ₯Ό commitν–ˆμ„ λ•Œ 개발 μ†ŒμŠ€κ°€ λͺ¨μ—¬μ§€λŠ” κ³³ / ν”„λ‘œμ νŠΈμ—μ„œ κ°€μž₯ 쀑심이 λ˜λŠ” 메인 디렉토리(μ†ŒμŠ€μ™€ 파일 포함)
Branch: Trunkμ—μ„œ 뢄리/λ³΅μ‚¬ν•œ μ†ŒμŠ€λ‘œ, 버전 별 λ°°ν¬νŒμ„ λ§Œλ“€κ±°λ‚˜ Trunk와 λ³„λ„λ‘œ μš΄μ˜ν™˜κ²½μ„ μœ„ν•œ μ•ˆμ •ν™”λœ μ†ŒμŠ€ 관리 λͺ©μ 
Tag: νŠΉμ • μ‹œμ μ˜ μƒνƒœ 보쑴 λͺ©μ μœΌλ‘œ μ‚¬μš©ν•¨ / μž₯기적으둜 1.0, 1.1 λ“±μ˜ 버전 λ³„λ‘œ μ†ŒμŠ€μ½”λ“œλ₯Ό λ”°λ‘œ μ €μž₯

μž₯점

  • μ›μžμ  컀밋을 μ§€μ›ν•˜λ―€λ‘œ λ‹€λ₯Έ μ‚¬μš©μžμ˜ 컀밋과 엉킀지 μ•ŠμŒ -> μ‹€νŒ¨ μ‹œ λ‘€λ°± κ°€λŠ₯
  • 직관적
    파일과 λ””λ ‰ν† λ¦¬μ˜ μ‚­μ œ, 이동, 이름 λ³€κ²½, 볡사 지원
  • μ†ŒμŠ€νŒŒμΌ μ΄μ™Έμ˜ λ°”μ΄λ„ˆλ¦¬ νŒŒμΌλ„ 효율적으둜 μ €μž₯ κ°€λŠ₯
  • 디렉터리도 버전 관리 κ°€λŠ₯
  • μ €μž₯μ†Œμ˜ 크기에 상관 없이 μΌμ •ν•œ μ‹œκ°„ μ•ˆμ— κ°€μ§€μΉ˜κΈ°(branch)λ‚˜ νƒœκ·Έ κ°€λŠ₯
  • 처리 속도가 μƒλŒ€μ μœΌλ‘œ 빠름

단점

  • μ†ŒμŠ€μ½”λ“œλŠ” Merge(병합)κ°€ κ°€λŠ₯ν•˜μ§€λ§Œ, λ°”μ΄λ„ˆλ¦¬ νŒŒμΌμ€ μ–΄λŠ ν•œ μͺ½μ„ 버릴 수 밖에 μ—†μŒ
  • κ°œλ³„ 개발자만의 개발 이λ ₯을 κ°€μ§ˆ 수 μ—†μŒ
  • .svn λ””λ ‰ν„°λ¦¬λ‘œ 인해 μ €μž₯μ†Œκ°€ λ‹€μ†Œ μ§€μ €λΆ„ν•΄λ³΄μž„
  • μž¦μ€ μ»€λ°‹μœΌλ‘œ 인해 리비전 λ²ˆν˜Έκ°€ 크게 증가할 수 있음
  • 좩돌 ν™•λ₯ μ΄ λ†’μŒ

Git(GitHub)μ™€μ˜ 차이점

기본 ꡬ쑰 차이

SVN
SVN은 쀑앙 μ„œλ²„μ—μ„œ 전체 μ½”λ“œ λ³€κ²½ 및 이λ ₯을 μ €μž₯ν•˜λŠ” 쀑앙집쀑식 ꡬ쑰λ₯Ό μ‚¬μš©ν•œλ‹€.
κ°œλ°œμžλ“€μ€ 쀑앙 μ„œλ²„μ™€ μ—°κ²°ν•΄μ•Ό ν•˜λ©°, μž‘μ—…ν•œ λ‚΄μš©μ„ 쀑앙 μ„œλ²„μ— μ»€λ°‹ν•˜κ³  μ΅œμ‹  λ³€κ²½ 사항을 λ°›μ•„μ™€μ•Όν•œλ‹€.

Git
Git은 λΆ„μ‚° ꡬ쑰λ₯Ό μ‚¬μš©ν•˜λ©°, 각 개발자의 둜컬 μ €μž₯μ†Œμ— 전체 μ½”λ“œ 및 λ³€κ²½ 이λ ₯이 λ³΅μ œλœλ‹€.
κ°œλ°œμžλ“€μ€ 둜컬 μ €μž₯μ†Œμ—μ„œ μž‘μ—…ν•˜κ³ , λ³€κ²½ 사항을 원격 μ €μž₯μ†Œμ™€ 동기화 ν•œλ‹€.
이둜 인해 μ˜€ν”„λΌμΈμ—μ„œλ„ μž‘μ—…μ΄ κ°€λŠ₯ν•˜λ‹€λŠ” μƒλŒ€μ  이점이 μžˆλ‹€.

μ›Œν¬ν”Œλ‘œμš°

SVN
SVN은 μž‘μ—… μ‹œμž‘ 전에 쀑앙 μ„œλ²„μ—μ„œ μ΅œμ‹  μ½”λ“œλ₯Ό λ°›μ•„μ˜¨ ν›„(Update), μž‘μ—…μ΄ λλ‚œ ν›„ 쀑앙 μ„œλ²„μ— λ³€κ²½ 사항을 반영(Commit)ν•œλ‹€.
λ³€κ²½ 사항이 κ²ΉμΉ˜λŠ” 경우 좩돌이 λ°œμƒν•  수 있고, 좩돌이 λ°œμƒν•˜λ©΄ 해결을 ν•΄μ•Όν•œ 컀밋이 κ°€λŠ₯ν•˜λ‹€.

Git
Git은 κ°œλ°œμžκ°€ 둜컬 μ €μž₯μ†Œμ—μ„œ λ…λ¦½μ μœΌλ‘œ μž‘μ—…ν•  수 있기 λ•Œλ¬Έμ—, μž‘μ—… ν›„ 둜컬 μ €μž₯μ†Œμ— μ»€λ°‹ν•˜κ³  원격 μ €μž₯μ†Œμ™€ 동기화 ν•  λ•Œλ§Œ 인터넷 연결이 ν•„μš”ν•˜λ‹€.
좩돌이 λ°œμƒν•  경우 λ‘œμ»¬μ—μ„œ μΆ©λŒμ„ ν•΄κ²°ν•˜κ³ , 원격 μ €μž₯μ†Œμ— 반영(Push)ν•œλ‹€.

브랜치 관리

SVN
SVN은 브랜치λ₯Ό λ§Œλ“€ λ•Œ 전체 νŒŒμΌμ„ λ³΅μ‚¬ν•˜μ—¬ μƒˆλ‘œμš΄ 디렉토리λ₯Ό μƒμ„±ν•˜λŠ” 방식을 μ‚¬μš©ν•œλ‹€.
브랜치λ₯Ό 생성할 λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ 파일이 μΆ”κ°€λ˜κ³ , 이둜 인해 μ €μž₯μ†Œμ˜ μš©λŸ‰μ΄ μ¦κ°€ν•œλ‹€.

Git
Git은 브랜치λ₯Ό λ§Œλ“€ λ•Œ 기쑴의 컀밋 νžˆμŠ€ν† λ¦¬λ₯Ό μ°Έμ‘°ν•˜λŠ” 방식을 μ‚¬μš©ν•œλ‹€.
λ”°λΌμ„œ 브랜치λ₯Ό 생성해도 μƒˆλ‘œμš΄ 파일이 μΆ”κ°€λ˜λŠ” 것이 μ•„λ‹ˆλ―€λ‘œ, μ €μž₯μ†Œμ˜ μš©λŸ‰μ΄ μ¦κ°€ν•˜μ§€ μ•ŠλŠ”λ‹€.

이 외에도 λ‹€μ–‘ν•œ 차이점이 μ‘΄μž¬ν•œλ‹€.
μ‹€μ œ ν˜„μ—…μ—μ„œλŠ” 두 도ꡬ λ‹€ 많이 μ‚¬μš©λ˜κ³  μžˆλ‹€.

참고자료

SVN μ΄λž€? SVN μ‚¬μš© 이유
[SVN] SVNμ΄λž€ ? μž₯점 , 단점 , μš©μ–΄ 정리

νƒœκ·Έ:

μΉ΄ν…Œκ³ λ¦¬:

μ—…λ°μ΄νŠΈ:

λŒ“κΈ€λ‚¨κΈ°κΈ°