디렉토리 또는 파일을 삭제했을 경우 어떻게 동작하는지 궁금해서 해보니깐
```
d1 디렉토리 삭제
- d1/f1.txt 도 삭제됨.
git add d1 && git commit -m "d1 삭제"
gistory 확인해보니 d1 object와 d1/f1.txt object에 대한 변경 이력은 존재하지 않고,
d1 object(tree), d1/f1.txt object(blob) 에 대한 index가 삭제됨.
그래서 한번 생성된 object는 삭제되지 않는것인가 해서
mkdir d1
cp f1.txt d1/f1.txt
git add d1
git commit -m "d1 디렉토리 추가 후 f1.txt copy"
실행한 뒤 gistory 확인해보니
d1 tree object와
d1/f1.txt object(내용이 같아 생성되지는 않고, 기존 f1.txt object를 바라봄)
가 잘 추가되어서 d1 의 체크섬(해시)가 삭제하기 전에 처음 추가했을 때의 체크섬(해시)와 동일한지 확인해보니
동일하게 추가 되었네요
물론 같은 디렉토리 구조와 파일 내용 이니깐 체크섬(해시)값이 같겠지만..
새로 추가된거 같지는 않고 이전에 만들어뒀던 d1 object 그대로 있으면서 이에 대한 주소 값을 가지고 있는 index만 삭제되고, 다시 git add로 추가했을 때 index만 다시 새로 만들어서? 사용하는거 같은데 맞을까요??
그러면 같은 추가되거나 삭제했을 때 object를 직접 다루는게 아닌 추가만 하고 index만 추가하거나 삭제하는 방식인것일까요??
index가 object의 주소값을 내용으로 가지고 있으니깐 index가 유일하게 object에 접근할 수 있고, index가 없으면 object의 주소와 파일명이 없으니깐 접근할 수 없는것 같기도 하고.. 흠
```
이 부분은 주소(address, C 언어에서의 pointer 개념), 몇 가지 자료구조(tree, 각종 container) 개념들을 알면 도움이 될 거 같네요. 잘 모르는 내용이라 이해가 안 가시면, 자료구조, 알고리즘이라는 개념들이 어떻게 실제 툴(이 강의의 경우 git)에 응용되는지 보여준다고만 생각하셔도 될 것 같습니다.
설명을 너무 잘해주시네요. 큰 프로젝트를 함에 있어서 깃은 필수적으로 써야하는 버전관리 시스템인데 정말 내부적으로 어떻게 일어나고 사이트를 계속 찾아봐도 이해하기가 어려웠던 깃을 이렇게 쉽게 설명해주시다니 너무나도 감사드립니다. 이고잉님 입장에서 힘들게 얻었던 그러한 정보들을 저희가 이고잉님을 통해서 쉽게 얻을수 있다는게 살짝은 억울 하실수도 있지만 너무나도 큰 도움 받고있다는거!! 정말 감사드립니다!!
commit message object(이하 cmo)와 tree를 구분짓고 cmo가 tree를 참조하는 이유는 git이 어디에선가 tree를 다른 객체를 통해서 공유해야만 하기 때문이 아닐까요?
강의를 순차적으로 듣고 있는데, 여기까지의 지식만으로는, 확인은 해보지 않았지만, git revert가 가장 유력한 후보일 거라고 생각합니다. 복제한 파일에서 sha1으로 중복을 최소화하는 개념과도 통하기도 하고요.
commit, tree, blob 모두 외부에서 보기에는 큰 차이점이 없는 object 입니다.
구분이 되는 이유는 용도가 다르기 때문입니다.
간단하게 구분해 보면,
blob - 파일 하나의 내용을 보관
tree - blob 목록, tree 목록(포함 디렉터리, 없으면 제외) 보관
commit - parent(이전 commit, 이전 commit 없으면 제외), tree, author(코드 작성자), commit(코드 제출자) 보관
adsf// 허허...gistory만든걸 자랑하고 싶은거냐고 물어보다니.
그런걸 자랑하고 싶으면 egoing님이 이런걸 무료로 강의나 할까싶네요
git명령어 수행시 내부적으로 어떤 동작들이 이루어 지는지 원리를 알면 훨씬 이해가 잘됩니다.
본인이 어렵다고 저렇게 예의 없게 댓글을 달다니 보기 무척 안좋네요.
어디서나 무료로 좋은 의도로 뭔가 하면 항상 꼬투리를 잡고 더 많은걸 바라는 사람들이 있더군요.
그것도 항상 예의 없이, 버릇없게 댓글을 답니다. 그 일로 상심해서 연재 같은걸 중단 하시는 분들도 계시던데
egoing님은 그러실 분은 아니지만 힘내시라고 댓글 답니다.
egoing님의 수업은 나날이 버전업이 되어가는군요.
gistory를 통해서 git의 원리를 알려주는 강의는 이것이 유일하지 않을까 싶네요.
설명을 정말 잘해주셨지만 아마도 용어와 텍스트로만 설명하다 보니 개념을 정리하는데 어려움이
있나 봅니다. 하지만 그래도 원리를 이해하고 나아가 직접 실습을 통해 확인할 수 있다는 것은
egoing님 말처럼 오랜시간 기억에 남아서 오히려 학습시간을 단축하게 될 것 입니다.^^
'commit의 원리' 라고 구글에 검색해서 이미지를 찾아보시면 egoing님이 설명해주신 부분에 대한
다이어그램이 있어서 아마 개념 정리하는데 도움 되실거에요 참고하시기 바랍니다.^^
날카로운 지적이십니다만.
아예 이 강의에서 이걸 빼는게 좋지 않을까 싶네요는 적절한 말은 아닌 것 같습니다.
이해 못하겠으면 안보면 되지. 왜 이런 나같은 사람들에게는 매우 좋은 글을 그런식으로 좀 기분나쁘게 말하시는건지 모르겠습니다.
그러한 좀 기분나쁜말에 이고잉님이 우울증에 빠져서 이런 내게 도움이 되는 영상을 볼 수 없게 되면은 내가 얼마나 손해인데;;; 그래서 이런 댓글을 답니다.
이고잉님. 제가 댓글을 자주 안달았습니다만. 댓글을 자주 안달지만 이고잉님이 올리신 이런 영상들 정말로 고맙게 생각하고 있어요.!!!!!!!!!!!!!!!!!!!!!!!!!!!
대학교 강의보다 100배 나아요. 온라인에서 공부하는 것에서 한줄기의 빛이에요 ㅠㅠㅠ...