VCS는 버전을 관리하는 시스템이다. 보통 코딩을 하고 코드 파일을 관리할 때 많이 사용한다고 생각하겠지만 이 시스템은 꼭 코드를 관리할때만 사용하는 것은 아니다. 코드 뿐만이 아니라 작업을 할 때 완성되는 모든 문서들을 관리할 수 있다.
버전 관리 시스템이 제대로 존재하지 않던 초기에 사람들은 자신의 로컬 컴퓨터에 디렉토리에 파일들을 모아 버전별로 이름을 붙여 관리하였다. 하지만 이 방식은 컴퓨터가 고장나서 안의 데이터가 한순간에 없어져 버릴 수도 있었고 사용자가 일일히 수동적으로 디렉토리를 관리해야 하기 때문에 불편하였다.
그래서 CVS, Subversion, Perforce와 같은 중앙집중식 버전 관리가 개발되었다.
중앙집중식 버전 관리는 중앙 서버에 파일들을 모아놓고 사용자가 그 파일들을 받아서 사용할 수 있다. 개발자들이 원하는 내용을 서버에 올려서 즉각적으로 동기화가 이루어지기 때문에 로컬에서 관리할 때보다 더 효율적이었고 다른 개발자와 함께 작업할 수 있게 되었다.
하지만 CVCS는 서버에 문제가 생기면 많은 개발자들이 일을 강제적으로 못하게 되고, 오프라인에서는 작업을 진행할 수 없다는 문제가 있었다.
중앙집중식 버전 관리의 문제를 해결하기 위해서 Git, Mercurial, Darcs와 같은 분산 버전 관리 시스템이 등장하게 되었다. 이 버전 관리는 서버에만 히스토리의 정보가 있는 것이 아니라 모든 개발자들이 동일한 히스토리 정보를 가지고 있을 수 있다.
그렇기 때문에 서버에 문제가 생기거나 서버가 다운이 되어도 각각의 개발자들이 동일한 히스토리를 가지고 있어서 서로의 정보를 이용해서 계속 일을 이어나갈 수가 있다. 또한 이 시스템은 오프라인에서도 일을 할 수가 있다.
서버는 private 서버 아니면 gitHub, Bitbucket와 같은 클라우드를 이용하는 경우도 있다.
2005년에 지금으로부터 과거에 리눅스 커널 팀이 존재했던 무렵. 리눅스 커널 팀은 매 버전마다 새로운 패치를 수동적으로 발행하는 것을 개선하기 위해 bitKeeper를 사용하고 있었다.
그 때, bitKeeper의 CEO Larry McVoy가 '이제 더 이상 bitKeeper는 무료로 사용할 수 없습니다.'라고 선언해버렸다. 리눅스 커널 설계자인 리눅스 토발스는 획기적이고 개선적인 버전 관리 시스템을 만들어야겠다고 생각한다.
중앙 버전 관리 시스템인 CVS를 나쁜 예제로 삼고 분산형이면서 미친 듯이 빠르고 변경사항을 적용했을 때 일관적이고 안정적인 제품. 바로 Git의 등장이었다.