1. VCS (Version Control System)
버전 관리 시스템은 여러 사람의 개발 내역을 합치고 나중에 특정 버전을 불러올 수 있도록 시간 경과에 따른 파일 또는 폴더의 변경사항을 기록한다.
선택한 파일/전체 프로젝트를 이전 상태로 돌리고, 시간 경과에 따른 변경 사항을 비교하고, 문제를 일으킬 수 있는 것을 마지막으로 수정한 사람, 문제를 도입한 사람 및 시기 등을 확인할 수 있다.
VCS를 사용하면 적은 오버헤드로 문제가 생기거나 파일을 분실한 경우에도 쉽게 복구할 수 있다.
Local Version Control Systems
RCS는 파일간의 차이점을 디스크의 특수형식으로 유지해 작동한다. 그 다음 모든 패치를 추가해 언제든지 파일이 어떻게 생겼는지 다시 만들 수 있다.
Centralized Version Control Systems
다른 시스템의 개발자와 협업하기 위해 만들어졌다.
이 시스템은 버전이 지정된 모든 파일을 포함하는 단일 서버와 해당 중앙 위치에서 파일을 체크아웃하는 여러 클라이언트가 있다.
모든 사람들이 진행상황을 공유할 수 있다. 관리자는 권한을 세부적으로 제어할 수 있기 때문에 편리하게 관리할 수 있다.
하지만 단일 실패 지점을 가지기 때문에 해당 서버가 한 시간 동안 다운되면 그 시간동안 아무도 공동작업을 하거나 변경사항을 저장할 수 없다.
Distributed Version Control Systems
CVCS의 단점을 해결하기 위해 만들어졌다. DVCS는 파일의 최신 상태를 체크아웃하지 않는다.
오히려 전체 기록을 포함해 저장소를 완전히 미러링한다.
따라서 서버에 장애가 일어나더라도 클라이언트 저장소를 서버에 복사해 복원할 수 있다. 모든 클론은 실제로 모든 데이터의 전체 백업이라고 볼 수 있다.
또한 DVCS 중 다수는 작업할 수 있는 여러 원격 레포지토리를 잘 처리하므로 동일한 프로젝트 내에서 동시에 다른 방식으로 다른 그룹의 사람들과 협업할 수 있다. 이를 통해 계층적 모델같은 CVCS에서는 불가능한 여러 유형의 workflow를 설정할 수 있다.
2. Git
데이터의 취급
다른 VCS 대부분은 각 파일의 변화를 시간순으로 관리하면서 파일의 집합을 관리한다. (델타 기반 버전 관리 시스템)
그러나 Git은 데이터를 파일 시스템 스냅샷의 연속으로 취급하고 크기가 아주 작다. Git은 커밋하거나 프로젝트의 상태를 저장할 때마다 파일이 존재하는 그 순간을 중요하게 여긴다. 따라서 파일이 달라지지 않았으면 Git은 성능을 위해 파일을 새로 저장하지 않고 이전 상태의 파일에 대한 링크만 저장한다.
명령 실행 위치
Git은 거의 모든 명령을 로컬에서 실행한다. 따라서 네트워크에 접속하고 있지 않아도 커밋할 수 있다.
데이터 무결성
Git은 데이터를 관리하기 위해 checksum을 활용한다. 모든 것을 해시로 식별하기 때문에 파일을 이름으로 저장하지 않고 해당 파일의 해시로 저장한다.
데이터 관리
Git으로 뭘 하든 데이터베이스에 데이터가 추가된다. 되돌리거나 삭제할 방법이 없다.
데이터 상태
Git은 파일을 Commited, Modified, Staged 이 세 상태로 구분한다.
Commited | 데이터가 로컬 데이터베이스에 안전하게 저장됐다는 것을 의미한다. |
Modified | 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 것을 의미한다. |
Staged | 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태를 의미한다. |
Git Directory(Repository) | Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳. 다른 컴퓨터에 있는 저장소를 clone할 때 만들어진다. |
Working Tree | 프로젝트의 특정버전을 checkout한 것. git directory는 지금 작업하는 디스크에 있고 그 디렉토리 안에 압축된 데이터베이스에서 파일을 가져와서 working tree를 만든다. |
Staging Area(Index) | git directory에 있다. 단순한 파일이고 파일에 대한 정보를 저장한다. |
Git directory에 있는 파일들은 Commited 상태다.
파일을 수정하고 Staging Area에 추가했다면 Staged, 추가하지 않았다면 Modified다.
'공부 > ELSE' 카테고리의 다른 글
[Unity] AR Foundation 개요 (0) | 2022.10.18 |
---|---|
Git 브랜치 (0) | 2022.06.28 |
Git 사용법 (0) | 2022.06.27 |
[K-MOOC] 인공지능 시대의 사회적 쟁점 - Privacy (0) | 2022.05.08 |
댓글