공사중

쉽게 정리한 Git 사용법 : 스냅샷Snapshot과 세 가지 상태 본문

개발 | Git

쉽게 정리한 Git 사용법 : 스냅샷Snapshot과 세 가지 상태

행운개발자 LuckyDeveloper 2019. 2. 18. 18:54

Git에서 데이터를 저장하는 방식인 Snapshot에 대해서 조금 더 구체적으로 이해해보겠습니다. 


  Git은 데이터를 파일 시스템의 스냅샷의 연속으로 취급하고 이들의 크기도 아주 작습니다. Git은 파일을 저장할 때마다 파일이 존재하는 그 순간을 중요하게 생각합니다. 만약에 파일이 달라지지 않으면 Git은 성능을 위해서 파일을 새로 저장하지 않습니다. 단지 이전 상태에 대한 링크만 저장할 뿐입니다. 그리고 데이터를 변경하거나 삭제하지 못합니다.  사실 삭제할 필요가 없습니다. 원하는 스냅샷으로 checkout하면 원하는 정보만 원하는 형태로 볼 수 있기 때문입니다. 


  스냅샷이 정말로 정확하게 데이터를 저장하는가?에 대해서는 아주 간단하게만 알아보겠습니다. git은 SHA-1 해시를 사용해서 체크썸을 만들고, 모든 것을 해시로 식별하기 때문에 파일의 상태를 알 수 없지만 또 동시에 데이터를 잃어버릴 일도 없다고 합니다.



  Git은 파일은 세 가지 상태로 관리합니다. 이 세 가지 상태를 Git을 이해하는데 가장 중요한 요소입니다. 꼭 완벽하게 이해하고 넘어갑니다. 

1. Modified : 로컬에서 작업을 해서 데이터의 내용이 변경된 것을 의미합니다.

2. Committed : 데이터가 로컬 데이터 베이스(로컬 저장소)에 안전하게 저장되었다는 것을 의미합니다. 데이터는 아직 서버 역할을 하는 원격저장소에는 저장되지 않은 상태입니다. 

3. Staged : 현재 Modified된 파일이 곧 Committed될 상태라는 것을 나타냅니다.


  순서를 정리해보면 원래의 파일 -> Modified -> Staged -> Committed의 순서입니다. 그리고 이렇게 세 단계를 지나면 하나의 스냅샷이 저장이 됩니다.  여기서 말하는 세 가지 과정은 모두 로컬에서 이루어집니다.  현재 작업하고 있는 파일이 저장되어있는 디렉토리 혹은 드라이브의 위치를 Working directory 또는 Working tree라고 합니다. 파일이 수정되면 Modified 상태로 변경이 되고, 이제 Staging Area로 데이터를 옮겨야합니다. Staging 과정은 어떤 파일들을 Commit할 것인지 결정하는 과정입니다. N개의 파일 중에서 M개의 파일만 Commit할 것이라고 결정하는 과정이라고 생각하면 됩니다. Commit은 어떤 내용을 변경했는지 주석을 달면서 로컬 저장소에 저장을 하는 행위라고 이해하면 됩니다. 즉, 파일을 수정(Modified)하고 어떤 파일을 저장(Commit)할 것인지 결정(Staging)한 다음에 로컬 저장소에 저장(Commit)하면 됩니다. Commit을 하는 과정에서 주석을 넣는 것은 여러 개의 스냅샷들이 각각 어떤 시점에서 어떤 상태로 저장된 것인지 구분하기 위해서 적습니다. 


원문에 있는 아래와 같은 설명이 있습니다. 이제 이해하실 수 있을 것입니다.


Git 디렉토리에 있는 파일들은 Committed 상태이다. 파일을 수정하고 Staging Area에 추가했다면 Staged이다. 그리고 Checkout 하고 나서 수정했지만, 아직 Staging Area에 추가하지 않았으면 Modified이다.