Git 소개

버전 관리

지속적으로 내용이 추가, 수정되는 파일의 히스토리를 관리하기 위해서 우리는 종종 이런 방법을 사용합니다.

버전 관리 없이 문서를 작성한 경우

하지만 이런 방법으로는 버전 사이에 변경점을 추적하기 어렵고, 스토리지를 많이 차지하며, 다른 사람과 협업도 어렵습니다.

이런 문제를 해결하기 위해 버전 관리 시스템(Version Control System, VCS) 이 개발되었습니다.

Subversion (SVN)

지금까지 에이투엠에서 주로 사용했던 VCS는 서브버전(subversion)입니다. 서브버전은 중앙집중식 버전 관리 시스템(CVCS)으로 각 사용자가 중앙 저장소에서 파일을 체크아웃 받아서 사용하는 방식입니다. 서브버전은 간단하게 사용하기는 좋지만, 다음과 같은 단점들을 갖고 있습니다.

  • 파일 버전 사이에 변경점(delta)을 저장하기 때문에, 버전 변경시 시간이 오래걸림
    • 브랜치 활용이 어려움
  • 중앙 저장소가 다운될 경우, 커밋 불가
  • 파일 충돌을 해결할 때 까지 커밋 불가
  • 한 번 커밋하면 되돌리기 어려움
  • 중앙 저장소 히스토리에 문제가 생기면 복구 불가

중앙집중식 버전 관리 시스템

Git

깃(git)은 분산 버전 관리 시스템(DVCS)입니다. 저장소를 체크아웃할 때 단순히 마지막 버전을 가져오는 것이 아니라, 저장소의 모든 히스토리를 가져옵니다. 또한 로컬 저장소의 변경사항을 중앙 저장소에 저장(push)할 때도, 로컬의 모든 히스토리를 저장합니다. 때문에 중앙 저장소에 문제가 생겨도, 로컬 저장소에는 영향을 주지 않습니다.

  • 파일의 스냅샷(snapshot)을 저장하기 때문에, 버전 변경이 매우 빠름
    • 브랜치 활용 용이함
  • 로컬 저장소와 리모트 저장소를 동기화하는 구조
    • 리모트 저장소가 다운되어도 커밋 가능
  • 브랜치를 머지할 때 까지 파일 충돌이 나지 않음
  • 커밋을 되돌리기 쉬움
  • 로컬 저장소에 모든 히스토리 저장됨

분산 버전 관리 시스템

무엇보다도 브랜치를 적극적으로 활용할 수 있다는 것은 큰 장점입니다. 이슈별로 브랜치를 나눠 작업하면, 각각 이슈의 해결을 위한 코드 변경사항들이 명확히 구분됩니다.

이외에도 깃은 많은 장점이 있습니다. 그럼 이제 깃을 활용해서 버전 관리하는 방법을 배워봅시다.