대다수의 개발자들은 공유된 프로젝트를 수행하기 위해서 어떻게 할까?
누가, 언제, 무엇을, 어떻게 변경하였는지를 확인하고, 저장하는 것을 지칭한다.
변화에 대한 관리는 문서(documents), 컴퓨터 프로그램, 웹 사이트, 혹은 다른 정보의 집합체로 보관된다.
변경된 사항들은 수정번호(revision number), 수정단계(revision level)으로 일컫는다.
각각의 변경 사항들은 time-stamp, 수정한 사람의 이름 등과 연관되어 진다. 즉, 어느부분을 누가, 언제, 어떻게, 무엇을, 왜, 수정했는지가 보여지면, 동료(co-worker)에게 비교당하고, 저장되고, 합병된다.

로컬 컴퓨터에서 이루어지며, 사용자가 저장하거나 수정한 파일을 Version Database에 넣는 행위를 'Check in' 또는 'Commit'이라 부른다.
반대로 version Database에서 필요한 version의 정보 및 데이터를 가져오는 행위를 'Check out'이라 한다.
(Centralized Version Control Systems)

(Distributed Version Control Systems)

Server Computer의 Version Database에서 완전히 똑같은 Version Database를 각각의 local 환경에서도 구축한다.
각각의 사용자 (computer A/B)는 자신이 작업한 작업물 혹은 수정사항들을 자신의 local computer에 저장하면 local Version Database와 연결된 Server Computer Version Database에서도 수정이된다.

수정은 일반적으로 일련의 개발과정에서 발생하며, 각각의 분기점에서 뻗어나가, 새로운 기능을 추가한다. 이때 분기점(Branches)에서 기존 계획에 필요하거나 추가해야할 기능이라면, 더해지지만(merges) 그렇지 않은 경우 사라진다.
동시에 여러 개발자들이 자신들의 개발을 관리하도록 만든 시스템이다.
Apache Lincense 하의 오픈 소스로써, 원격으로 Software의 버전과 수정을 관리하는 시스템이다.
Software 개발자들은 Subversion을 통해, 현재 그리고 과거의 버전(소스코드, 웹 페이지, 문서)을 관리한다.
오픈 소스 커뮤니티는 Subversion을 널리 사용하고 있다.
free와 open source의 distributed version control system이다.
Git은 대량의 사람들 사이의 컴퓨터 파일과 그러한 파일을 관리하는 작업의 변화를 추적하는 version control system이다.
주로 소스코드의 관리를 위해 사용되지만, 모든 파일의 변화를 추적하기 위해 사용되곤 한다.
대표적인 분산 버전 관리 시스템으로 속도와 data의 통합을 목표로 발전하였다.
Linus Torvalds(리눅스 개발자)가/이 2005년에 Linux kernel의 개발을 위해 만들었으며, 다른 리눅스 개발자의 초기 개발자들과 함께 협력하여 만들었다.
Distributed Version Control은 버전 관리의 한 형태로, 개발자의 컴퓨터(로컬 환경)를 사용하여, 소스코드, 프로젝트의 버전들을 관리한다.

Centrailized Version Control System

Distributed Version Control System (DVCS)
모든 팀의 소스 코드는 원격의 central server에 저장된다.
각각의 멤버는 중앙 서버로 부터 'Check out'을 하기 위한 메시지(pull)를 보낸다.
로컬 환경에 각각의 중앙서버와 동일한 local 저장소가 있다. 따라서 개발자는 일시적으로 작업물에 대한 변경 사항들을 로컬 서버에 적용시킨다.
개발자들은 그들의 작업물을 완전히 적용시킬길 원한다면, 로컬 서버에서 중앙 서버로 밀어(push)달라는 메시지를 보낸다.
3단 구조로, 모든 프로젝트는 중앙 저장소로 가기전 프로젝트의 유지관리자들의 로컬 저장소에 저장된다.
개발자들은 동일한 로컬 복사본을 만들 수 있다.
중앙 저장소의 소스 코드의 변화들은 정기적으로 로컬 저장소와 융합된다.
개발자들은 새로운 분기점(branch)를 만들때, 자신의 로컬 저장소에서 만들고, 분기점의 소스 코드를 수정한다.
개발이 완료되면, 변화는 중앙 저장소에 통합된다.

Remote Repository
Local Repository
Staging Area
git init
git clone
git pull
git fetch
git add
git commit
git push
git을 사용하는 웹 기반의 hosting 서비스이다.