SlideShare a Scribd company logo
1 of 16
Download to read offline
최지웅(jchoi at osci.kr) 
Subversion vs Git - 엄청난 간략 비교 - 
주식회사 오픈소스컨설팅
2 
- Internal Use Only - 
버전 관리 필요성 기존의 파일 시스템 공유 등으로 문제 발생시 복구 프로젝트 진행 중 과거의 특정 시점으로 돌아가야 하는 경우 여러 사람이 같은 프로젝트에 참여할 경우, 각자가 수정한 부분을 팀원 전체가 동기화하는 과정을 자동화 소스 코드의 변경 사항을 추적 소스 코드에서 누가 수정했는지 추적 대규모 수정 작업을 더욱 안전하게 진행 마이너 버전(branch)로 프로젝트에 영향을 최소화 하면서 새로운 부분을 개발 병합(merge)로 검증이 끝난 후 새로이 개발된 부분을 메인코드에 통합 코드의 특정 부분에 대한 수정 사항 확인(diff)
3 
- Internal Use Only - 
버전 관리 시스템 종류 
“Copy – Modify – Merge” vs “Unlock – Modify – Lock ”
4 
- Internal Use Only - 
버전 관리 시스템 사용 용어 
용어 
설명 
중앙 저장소 
(Repository) 
원본 소스를 저장하고 있는 저장소 
작업 디렉토리 
(Working Copy) 
원본 저장소로부터 체크아웃을 통해 내려 받은 내 로컬 PC에 있는 작업 사본 디렉토리 
커밋(Commit) 
작업 디렉터리에서 변경, 추가 및 삭제된 파일을 원본 저장소인 서버에 적용하는 것 
갱신(Update) 
체크아웃을 받은 작업 디렉터리를 원본 저장소의 가장 최신 커밋된 버전까지 업데이트하는 명령어 
리비전(Revision) 
소스 파일을 수정하여 커밋하게 되면 일정한 규칙에 의해 숫자가 증가하며, 저장소에 저장된 각각의 파일 버전 
롤백(Roll Back) 
작업 디렉터리에 저장되어 있는 사본을 특정 리비전 또는 특정 시간으로 복원할 수 있도록 하는 명령어 버전 관리 시스템에서 일반적으로 사용되는 용어는 아래와 같음
5 
- Internal Use Only - 
일반적인 버전 관리 프로세스 
체크아웃(최초) 
(작업 및 테스트) 
업데이트 
커밋 
(작업 및 테스트) 
client server 
현재 리비전 전송( n ) 
리포지토리 내의 변경사항을 로컬에 
반영 
변경사항 저장 및 로그 기록 
상태 체크 
리비전 n 이후의 변경사항이 있는가? 
(충돌 해결) 
중앙 리포지토리 내에서 로컬 복사 후 변경한 사본을 커밋하는 방식으로 진행
6 
- Internal Use Only - 
Subversion, Git 간략 비교 
구분 
Subversion 
Git 
시초 
CVS 문제점1)을 극복하기 위해 CVS 개발자들에 의해 2000년에 새롭게 시작 
2005년 4월 BitKeeper 논쟁2) 이후 리눅스를 만든 리누스 토발즈에 의해 시작 
리포지토리 모델 
클라이언트-서버 모델 
분산형(Distributed) 
동시성 모델 
Merge, Lock 
병합(Merge) 
라이선스 
Apache 
GNU GPL 라이선스 
지원 플랫폼 
윈도우, 유닉스, 리눅스 
윈도우, 유닉스, 리눅스 
사용언어 
C 
C, shell scripts, Perl 
보안 
Numbers 
SHA-1 hashes 
1)디렉토리, 파일 이름 변경이 불가능하고, 속도가 느리며 커밋 실패시 롤백이 지원되지 않아 소스 관리의 어려움 
2)2002년에 리눅스 커널 프로젝트는 상용DVCS 시스템인 bitKepper를 사용하기 시작했다. 2005년에는 리눅스 커널을 개발하는 커뮤니티와 BitKeeper를 개발하는 커머셜 회사간에 관계에 문제가 생기면서, 툴의 무료 사용권이 사라지게 됨. 이 사건으로 BitKeeper 기능을 토대로 새로운 버전관리 툴을 만드는 계기가 됨
7 
- Internal Use Only - 
Subversion 개요 CVS를 개발하던 개발자들이 CVS가 가지고 있던 문제를 해결하고자 완전히 새로운 아키텍처를 적용하여 새롭게 만든 솔루션 커밋 단위가 파일이 아니라 체인지셋 
CVS에서라면 여러 개의 파일을 한꺼번에 커밋하더라도 각각의 파일마다 리비전이 다름 
Subversion에서는 파일별 리비전이 없고 한번 커밋할 때마다 변경 사항별로 리비전이 하나씩 증가 CVS에 비해 엄청나게 빠른 업데이트/브랜칭/태깅 시간 CVS와 거의 동일한 사용법으로 기존 사용자 유도 파일 이름변경, 이동, 디렉터리 버전 관리도 지원 원자적(atomic) 커밋 
CVS에서는 여러 파일을 커밋하다가 어느 한 파일에서 커밋이 실패했을 경우 앞의 파일만 커밋이 적용되고 뒤의 파일들은 그대로 남음 
Subversion은 여러 개의 파일을 커밋하더라도 커밋이 실패하면 모두 이전 상태로 회귀 양방향 데이터 전송으로 네트워크 소통량(트래픽) 최소화. 트리별, 파일별 접근 제어 리스트. 저장소 쓰기 접근을 가진 개발자라도 소스 변경 제어가능 저장소/프로젝트별 환경 설정 가능
8 
- Internal Use Only - 
Subversion 리포지토리 구조 
tags 
branches 
trunk 
Project 1 
Root 
Project 2 
tags 
branches 
trunk 
tags 
trunk 
Project 1 
Repository parent dir 
Project 2 
tags 
trunk 
One repository, many projects 
One project per repository 
branches 
branches 여러 가지 방식의 리포지토리 구조를 생성하여 사용하는 것이 가능함
9 
- Internal Use Only - 
Subversion 작업유형 
svn checkout 
svn update 
Create a local copy 
svn add 
svn move 
svn delete 
Make changes 
svn status -u 
See what was changed 
in the repository in the meantime 
svn update 
Update your local copy 
svn diff 
svn resolved 
Resolve conflicts 
(Merge your changes) 
svn commit 
Submit your changes 
105 
100 
106 
Subversion 
Repository 중앙 리포지토리 내에서 로컬 복사 후 변경한 사본을 커밋하는 방식으로 진행
10 
- Internal Use Only - 
서브버전 아키텍처 
Berkley DB 
FSFS 
Subversion 
Repository 
Client Interface 
Repository Interface 
GUI clients 
Cmd line 
clients 
Client 
Library 
Working Copy Management 
Library 
Access Protocol 
DAV 
SVN 
Local 
Apache 
mod_dav 
mod_dav_ svn 
svnserve 
"file" protocol 
SSH 
sshd 
Intranetwork 다양한 클라이언트 인터페이스를 통해 각 리포지토리에 접근하여 작업 가능
11 
- Internal Use Only - 
Git 개요 리눅스 커널 커뮤니티와 BitKeeper를 개발하는 커머셜 회사간에 관계에 문제가 발생하면서 리누스 토발즈에 의해 새롭게 만들어 버전 관리 솔루션 Branching and Merging 
새로운 패치, 아이디어를 위해 브랜치를 생성하고 커밋 후 다시 메인 코드로 병합이 가능 Small and fast 
모든 동작들을 우선적으로 로컬에서 실시하게 된다. 따라서, 이것은 서버와 연동하기 위해 네트워크를 타지 않아도 되기 때문에 속도면에서 여러 가지로 엄청난 장점 분산형 개발 모델 
각각의 작업환경에서 별도로 작업한 소스들은 언제든지 메인서버로 업로드하고 merge가 가능 데이터 안전 
모든 파일은 체크썸 검사를 하고, 다운을 받을 때에도 다시 실시를 하여 Git에서 모든 bit까지 보장 스테이징 모드 
모든 파일은 스테이징(로컬) 영역에 추가되고 서버의 리포지토리에 커밋되는 두 단계로 구성
12 
- Internal Use Only - 
Git 작업 유형 명령어들을 로컬에서 실시하고 나중에 서버에 올리는 방식을 사용 기존의 svn에서 commit이 1. 소스를 수정하고, 2. 저장소로 업로드 하는 2 단계를 각각의 명령어로 분리하여 중간에 로컬에서 일하다가 저장소에 적용하기 전의 잠재적인 한 번의 단계를 거침 한 번의 명령으로 바로 적용되는 SVN과는 달리 2번의 명령을 실행해야 마침내 서버에 있는 저장소로 업로드 "git commit -a" 의 명령을 통해서 다른 버전관리 프로그램들과 같이 이용하는 것도 가능 기존의 버전 관리 시스템과는 다른 로컬 영역의 저장소의 2단계를 가짐
13 
- Internal Use Only - 
분산형 개발 아키텍처 
<통합 관리 워크플로우 모델> 각 팀원의 역할을 분담해서 한 명은 통합을 전담으로 수행 다른 개발자는 각자 부분 개발에 집중을 하는 식으로 역할 분담 팀이 커질수록 복수의 repository를 쉽게 구성 가능 하위 팀들을 묶어주는 통합 관리자, 그리고 전체를 통합하는 관리자로 더 세분화해서 구성하는 것이 가능
14 
- Internal Use Only - 
Git 성능 
Operation 
상세 테스트 
Git 
SVN 
Commit Files (A) 
Add, commit and push 113 modified files (2164+, 2259-) 
0.64 
2.60 
4x 
Commit Images (B) 
Add, commit and push 1000 1k images 
1.53 
24.70 
16x 
Diff Current 
Diff 187 changed files (1664+, 4859-) against last commit 
0.25 
1.09 
4x 
Diff Recent 
Diff against 4 commits back (269 changed/3609+,6898-) 
0.25 
3.99 
16x 
Diff Tags 
Diff two tags against each other (v1.9.1.0/v1.9.3.0 ) 
1.17 
83.57 
71x 
Log (50) 
Log of the last 50 commits (19k of output) 
0.01 
0.38 
31x 
Log (All) 
Log of all commits (26,056 commits - 9.4M of output) 
0.52 
169.20 
325x 
Log (File) 
Log of the history of a single file (array.c - 483 revs) 
0.60 
82.84 
138x 
Update 
Pull of Commit A scenario (113 files changed, 2164+, 2259-) 
0.90 
2.82 
3x 
Blame 
Line annotation of a single file (array.c) 
1.91 
3.04 
1x 거의 대부분의 작업에서 서브버전 대비 엄청난 성능차를 보이고 있음
15 
- Internal Use Only - 
요약 
전세계 대부분의 오픈소스 프로젝트가 SVN에서 Git 형태로 변경되고 있으며, 국내 일부 개발사(게임사, 커머스 등)에서 상당수 사용하고 있음
16 
- Internal Use Only - 
요약 
OPEN SHARE CONTRIBUTE ADOPT REUSE

More Related Content

What's hot

버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git민태 김
 
[NDC16] Effective Git
[NDC16] Effective Git[NDC16] Effective Git
[NDC16] Effective GitChanwoong Kim
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기Brian Hong
 
서비스 지향 아키텍쳐 (SOA)
서비스 지향 아키텍쳐 (SOA)서비스 지향 아키텍쳐 (SOA)
서비스 지향 아키텍쳐 (SOA)Terry Cho
 
[132] rust
[132] rust[132] rust
[132] rustNAVER D2
 
자바 서버 애플리케이션 아키텍처 안티 패턴
자바 서버 애플리케이션 아키텍처 안티 패턴자바 서버 애플리케이션 아키텍처 안티 패턴
자바 서버 애플리케이션 아키텍처 안티 패턴Sungchul Park
 
오픈소스 GIS 개요
오픈소스 GIS 개요오픈소스 GIS 개요
오픈소스 GIS 개요slhead1
 
BlueHat v17 || Dangerous Contents - Securing .Net Deserialization
BlueHat v17 || Dangerous Contents - Securing .Net Deserialization BlueHat v17 || Dangerous Contents - Securing .Net Deserialization
BlueHat v17 || Dangerous Contents - Securing .Net Deserialization BlueHat Security Conference
 
오픈소스 GIS의 이해 - OSgeo Projects 중심
오픈소스 GIS의 이해 - OSgeo Projects 중심오픈소스 GIS의 이해 - OSgeo Projects 중심
오픈소스 GIS의 이해 - OSgeo Projects 중심MinPa Lee
 
Proj4를 이용한 좌표계 변환
Proj4를 이용한 좌표계 변환Proj4를 이용한 좌표계 변환
Proj4를 이용한 좌표계 변환BJ Jang
 
게임엔진과 공간정보 3D 콘텐츠 융합 : Cesium for Unreal
게임엔진과 공간정보 3D 콘텐츠 융합 : Cesium for Unreal게임엔진과 공간정보 3D 콘텐츠 융합 : Cesium for Unreal
게임엔진과 공간정보 3D 콘텐츠 융합 : Cesium for UnrealKyu-sung Choi
 
XSS - Do you know EVERYTHING?
XSS - Do you know EVERYTHING?XSS - Do you know EVERYTHING?
XSS - Do you know EVERYTHING?Yurii Bilyk
 
게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여iFunFactory Inc.
 
지리정보체계(GIS) - [4] QGIS를 이용한 밀도 추정
지리정보체계(GIS) - [4] QGIS를 이용한 밀도 추정 지리정보체계(GIS) - [4] QGIS를 이용한 밀도 추정
지리정보체계(GIS) - [4] QGIS를 이용한 밀도 추정 Byeong-Hyeok Yu
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...Amazon Web Services Korea
 
[24]안드로이드 웹뷰의 모든것
[24]안드로이드 웹뷰의 모든것[24]안드로이드 웹뷰의 모든것
[24]안드로이드 웹뷰의 모든것NAVER Engineering
 
오픈 소스 GIS와 OSGeo
오픈 소스 GIS와 OSGeo오픈 소스 GIS와 OSGeo
오픈 소스 GIS와 OSGeoSANGHEE SHIN
 
대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐
대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐
대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐Terry Cho
 
[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들
[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들
[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들Brian Hong
 

What's hot (20)

버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
 
[NDC16] Effective Git
[NDC16] Effective Git[NDC16] Effective Git
[NDC16] Effective Git
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
서비스 지향 아키텍쳐 (SOA)
서비스 지향 아키텍쳐 (SOA)서비스 지향 아키텍쳐 (SOA)
서비스 지향 아키텍쳐 (SOA)
 
[132] rust
[132] rust[132] rust
[132] rust
 
자바 서버 애플리케이션 아키텍처 안티 패턴
자바 서버 애플리케이션 아키텍처 안티 패턴자바 서버 애플리케이션 아키텍처 안티 패턴
자바 서버 애플리케이션 아키텍처 안티 패턴
 
오픈소스 GIS 개요
오픈소스 GIS 개요오픈소스 GIS 개요
오픈소스 GIS 개요
 
BlueHat v17 || Dangerous Contents - Securing .Net Deserialization
BlueHat v17 || Dangerous Contents - Securing .Net Deserialization BlueHat v17 || Dangerous Contents - Securing .Net Deserialization
BlueHat v17 || Dangerous Contents - Securing .Net Deserialization
 
오픈소스 GIS의 이해 - OSgeo Projects 중심
오픈소스 GIS의 이해 - OSgeo Projects 중심오픈소스 GIS의 이해 - OSgeo Projects 중심
오픈소스 GIS의 이해 - OSgeo Projects 중심
 
Proj4를 이용한 좌표계 변환
Proj4를 이용한 좌표계 변환Proj4를 이용한 좌표계 변환
Proj4를 이용한 좌표계 변환
 
게임엔진과 공간정보 3D 콘텐츠 융합 : Cesium for Unreal
게임엔진과 공간정보 3D 콘텐츠 융합 : Cesium for Unreal게임엔진과 공간정보 3D 콘텐츠 융합 : Cesium for Unreal
게임엔진과 공간정보 3D 콘텐츠 융합 : Cesium for Unreal
 
XSS - Do you know EVERYTHING?
XSS - Do you know EVERYTHING?XSS - Do you know EVERYTHING?
XSS - Do you know EVERYTHING?
 
게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여
 
HCL AppScan 10 のご紹介
HCL AppScan 10 のご紹介HCL AppScan 10 のご紹介
HCL AppScan 10 のご紹介
 
지리정보체계(GIS) - [4] QGIS를 이용한 밀도 추정
지리정보체계(GIS) - [4] QGIS를 이용한 밀도 추정 지리정보체계(GIS) - [4] QGIS를 이용한 밀도 추정
지리정보체계(GIS) - [4] QGIS를 이용한 밀도 추정
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
 
[24]안드로이드 웹뷰의 모든것
[24]안드로이드 웹뷰의 모든것[24]안드로이드 웹뷰의 모든것
[24]안드로이드 웹뷰의 모든것
 
오픈 소스 GIS와 OSGeo
오픈 소스 GIS와 OSGeo오픈 소스 GIS와 OSGeo
오픈 소스 GIS와 OSGeo
 
대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐
대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐
대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐
 
[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들
[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들
[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들
 

Viewers also liked

웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스
웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스
웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스민태 김
 
외계어 스터디 3/5 function and object
외계어 스터디 3/5   function and object외계어 스터디 3/5   function and object
외계어 스터디 3/5 function and object민태 김
 
외계어 스터디 4/5 Event & Library
외계어 스터디 4/5 Event & Library외계어 스터디 4/5 Event & Library
외계어 스터디 4/5 Event & Library민태 김
 
Svn에서 git으로 이주하기
Svn에서 git으로 이주하기Svn에서 git으로 이주하기
Svn에서 git으로 이주하기Seunghwa Song
 
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)민태 김
 

Viewers also liked (6)

웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스
웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스
웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스
 
외계어 스터디 3/5 function and object
외계어 스터디 3/5   function and object외계어 스터디 3/5   function and object
외계어 스터디 3/5 function and object
 
외계어 스터디 4/5 Event & Library
외계어 스터디 4/5 Event & Library외계어 스터디 4/5 Event & Library
외계어 스터디 4/5 Event & Library
 
Svn에서 git으로 이주하기
Svn에서 git으로 이주하기Svn에서 git으로 이주하기
Svn에서 git으로 이주하기
 
Git - Level 2
Git - Level 2Git - Level 2
Git - Level 2
 
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
 

Similar to [오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함

30기 정성학 "Git, sourcetree 사용법"
30기 정성학 "Git, sourcetree 사용법"30기 정성학 "Git, sourcetree 사용법"
30기 정성학 "Git, sourcetree 사용법"hyu_jaram
 
[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)Ildoo Kim
 
Git 분산버전관리 시스템(1)
Git 분산버전관리 시스템(1)Git 분산버전관리 시스템(1)
Git 분산버전관리 시스템(1)Hyunjun Roh
 
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라NAVER D2
 
[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래NAVER D2
 
Git의 개념과 사용
Git의 개념과 사용Git의 개념과 사용
Git의 개념과 사용환민 홍
 
Git란 무엇인가?
Git란 무엇인가?Git란 무엇인가?
Git란 무엇인가?Kim Byoungsu
 
Git: A Motivating Introduction
Git: A Motivating IntroductionGit: A Motivating Introduction
Git: A Motivating IntroductionJongwook Choi
 
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발Jinuk Kim
 
Git 기본개념과 사용법 그리고 어플리케이션
Git 기본개념과 사용법 그리고 어플리케이션Git 기본개념과 사용법 그리고 어플리케이션
Git 기본개념과 사용법 그리고 어플리케이션Dabi Ahn
 
Git 입문자를 위한 가이드
Git 입문자를 위한 가이드Git 입문자를 위한 가이드
Git 입문자를 위한 가이드chandler0201
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기KwangSeob Jeong
 
리스펙토링 세미나 - Git, Github 알아보기
리스펙토링 세미나 - Git, Github 알아보기리스펙토링 세미나 - Git, Github 알아보기
리스펙토링 세미나 - Git, Github 알아보기Wooyoung Ko
 
Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성 Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성 rockplace
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱NAVER D2
 
Git & Github Seminar-1
Git & Github Seminar-1Git & Github Seminar-1
Git & Github Seminar-1sangyun han
 

Similar to [오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함 (20)

11. git basic
11. git basic11. git basic
11. git basic
 
Git
Git Git
Git
 
30기 정성학 "Git, sourcetree 사용법"
30기 정성학 "Git, sourcetree 사용법"30기 정성학 "Git, sourcetree 사용법"
30기 정성학 "Git, sourcetree 사용법"
 
[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)
 
Git 분산버전관리 시스템(1)
Git 분산버전관리 시스템(1)Git 분산버전관리 시스템(1)
Git 분산버전관리 시스템(1)
 
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
 
[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래
 
Git의 개념과 사용
Git의 개념과 사용Git의 개념과 사용
Git의 개념과 사용
 
Git란 무엇인가?
Git란 무엇인가?Git란 무엇인가?
Git란 무엇인가?
 
Git: A Motivating Introduction
Git: A Motivating IntroductionGit: A Motivating Introduction
Git: A Motivating Introduction
 
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
 
Git 기본개념과 사용법 그리고 어플리케이션
Git 기본개념과 사용법 그리고 어플리케이션Git 기본개념과 사용법 그리고 어플리케이션
Git 기본개념과 사용법 그리고 어플리케이션
 
Git 입문자를 위한 가이드
Git 입문자를 위한 가이드Git 입문자를 위한 가이드
Git 입문자를 위한 가이드
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기
 
2015 oce specification
2015 oce specification2015 oce specification
2015 oce specification
 
리스펙토링 세미나 - Git, Github 알아보기
리스펙토링 세미나 - Git, Github 알아보기리스펙토링 세미나 - Git, Github 알아보기
리스펙토링 세미나 - Git, Github 알아보기
 
Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성 Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱
 
Git 기본
Git 기본Git 기본
Git 기본
 
Git & Github Seminar-1
Git & Github Seminar-1Git & Github Seminar-1
Git & Github Seminar-1
 

More from Ji-Woong Choi

[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기
[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기
[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기Ji-Woong Choi
 
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020Ji-Woong Choi
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축Ji-Woong Choi
 
[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기
[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기
[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기Ji-Woong Choi
 
[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육
[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육
[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육Ji-Woong Choi
 
[오픈소스컨설팅] 2019년 클라우드 생존전략
[오픈소스컨설팅] 2019년 클라우드 생존전략[오픈소스컨설팅] 2019년 클라우드 생존전략
[오픈소스컨설팅] 2019년 클라우드 생존전략Ji-Woong Choi
 
[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기
[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기
[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기Ji-Woong Choi
 
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3Ji-Woong Choi
 
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3Ji-Woong Choi
 
[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12
[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12
[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12Ji-Woong Choi
 
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트Ji-Woong Choi
 
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항Ji-Woong Choi
 
OpenStack Summit 2017 참석후기
OpenStack Summit 2017 참석후기OpenStack Summit 2017 참석후기
OpenStack Summit 2017 참석후기Ji-Woong Choi
 
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick GuideJi-Woong Choi
 
[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1Ji-Woong Choi
 
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-RegionJi-Woong Choi
 
Docker Setting for Static IP allocation
Docker Setting for Static IP allocationDocker Setting for Static IP allocation
Docker Setting for Static IP allocationJi-Woong Choi
 
Scouter와 influx db – grafana 연동 가이드
Scouter와 influx db – grafana 연동 가이드Scouter와 influx db – grafana 연동 가이드
Scouter와 influx db – grafana 연동 가이드Ji-Woong Choi
 
[오픈소스컨설팅]Atlassian JIRA Quick Guide
[오픈소스컨설팅]Atlassian JIRA Quick Guide[오픈소스컨설팅]Atlassian JIRA Quick Guide
[오픈소스컨설팅]Atlassian JIRA Quick GuideJi-Woong Choi
 
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편Ji-Woong Choi
 

More from Ji-Woong Choi (20)

[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기
[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기
[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기
 
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
 
[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기
[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기
[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기
 
[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육
[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육
[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육
 
[오픈소스컨설팅] 2019년 클라우드 생존전략
[오픈소스컨설팅] 2019년 클라우드 생존전략[오픈소스컨설팅] 2019년 클라우드 생존전략
[오픈소스컨설팅] 2019년 클라우드 생존전략
 
[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기
[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기
[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기
 
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
 
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3
 
[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12
[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12
[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12
 
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
 
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
 
OpenStack Summit 2017 참석후기
OpenStack Summit 2017 참석후기OpenStack Summit 2017 참석후기
OpenStack Summit 2017 참석후기
 
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide
 
[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1
 
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
 
Docker Setting for Static IP allocation
Docker Setting for Static IP allocationDocker Setting for Static IP allocation
Docker Setting for Static IP allocation
 
Scouter와 influx db – grafana 연동 가이드
Scouter와 influx db – grafana 연동 가이드Scouter와 influx db – grafana 연동 가이드
Scouter와 influx db – grafana 연동 가이드
 
[오픈소스컨설팅]Atlassian JIRA Quick Guide
[오픈소스컨설팅]Atlassian JIRA Quick Guide[오픈소스컨설팅]Atlassian JIRA Quick Guide
[오픈소스컨설팅]Atlassian JIRA Quick Guide
 
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편
 

[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함

  • 1. 최지웅(jchoi at osci.kr) Subversion vs Git - 엄청난 간략 비교 - 주식회사 오픈소스컨설팅
  • 2. 2 - Internal Use Only - 버전 관리 필요성 기존의 파일 시스템 공유 등으로 문제 발생시 복구 프로젝트 진행 중 과거의 특정 시점으로 돌아가야 하는 경우 여러 사람이 같은 프로젝트에 참여할 경우, 각자가 수정한 부분을 팀원 전체가 동기화하는 과정을 자동화 소스 코드의 변경 사항을 추적 소스 코드에서 누가 수정했는지 추적 대규모 수정 작업을 더욱 안전하게 진행 마이너 버전(branch)로 프로젝트에 영향을 최소화 하면서 새로운 부분을 개발 병합(merge)로 검증이 끝난 후 새로이 개발된 부분을 메인코드에 통합 코드의 특정 부분에 대한 수정 사항 확인(diff)
  • 3. 3 - Internal Use Only - 버전 관리 시스템 종류 “Copy – Modify – Merge” vs “Unlock – Modify – Lock ”
  • 4. 4 - Internal Use Only - 버전 관리 시스템 사용 용어 용어 설명 중앙 저장소 (Repository) 원본 소스를 저장하고 있는 저장소 작업 디렉토리 (Working Copy) 원본 저장소로부터 체크아웃을 통해 내려 받은 내 로컬 PC에 있는 작업 사본 디렉토리 커밋(Commit) 작업 디렉터리에서 변경, 추가 및 삭제된 파일을 원본 저장소인 서버에 적용하는 것 갱신(Update) 체크아웃을 받은 작업 디렉터리를 원본 저장소의 가장 최신 커밋된 버전까지 업데이트하는 명령어 리비전(Revision) 소스 파일을 수정하여 커밋하게 되면 일정한 규칙에 의해 숫자가 증가하며, 저장소에 저장된 각각의 파일 버전 롤백(Roll Back) 작업 디렉터리에 저장되어 있는 사본을 특정 리비전 또는 특정 시간으로 복원할 수 있도록 하는 명령어 버전 관리 시스템에서 일반적으로 사용되는 용어는 아래와 같음
  • 5. 5 - Internal Use Only - 일반적인 버전 관리 프로세스 체크아웃(최초) (작업 및 테스트) 업데이트 커밋 (작업 및 테스트) client server 현재 리비전 전송( n ) 리포지토리 내의 변경사항을 로컬에 반영 변경사항 저장 및 로그 기록 상태 체크 리비전 n 이후의 변경사항이 있는가? (충돌 해결) 중앙 리포지토리 내에서 로컬 복사 후 변경한 사본을 커밋하는 방식으로 진행
  • 6. 6 - Internal Use Only - Subversion, Git 간략 비교 구분 Subversion Git 시초 CVS 문제점1)을 극복하기 위해 CVS 개발자들에 의해 2000년에 새롭게 시작 2005년 4월 BitKeeper 논쟁2) 이후 리눅스를 만든 리누스 토발즈에 의해 시작 리포지토리 모델 클라이언트-서버 모델 분산형(Distributed) 동시성 모델 Merge, Lock 병합(Merge) 라이선스 Apache GNU GPL 라이선스 지원 플랫폼 윈도우, 유닉스, 리눅스 윈도우, 유닉스, 리눅스 사용언어 C C, shell scripts, Perl 보안 Numbers SHA-1 hashes 1)디렉토리, 파일 이름 변경이 불가능하고, 속도가 느리며 커밋 실패시 롤백이 지원되지 않아 소스 관리의 어려움 2)2002년에 리눅스 커널 프로젝트는 상용DVCS 시스템인 bitKepper를 사용하기 시작했다. 2005년에는 리눅스 커널을 개발하는 커뮤니티와 BitKeeper를 개발하는 커머셜 회사간에 관계에 문제가 생기면서, 툴의 무료 사용권이 사라지게 됨. 이 사건으로 BitKeeper 기능을 토대로 새로운 버전관리 툴을 만드는 계기가 됨
  • 7. 7 - Internal Use Only - Subversion 개요 CVS를 개발하던 개발자들이 CVS가 가지고 있던 문제를 해결하고자 완전히 새로운 아키텍처를 적용하여 새롭게 만든 솔루션 커밋 단위가 파일이 아니라 체인지셋 CVS에서라면 여러 개의 파일을 한꺼번에 커밋하더라도 각각의 파일마다 리비전이 다름 Subversion에서는 파일별 리비전이 없고 한번 커밋할 때마다 변경 사항별로 리비전이 하나씩 증가 CVS에 비해 엄청나게 빠른 업데이트/브랜칭/태깅 시간 CVS와 거의 동일한 사용법으로 기존 사용자 유도 파일 이름변경, 이동, 디렉터리 버전 관리도 지원 원자적(atomic) 커밋 CVS에서는 여러 파일을 커밋하다가 어느 한 파일에서 커밋이 실패했을 경우 앞의 파일만 커밋이 적용되고 뒤의 파일들은 그대로 남음 Subversion은 여러 개의 파일을 커밋하더라도 커밋이 실패하면 모두 이전 상태로 회귀 양방향 데이터 전송으로 네트워크 소통량(트래픽) 최소화. 트리별, 파일별 접근 제어 리스트. 저장소 쓰기 접근을 가진 개발자라도 소스 변경 제어가능 저장소/프로젝트별 환경 설정 가능
  • 8. 8 - Internal Use Only - Subversion 리포지토리 구조 tags branches trunk Project 1 Root Project 2 tags branches trunk tags trunk Project 1 Repository parent dir Project 2 tags trunk One repository, many projects One project per repository branches branches 여러 가지 방식의 리포지토리 구조를 생성하여 사용하는 것이 가능함
  • 9. 9 - Internal Use Only - Subversion 작업유형 svn checkout svn update Create a local copy svn add svn move svn delete Make changes svn status -u See what was changed in the repository in the meantime svn update Update your local copy svn diff svn resolved Resolve conflicts (Merge your changes) svn commit Submit your changes 105 100 106 Subversion Repository 중앙 리포지토리 내에서 로컬 복사 후 변경한 사본을 커밋하는 방식으로 진행
  • 10. 10 - Internal Use Only - 서브버전 아키텍처 Berkley DB FSFS Subversion Repository Client Interface Repository Interface GUI clients Cmd line clients Client Library Working Copy Management Library Access Protocol DAV SVN Local Apache mod_dav mod_dav_ svn svnserve "file" protocol SSH sshd Intranetwork 다양한 클라이언트 인터페이스를 통해 각 리포지토리에 접근하여 작업 가능
  • 11. 11 - Internal Use Only - Git 개요 리눅스 커널 커뮤니티와 BitKeeper를 개발하는 커머셜 회사간에 관계에 문제가 발생하면서 리누스 토발즈에 의해 새롭게 만들어 버전 관리 솔루션 Branching and Merging 새로운 패치, 아이디어를 위해 브랜치를 생성하고 커밋 후 다시 메인 코드로 병합이 가능 Small and fast 모든 동작들을 우선적으로 로컬에서 실시하게 된다. 따라서, 이것은 서버와 연동하기 위해 네트워크를 타지 않아도 되기 때문에 속도면에서 여러 가지로 엄청난 장점 분산형 개발 모델 각각의 작업환경에서 별도로 작업한 소스들은 언제든지 메인서버로 업로드하고 merge가 가능 데이터 안전 모든 파일은 체크썸 검사를 하고, 다운을 받을 때에도 다시 실시를 하여 Git에서 모든 bit까지 보장 스테이징 모드 모든 파일은 스테이징(로컬) 영역에 추가되고 서버의 리포지토리에 커밋되는 두 단계로 구성
  • 12. 12 - Internal Use Only - Git 작업 유형 명령어들을 로컬에서 실시하고 나중에 서버에 올리는 방식을 사용 기존의 svn에서 commit이 1. 소스를 수정하고, 2. 저장소로 업로드 하는 2 단계를 각각의 명령어로 분리하여 중간에 로컬에서 일하다가 저장소에 적용하기 전의 잠재적인 한 번의 단계를 거침 한 번의 명령으로 바로 적용되는 SVN과는 달리 2번의 명령을 실행해야 마침내 서버에 있는 저장소로 업로드 "git commit -a" 의 명령을 통해서 다른 버전관리 프로그램들과 같이 이용하는 것도 가능 기존의 버전 관리 시스템과는 다른 로컬 영역의 저장소의 2단계를 가짐
  • 13. 13 - Internal Use Only - 분산형 개발 아키텍처 <통합 관리 워크플로우 모델> 각 팀원의 역할을 분담해서 한 명은 통합을 전담으로 수행 다른 개발자는 각자 부분 개발에 집중을 하는 식으로 역할 분담 팀이 커질수록 복수의 repository를 쉽게 구성 가능 하위 팀들을 묶어주는 통합 관리자, 그리고 전체를 통합하는 관리자로 더 세분화해서 구성하는 것이 가능
  • 14. 14 - Internal Use Only - Git 성능 Operation 상세 테스트 Git SVN Commit Files (A) Add, commit and push 113 modified files (2164+, 2259-) 0.64 2.60 4x Commit Images (B) Add, commit and push 1000 1k images 1.53 24.70 16x Diff Current Diff 187 changed files (1664+, 4859-) against last commit 0.25 1.09 4x Diff Recent Diff against 4 commits back (269 changed/3609+,6898-) 0.25 3.99 16x Diff Tags Diff two tags against each other (v1.9.1.0/v1.9.3.0 ) 1.17 83.57 71x Log (50) Log of the last 50 commits (19k of output) 0.01 0.38 31x Log (All) Log of all commits (26,056 commits - 9.4M of output) 0.52 169.20 325x Log (File) Log of the history of a single file (array.c - 483 revs) 0.60 82.84 138x Update Pull of Commit A scenario (113 files changed, 2164+, 2259-) 0.90 2.82 3x Blame Line annotation of a single file (array.c) 1.91 3.04 1x 거의 대부분의 작업에서 서브버전 대비 엄청난 성능차를 보이고 있음
  • 15. 15 - Internal Use Only - 요약 전세계 대부분의 오픈소스 프로젝트가 SVN에서 Git 형태로 변경되고 있으며, 국내 일부 개발사(게임사, 커머스 등)에서 상당수 사용하고 있음
  • 16. 16 - Internal Use Only - 요약 OPEN SHARE CONTRIBUTE ADOPT REUSE