SlideShare une entreprise Scribd logo
1  sur  16
Télécharger pour lire hors ligne
최지웅(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

Contenu connexe

Tendances

서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드KwangSeob Jeong
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
Unreal python
Unreal pythonUnreal python
Unreal pythonTonyCms
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
 
무정지&무점검 서버 개발과 운영 사례
무정지&무점검 서버 개발과 운영 사례무정지&무점검 서버 개발과 운영 사례
무정지&무점검 서버 개발과 운영 사례Taehyun Kim
 
NDC 2015 삼시세끼 빌드만들기
NDC 2015 삼시세끼 빌드만들기NDC 2015 삼시세끼 빌드만들기
NDC 2015 삼시세끼 빌드만들기Hyunsuk Ahn
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기현철 조
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!pyrasis
 
Tdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalabilityTdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalability흥배 최
 
Introduction to GitHub
Introduction to GitHubIntroduction to GitHub
Introduction to GitHubNishan Bose
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)Heungsub Lee
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)Heungsub Lee
 
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기Sangik Bae
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019min woog kim
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
Confluence를 활용한 콘텐츠 협업 방법 - 모우소프트
Confluence를 활용한 콘텐츠 협업 방법 - 모우소프트Confluence를 활용한 콘텐츠 협업 방법 - 모우소프트
Confluence를 활용한 콘텐츠 협업 방법 - 모우소프트Atlassian 대한민국
 
Git 입문자를 위한 가이드
Git 입문자를 위한 가이드Git 입문자를 위한 가이드
Git 입문자를 위한 가이드chandler0201
 
3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐Terry Cho
 
Version Control History and Git Basics
Version Control History and Git BasicsVersion Control History and Git Basics
Version Control History and Git BasicsSreedath N S
 
[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법
[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법
[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법MinGeun Park
 

Tendances (20)

서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
Unreal python
Unreal pythonUnreal python
Unreal python
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
무정지&무점검 서버 개발과 운영 사례
무정지&무점검 서버 개발과 운영 사례무정지&무점검 서버 개발과 운영 사례
무정지&무점검 서버 개발과 운영 사례
 
NDC 2015 삼시세끼 빌드만들기
NDC 2015 삼시세끼 빌드만들기NDC 2015 삼시세끼 빌드만들기
NDC 2015 삼시세끼 빌드만들기
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
 
Tdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalabilityTdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalability
 
Introduction to GitHub
Introduction to GitHubIntroduction to GitHub
Introduction to GitHub
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
 
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
Confluence를 활용한 콘텐츠 협업 방법 - 모우소프트
Confluence를 활용한 콘텐츠 협업 방법 - 모우소프트Confluence를 활용한 콘텐츠 협업 방법 - 모우소프트
Confluence를 활용한 콘텐츠 협업 방법 - 모우소프트
 
Git 입문자를 위한 가이드
Git 입문자를 위한 가이드Git 입문자를 위한 가이드
Git 입문자를 위한 가이드
 
3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐
 
Version Control History and Git Basics
Version Control History and Git BasicsVersion Control History and Git Basics
Version Control History and Git Basics
 
[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법
[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법
[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법
 

En vedette

웹을 지탱하는 차세대 기술 @한국웹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
 
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)민태 김
 

En vedette (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
 
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
 

Similaire à [오픈소스컨설팅]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
 
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
 
git, 이해부터 활용까지
git, 이해부터 활용까지git, 이해부터 활용까지
git, 이해부터 활용까지jylee1229
 

Similaire à [오픈소스컨설팅]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 기본개념과 사용법 그리고 어플리케이션
 
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
 
git, 이해부터 활용까지
git, 이해부터 활용까지git, 이해부터 활용까지
git, 이해부터 활용까지
 

Plus de 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
 

Plus de 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