분산 버전 관리 시스템(Distributed Version Control Systems - DVCS)
팀을 이뤄 여러 명의 개발자가 하나의 프로젝트를 진행할 때, 코드의 변경 내용을 추적하고 관리하는 데 사용되는 분산 버전 관리 시스템이다.
GitHub은 Git을 기반으로 클라우드 서버를 제공하는 웹 호스팅 서비스이다. 클라우드 서비스이기 때문에 구성원들 간의 소스코드 공유가 용이하다.
버전 사용
모든 버전에는 버그 수정이나 기능 추가와 같은 버전 변경 내용에 대한 설명이 있다. 이 설명은 팀이 버전별로 코드 변경 내용을 따르는 데 도움이 된다. 버전에 저장된 코드는 필요에 따라 언제든지 버전 제어 기능을 통해 확인하고 복원할 수 있다.
함께 코드 작성
버전 제어는 버전을 동기화하고 변경 내용이 다른 사용자의 변경 내용과 충돌하지 않도록 한다. 팀은 사용자가 동시에 변경하는 경우에도 충돌을 해결하고 방지하기 위해 버전 제어를 사용한다.
History 기록
새 버전의 코드를 저장할 때 변경 기록을 유지한다. 팀 구성원은 기록을 검토하여 누가, 왜, 언제 변경되었는지 확인할 수 있다. History는 언제든지 이전의 좋은 버전으로 롤백하기 쉽다.
동시 개발
구성원 개개인은 고유한 로컬 코드 복사본을 가지고 있고, 각자의 branch에서 동시에 작업할 수 있다.
팀프로젝트
pull과 push를 통해 중요 branch에 merge하기 전에 서로의 작업에 영향을 주지 않고 팀과 공유하고 변경 내용을 논의할 수 있다.
안정적이고 더 빠른 releases
branch를 이용해 releases할 버전과 작업할 것들을 분리하여 안정적으로 코드를 관리하고 업데이트를 더 빠르게 배포할 수 있다. 문제없이 잘 만들어진 작업 결과를 releases 버전에 merge하여 빠르게 업데이트를 진행할 수 있다.
로컬 저장소 (Local Repository) : 작업자의 개인 컴퓨터 저장소
원격 저장소 (Remote Repository) : 구성원들의 파일을 공유하고 통합하기 위한 저장소
History : 버전 변경 기록. 파일 내용을 추가, 변경하고 Commit을 하면서 쌓이는 버전들의 변동사항들을 각 시점마다 확인 할 수 있다.
Commit : 현재 변경된 작업 상태를 점검을 마치면 확정하고 저장소에 저장하는 작업
fetch : 저장소 변경 내용 확인
Pull : 원격 저장소의 변경된 내용을 로컬 저장소에 적용하는 작업
Push : 로컬 저장소의 변경된 내용을 원격 저장소에 저장하는 작업
Branch : 기존 작업 내용을 복사하여 만든 작업을 위한 저장소(가지, 분기점). Branch에서 작업을 한 후 원하는 결과가 나왔을 때 상위 Branch와 Merge를 한다.
Merge : 다른 Branch의 내용을 현재 Branch로 가져와 합치는 작업을 의미
Snapshot : 특정 시점의 프로젝트 소스 코드의 버전
Head : 현재 작업중인 Branch
원격 저장소 내에 main, Dev Branch를 생성하고 Dev A, B, C 각자의 로컬 저장소에 복제한 후 자신이 작업할 feature Branch를 생성한다. 이후 원격 저장소에 각자 feature Branch를 publish한다.
물론 Dev Branch에 자신의 작업 내용을 바로 merge할 수 있지만 그러면 A, B, C가 작업한 내용들이 서로 충돌을 일으킬 가능성이 매우 높다.