[2] Principle of GIT - GIT from HELL

지옥에서 온 GIT

GIT

incredibly COMPLEX

Version

단위 > 작업의 완결 상태 - 의미있는 변화 == 버전

효용성

  1. 차이점 과거 시점 내용
  2. 과거로의 회귀

Git stage area

git add 과정을 통해 commit 하고싶은 파일만 하게끔 함 : add 한 파일만이 commit 됨 - 선택적 commit이 가능함

add 된 파일의 commit 대기 장소 … 대합실

git diff

( commit ) 버전 간의 소스코드 차이

회귀

reset
1
git reset 'commit id' --hard

옵션은 hard, soft 등 존재

해당 아이디가 가장 최신이 됨

버려진 파일들은 어딘가에 남아 복구할 수 있음. 공유 이후의 reset X

revert

commit을 취소하면서 새로운 버전을 만듦

원리

add 원리

gistory
1
pip install gistory

설치 후 .git 폴더 진입 > gistory > 웹 브라우저에서 이미지 내 해당 주소로 진입

index 내 파일이 add 한 오브젝트 (객체)

git은 파일 저장 시 파일의 이름이 달라도 내용이 같으면 같은 오브젝트로 저장한다.

Objects
  1. 파일 내용 함양 - blob
  2. 어떤 디렉토리의 파일명과 그 파일내용-blob 을 담고있는 것 - tree
  3. commit
Object 파일명의 원리

저장 파일은 SHA1로 해쉬값을 생성

78981922613b2afb6025042ff6bd878ac1994e85 : 해쉬값

가장 앞 2자리 78을 이름삼아 디렉토리 생성, 981922613b2afb6025042ff6bd878ac1994e85을 이름으로 파일에 내용을 저장

commit 원리

commit msg도 내용처럼 object 안에 포함됨

:: Parent - 이전 commit이 누구인가?

:: Tree - commit이 일어난 시점에의 작업 dir에 있는 파일 이름과 내용 - 각 커밋은 트리를 가지고 있어서 그 커밋이 만들어진 시점의 파일의 이름과 내용이 담겨있음 (해당 트리는 파일 이름과 내용이 링크가 되어있기 때문에,) 버전에 적혀있는 트리를 통해 버전이 만들어진 시점 » 프로젝트 폴더에 대한 상태를 알아냄 (aka snapshot)

status 원리

index 와 가장 최신 commit 내용 일치 == 현재 커밋할 것 없음  » 해쉬값의 변화로 인한 status 알림!이라고 짐작할 수 있음


TBC