[Git] Git 심화 개념(SnapShot, 분산 버전 관리, Git의 3가지 공간)

WOOK JONG KIM·2022년 12월 21일
0

Git&GitHub

목록 보기
9/19
post-thumbnail

SnapShot

SVN 에서 사용하는 델타 방식, Git에서 사용하는 스냅샷 방식

델타 방식은 각 파일이 생겨난 버전에 해당 파일 전체가 저장이 되고, 이후 이 파일에 수정이 가해질 때는 그 변경점들이 저장이 됨

-> ex) 버전 5에서 C 파일의 내용은 버전 1의 원본으로 부터 1,2,3 변화가 누적된 걸로 계산이 됨

반면 스냅샷은 새로운 버전이 만들어 질 때, 해당 버전의 각 파일이, 최종 상태 그대로 저장이 되어있음

-> ex) 버전 5의 경우, 4와 비교했을 때 A파일에는 변화가 없으니까 버전 4에서의 A파일을 그대로 연결해서 가져오고, 변화가 있는 B파일과 C파일은 이 둘 각각의 최종 파일 내용이 그대로 저장되어있는 것

만약 커밋이 몇만개가 있는 Repository를 다룬다고 가정
-> 이를 델타 방식으로 다룬다면, Git에서 브랜치를 바꾸든 어떠한 작업을 할 때마다 각 파일들을 그것이 처음 만들어진 시점부터 변경사항들을 일일히 더해가지고 현재 내용을 계산해야 함
-> 관리 역사가 길수록 되게 느려짐
-> 반면 스냅샷 방식으로 다룬다면, 그냥 현재 시점에 각 파일들이 full로 저장되어있기 때문에 편함

분산 버전 관리

CVSSubversion 등의 VCS는 원격서버에 모든 관리 내역들이 저장됨
-> 여기에 참여하는 인원들의 컴퓨터, 즉 로컬에는 중앙에서 현 버전 것으로 다운받은 파일들로만 작업이 가능
-> 이는 원격 저장소에 의존적, 예를 들어 인터넷 연결이 불안정하다면 로컬에서 할 수 있는 것이 제한 될 것

반면 Git에서는 Download Zip이 아닌 git clone을 통해 받아오면 로컬에 파일들 뿐 아니라, 전체 Git 커밋이랑 브랜치들까지 받아짐
-> 인터넷 연결 상태와 상관없이 로컬에서 자유롭게 작업을 할 수 있음
-> 모든 구성원이 Git의 상태까지 공유하기 떄문에, 원하는 때에 프로젝트를 push와 pull로 동기화하면서 협업이 가능


Git의 3가지 공간

Git에서는 파일의 상태를 3가지로 분류

바뀐 내용들이 모두 commit이 된 상태(어떠한 버젼안에 들어있는 상태) -> Repository

새로 추가하거나, 수정 사항이 만들어지면 이것들은 Working Directory에 위치한 상태
-> 여기 안에서 Untracked, Tracked 상태로 나뉨
-> Untracked는 .gitignore에 추가된 파일이거나 새로 만들어진 파일
-> 즉 add가 되본적이 없는 파일

Staging Area는 커밋이 되기전 준비상태라고 생각


파일 삭제 및 이동, reset

그냥 우클릭으로 삭제 후 그 내역을 git add .를 해야지만 deleted로 처리가 됨
-> 이후 복원을 위해 git reset --hard

삭제 후 add 과정없이 바로 commit을 통해 반영하기 위해선느 rm 사용

단순히 이름 변경 뒤 확인했을 때

add 이후

mv를 사용하여 이름을 변경한 경우


-> 바로 수정사항이 Staging Area 에 위치

Staging Area에서 다시 Working Directory로 반환

커밋을 위해 Staging Area에 올렸지만, 특정 파일은 나중에 커밋하기 위해 Staging area에서 빼는 경우

git restore --staged (파일명)

예를 들어 pumas.yaml 파일을 제외하고 싶은 경우
-> git restore --staged pumas.yaml

--staged를 빼면 working directory에서도 제거
-> 변화 상태 자체를 되돌리고 싶은 경우
-> 그냥 restore인 경우 repository 상태로 되는 것!

git reset 종류

  • --soft: repository에서 staging area로 이동
  • --mixed (default): repository에서 working directory로 이동
  • --hard: 수정사항 완전히 삭제

hard의 경우 수정 사항을 Working Directory에서도 날려버리는 경우

mixed의 경우는 디렉토리에 남겨두기에 파일 자체는 변하지 않음(수정 내용이 취소되지 않음)

profile
Journey for Backend Developer

0개의 댓글