이번에는 Commit
의 원리에 대해 알아보겠습니다.
f4.txt
파일을 vim
명령을 통해 새로 만들고 내용을 f4
로 한 뒤
git add
명령을 했습니다.
이후 커밋 메세지를 1 로 저장하겠습니다.
이후 gistory
를 통해 파일을 확인하면 커밋메세지의 내용이 object
파일안에 담겨져있습니다.
📌 커밋을하면 그 버전도 파일의 내용처럼 object(객체)에 저장됩니다.
이때 tree
부분의 해쉬 값을 클릭하면 이때까지 커밋한 파일의 목록이 뜹니다.
이번에는 f2.txt
의 파일내용을 y\nz
로 바꿔보겠습니다.
그리고 f2.txt
를 add
해주고 커밋메세지를 2 로 해보겠습니다.
gistory
를 새로고침하면 저번에 만들어 두었던 f2.txt
파일을 볼수 있습니다.
이때 parent
의 해쉬값을 클릭하면 이전 커밋의 내용 을 볼 수 있습니다.
하지만 첫번째 커밋과 두번째 커밋의 트리해쉬 값이 각자 다릅니다.
또 중요한것은 이전 커밋의 트리해쉬값을 클릭하고 f2.txt
파일의 내용을 보면 처음작성하였던 souce:3
의 내용이 나옵니다.
하지만 가장 최근의 커밋에서 트리해쉬값을 클릭한 후 f2.txt
파일의 내용을 보면 금방만든 y\nz
의 내용이 나옵니다.
📌 즉 커밋을 통해 만든 버전마다 그 시점의 커밋메세지와 파일의 내용을 모두 확인 가능합니다.
우리는 버전에 적혀있는 트리를 통해서 버전이 만들어진 시점의 프로젝트 상태를 확인 할 수 있습니다. 이를 '사진을 찍었다'라는 뜻에서 스냅샷(snapshot) 이라고 부르기도 합니다.
즉 각각의 버전은 그 버전이 만들어진 스냅샷을 트리라고 하는 정보 구조를 통해 가지고 있습니다.
이번에는 d1
이라는 폴더를 만들어 보겠습니다.
cp
명령을 통해 f4.txt
를 복사해줍니다.
git status
를 통해 d1
폴더가 만들어 진것을 확인할 수 있습니다.
이후 d1/f4.txt
파일을 add
와 commit
을 해보겠습니다.
gistory
를 새로고침하면 각각의 커밋의 트리와 자식을 볼 수 있고 그 커밋이 만들어진 시점의 파일의 이름과 파일의 내용을 확인할 수 있습니다.
화면 상단의 [commit] 8374~ 와 같이 커밋고유의 해쉬값도 확인가능합니다.
이때 d1
디렉토리는 다른 파일과는 다르게 tree
라는 문구가 있으며
그 밑에(자식)파일은 복사했던 f4.txt
파일과 그 내용이 담겨있습니다.
따라서 object
는 크게 3종류의 내용을 담고있습니다.
blob
는 파일의 내용을 담고있다는 뜻을 가지고있습니다.
tree
는 어떤 디렉토리의 파일명과 그 파일명에 해당되는 파일(blob)의 내용을 담고있습니다.
commit
은 각각의 고유한 해쉬값을 가지고 있습니다.