임시 git 구현

Park Jae Hong·2022년 8월 2일
0

git 구현

기본 설계

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5

💡 학습 정리

Zlib 란 ?

: Zlib는 파일의 압축을 도와주는 기본 모듈이다. Gzip/Gunzip와 Deflate/Inflate을 지원하고 있으며 기본적인 파일 압축 작업 이외에도 HTTP 클라이언트나 서버 모듈 등과 같은 곳에서 효율적인 데이터 전송을 위해서 사용할 수도 있다. 다음 코드는 zlib라는 객체로 Zlib 모듈을 불러들이는 코드이다.

  • C언어로 작성된 데이터 압축 라이브러리의 일종이다. 오늘날 Zlib는 Zlib와 Deflate가 표준 문서에서

  • 빈번히 쓰이는 것을 미루어 볼 때 보편적인 표준이라고 할 수 있다. 수 많은 응용 프로그램은

  • 직간접적으로 압축을 위해 Zlib를 사용하고 있다.

git 의 구조도

스크린샷 2022-08-03 오전 5 47 42

git 의 개체

: 모든 개체는 유형 , 크기 및 내용 의 세 가지 요소로 구성됩니다 . 크기 는 단순히 내용 의 크기이며 내용은 개체 유형에 따라 다르며 "blob", "tree", "commit" 및 "tag"의 4가지 다른 유형의 개체가 있습니다.

blob

  • 파일 데이터를 저장하는 데 사용되며 일반적으로 파일입니다 .
  • "blob" 개체는 이진 데이터 덩어리에 불과합니다. 다른 것을 참조하지 않거나 파일 이름을 포함하여 모든 종류의 속성을 갖지 않습니다.
  • Blob은 데이터에 의해 완전히 정의되므로 디렉터리 트리(또는 여러 다른 버전의 저장소)에 있는 두 파일의 내용이 같으면 동일한 Blob 개체를 공유합니다. 개체는 디렉터리 트리의 위치와 완전히 독립적이며 파일 이름을 바꿔도 파일과 연결된 개체는 변경되지 않습니다.

tree

  • 기본적으로 디렉토리와 같습니다. 다른 트리 및/또는 블롭(예: 파일 및 하위 디렉토리)의 무리를 참조합니다.
  • 트리에서 참조하는 개체는 파일의 내용을 나타내는 blob이거나 하위 디렉터리의 내용을 나타내는 다른 트리일 수 있습니다. 다른 모든 개체와 마찬가지로 나무와 얼룩은 내용의 SHA1 해시에 의해 이름이 지정되므로 두 나무는 내용(모든 하위 디렉터리의 내용 포함)이 동일한 경우에만 동일한 SHA1 이름을 갖습니다. 이를 통해 git은 동일한 개체 이름을 가진 항목을 무시할 수 있으므로 두 관련 트리 개체 간의 차이점을 빠르게 결정할 수 있습니다.

commit

  • 단일 트리를 가리키며 특정 시점에 프로젝트가 어떻게 생겼는지 표시합니다. 여기에는 타임스탬프, 마지막 커밋 이후의 변경 작성자, 이전 커밋에 대한 포인터 등과 같은 해당 시점에 대한 메타 정보가 포함됩니다.
  • tree : 특정 시점의 디렉토리 내용을 나타내는 트리 객체의 SHA1 이름(아래에 정의됨) .
  • parent(s) : 프로젝트 기록에서 바로 이전 단계를 나타내는 몇 가지 커밋의 SHA1 이름입니다. 위의 예에는 하나의 부모가 있습니다. 병합 커밋에는 둘 이상이 있을 수 있습니다. 부모가 없는 커밋을 "루트" 커밋이라고 하며 프로젝트의 초기 개정을 나타냅니다. 각 프로젝트에는 하나 이상의 루트가 있어야 합니다. 프로젝트는 일반적이지 않지만(또는 반드시 좋은 생각이지만) 여러 루트를 가질 수도 있습니다.
  • 작성자 : 날짜와 함께 이 변경에 대한 책임이 있는 사람의 이름입니다 .
  • committer : 실제로 커밋을 만든 사람의 이름과 커밋이 완료된 날짜 . 작성자와 다를 수 있습니다. 예를 들어 작성자가 패치를 작성하고 패치를 사용하여 커밋을 만든 다른 사람에게 이메일로 보낸 경우입니다.

tag

  • 특정 커밋을 어떤 식으로든 특별한 것으로 표시하는 방법입니다. 일반적으로 특정 커밋에 특정 릴리스 또는 해당 라인을 따라 태그를 지정하는 데 사용됩니다.

SVN과 다른 점

: 이것은 여러분이 잘 알고 있는 대부분의 SCM 시스템과 매우 다르다는 점에 유의하는 것이 중요합니다. Subversion, CVS, Perforce, Mercurial 등은 모두 Delta Storage 시스템을 사용합니다. 한 커밋과 다음 커밋 간의 차이점을 저장합니다. Git은 이를 수행하지 않습니다. 커밋할 때마다 프로젝트의 모든 파일이 이 트리 구조에서 어떻게 보이는지에 대한 스냅샷을 저장합니다. 이것은 Git을 사용할 때 이해해야 하는 매우 중요한 개념입니다.

참고 : http://shafiul.github.io/gitbook/1_the_git_object_model.html, https://blog.naver.com/PostView.naver?blogId=musasin84&logNo=60189885812&redirect=Dlog&widgetTypeCall=true&directAccess=false

profile
The people who are crazy enough to think they can change the world are the ones who do. -Steve Jobs-

0개의 댓글