버전 관리 초보자를 위한: 펜드라이브 비유
Source: Dev.to

Life Before Version Control
Imagine this: you are a developer in the 1990s, building software. There is a bug that you cannot fix, and you want your colleague John to help you. You already have the source code. How do you transfer the code to him?
Source:
펜드라이브 문제
아마도 펜드라이브, 하드 디스크, 이메일, 혹은 CD를 이용해 코드를 복사해서 John에게 전달할 수 있습니다. John은 코드를 자신의 시스템에 복사하고 작업을 시작합니다. 버그를 수정한 뒤 John은 당신의 오래된 코드를 삭제하고, 업데이트된 버전을 펜드라이브에 복사해 다시 당신에게 줍니다. 당신은 펜드라이브에서 코드를 복사하고 원래 버그가 수정된 것을 확인하지만, 코드의 예상치 못한 부분에 또 다른 버그가 존재함을 발견합니다.

final_final_v2가 절대 최종이 아니었던 이유
이 시점에서 당신은 혼란스러울 것입니다. 새로운 버그가 당신 탓인지 John의 탓인지? 확인할 방법이 없습니다.

두 개발자는 변경이 있을 때마다 펜드라이브에 있던 옛 코드를 삭제하지 않기로 결정했습니다. 대신 새 코드를 final이라는 이름으로 추가하기로 했습니다.

코드베이스가 커지면서 final_v2, latest_final, latest_final_final, latest_final_super_final 등 혼란스러운 이름들이 많이 등장합니다.
팀이 더 나은 시스템이 필요했던 이유
이제 다시 혼란스러워졌습니다. 최신 코드는 어느 것인가요? 누가 어느 부분을 변경했나요? 왜 예상치 못한 버그가 발생하나요?
이러한 문제는 이미 두 명의 개발자에게도 고통스럽습니다; 세 번째 개발자 Will을 추가한다고 상상해 보세요. 혼란은 배가됩니다.
코드 변경 사항을 추적할 수 없어서 좌절하고 있습니다. 그래서 각 추가 또는 재작성과 그 변경의 작성자를 기록하는 소프트웨어를 만들기로 결심합니다. 이는 다중 파일·폴더 문제를 해결합니다: 개발자 수에 관계없이 모두가 같은 폴더에서 작업할 수 있습니다.
그 소프트웨어는 **Git**이며, **Linus Torvalds**가 만들었습니다.
Source:
버전 관리란 무엇인가?
버전 관리는 파일에 대한 변경 사항을 시간 순으로 추적하는 시스템으로, 무엇이 바뀌었는지, 누가 바꾸었는지, 언제 바뀌었는지를 보여줍니다.
버전 관리를 사용하면 다음을 할 수 있습니다:
- 코드의 모든 변경 사항을 추적
- 혼란스러운
final_final_v2폴더 제거 - 실수로 인한 덮어쓰기 방지
- 전체 변경 이력 제공
- 협업 가능
- 정확히 무엇이 바뀌었는지 표시
- 각 변경의 작성자 식별
펜드라이브 한계
버전 관리를 사용하더라도 여전히 펜드라이브를 사용할 수 있습니다. 펜드라이브에는 항상 최신 코드가 들어 있으며, 한 번에 한 명의 개발자만 작업할 수 있습니다. 다른 사람들은 오래된 복사본을 가지고 있어 변경을 할 수 없습니다.
중앙 집중식 저장소
이를 해결하기 위해 Git 저장소를 호스팅하는 중앙 서버를 설정합니다. 서버에는 항상 최신 코드 버전이 저장됩니다. 모든 개발자는 서버에서 코드를 pull하고, 변경을 한 뒤 push합니다.

이렇게 하면 모든 개발자가 동시에 작업할 수 있으며, 서버에 있는 코드를 단일 진실 소스로 삼아 자신의 코드를 비교할 수 있습니다. 이 서버는 일반적으로 **GitHub**에서 제공합니다.