버전 관리시스템 :Git

버전 관리 시스템 : 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 가져올 수 있는 시스템이다.

이러한 프로그램을 사용하는 이유는 파일을 잃어버리거나 잘못 고쳤을 경우 쉽게 복구가 가능하다는 장점이 한다.

기본적으로 하는 백업 디렉토리로 파일을 복사하는 방식이 문제가 생길 가능성이 매우 크기 때문에 작은 데이터베이스 내부에 파일의 변경 정보를 관리하는 기능을 가진 관리방법이 생겨났으며 이러한 관리 방식이 로컬 버전 관리이다.( VCS-Version Control System)

VCS도구 중 RCS(Revision Control System)라고 부르는 것이 있는 데

RCS는 Patch Set(파일이 변경되는 부분)을 관리하며 이 Patch Set은 특별한 형식으로 파일을 저장하며 위 기능을 적용해서 파일을 특별한 시점으로 돌릴 수 있다.

CVS,Subversion,Perforce같은 시스템은 파일을 관리하는 서버가 별도로 존재하며 클라이언트가 중앙 서버에서 파일을 받아 사용(Check out)한다.

위의 방식의 장점은 모두 누가 무엇을 하고 있는 지 알 수 있으며 관리자는 누가 무엇을 할 지 세세하게 관리할 수 있다.

위 방식의 단점이 존재하는 데 가장 대표적으로 중앙 서버에 문제가 생기게 되면 그 문제가 해결되는 동안 다른 사람들은 아무것도 할 수 없고 백업도 할 수 없다.

또한 중앙 데이터베이스에 문제가 생기면 프로젝트 자체의 히스토리를 전부 잃어버릴 수 있다. (만약 사람마다 각자 스냅샷을 가지고 있다면 문제x)

DVCS(분산 버전 관리) 클라이언트는 단순히 파일의 마지막 스냅샷을 checkout하지 않고 저장소를 히스토리와 더불어 전부 복제한다.

서버에 문제가 생기면 이 복제물로 다시 작업이 가능하며 클라이언트 중에서 아무거나 골라도 서버를 복원할 수 있다.

또한 대부분의 DVCS환경에서는 리모트 저장소가 존재한다.

리모트 저장소가 많을 수도 있으며 다양한 그룹과 다양한 방법으로 협업할 수 있다.

Git의 가장 큰 차이점은 데이터를 다루는 법에 있는데 데이터를 파일 시스템 스냡샷의 연속으로 취급하고 크기가 아주 작다.

Git은 커밋하거나 프로젝트의 상태를 저장할 떄마다 파일이 존재하는 그 순간을 중요하게 여긴다.

파일이 달라지지 않았으면 GIT의 성능을 위해 새로 저장하지 않으며 데이터를 스냅샷의 스트림처럼 취급한다.(단지 이전 상태의 파일에 대한 링크만 저장)

GIT의 시간순 프로젝트 스냅샷

다른 프로그램들의 프로젝트 스냅샷>>

각 파일의 변화에만 저장을하는 파일이 아닌 한파일에 변동이 생기면 모든 곳에서 저장을 하는 시스템(이것이 차별화하는 이유)

거의 모든 명령을 로컬에서 실행

거의 모든 명령이 로컬 파일과 데이터만 사용하기 떄문에 네트워크에 있는 다른 컴퓨터는 필요없다. 대부분의 명령어가 네트워크의 속도에 영향을 주지만 GIT은 그러지않는다.

프로젝트의 모든 히스토리가 로컬 디스크에 존재하기 때문에 모든 명령이 바로바로 실행된다. 로컬에서 실행하기 떄문에 오프라인상태나 VPN에 연결을 못해도 쉽게 일을 할 수 있다. 네트워크 환경이 아니더라도 커밋할 수 있다.

Git의 무결성

Git은 데이터를 저장하기 전에 항상 체크섬을 구하고 그 체크 섬으로 데이터를 관리한다.>>체크 섬을 못 다루면 파일 상태를 알 수 없고 데이터도 보존가능

GIT은 SHA-1해시를 사용하여 체크섬을 만든다.

GIT의 장점으로는 데이터베이스에 데이터가 추가되는 기능만 존재한다.

되돌리거나 삭제할 수단은 없다. 다른 vcs처럼 GIT도 커밋하지 않으면 잃어버릴 수 있지만 커밋만 한다면 데이터를 잃어버리기 쉽지않다.

Git의 세가지 상태

- Committed란 데이터가 로컬 데이터베이스에 안전하게 저장됐다는 것을 의미한다。

- Modified는 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 것을 말한다。

- Staged란 현재 수정 한 파일을 곧 커밋할 것이라고 표시한 상태를 의미한다。

이 세가지 상태는 Git프로젝트의 세가지 단계와 연결돼있다.

워킹 트리,Staging Area , Git 디렉터리

GIT디렉토리는 Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳을 의미하며 Git 디렉토리가 Git의 핵심으로 Clone할 때 Git디렉터리가 생성이 된다.

워킹트리 프로젝트의 특정 버전을 Checkout한 것이다.

Git디렉터리는 지금 작업하는 디스크에 있고 그 디렉토리 안에 압축된 데이터베이스에서 파일을 가져와서 워킹 트리를 만든다.

Stageing Area는 Git디렉토리에 존재하며 단순한 파일형태로 곧 커밋한 파일에 대한 정보를 저장한다. (Staging Area ==Index)

Git add//

Git으로 하는 일

그리고 Checkout하고나서 수정했지만 아직 Staging Area에 추가하지 않았으면 Modified이다.

깃설치 방법 주소 :

https://git-scm.com/book/ko/v2/시작하기-Git-설치