탐비의 개발 낙서장

[Git] 버전관리 시스템과 Git 구조 본문

프로그래밍/Git

[Git] 버전관리 시스템과 Git 구조

탐비_ 2021. 7. 29. 23:26
VCS 버전관리 시스템

 

Git 파일 상태 변화

 

Git 내부 구조

 

Git 구조 만들기

 

 

스스로 확인할 사항

 

  • 실제 git 명령어와 구현한 명령 동작 공통점과 차이점에 대해 정리한다.

 Git에서 blob 객체에 해당하는 file 객체를 git new 할때 부터 생성했는데, 실제로는 git add 할 때 추가된다. 또한 커밋이 각자 별개의 객체가 아니라 최상위 부모 커밋을 기준으로 다음커밋이 이어지는 식으로 연결되어있어서 트리 형태로 되어있고, 실제로 git에서 객체의 이름도 Tree이다. 대신 commit 할 때 마다 전체 파일을 복사해서 저장하는 방식으로 구현한 부분은 실제와 같다.

 

  • 객체를 복사할 때, 얕은 복사와 깊은 복사 차이점에 대해 정리한다.

 얕은 복사는 객체를 복사할 때, 해당 객체만 복사하여 새 객체를 생성하는데, 이렇게 되면 같은 메모리 주소를 가지기 때문에 원본 객체 및 복사 객체의 인스턴스 변수 값이 같이 변경된다.

 깊은 복사는 객체를 복사할 때, 해당 객체 뿐만 아니라 인스턴스 변수까지 같이 복사하게된다. 전부를 복사하여 새 주소에 담기 때문에 참조를 공유하지 않는다. 고차함수 map filter reduce 등이 해당된다.

 

 

다같이 확인할 사항

 

  • clone 명령을 구현하려면 어떻게 구현해야 할까 정리하고 각자 의견을 토론한다.

 remote에 저장되어 있는 commit 정보 전체를 가져와서, 가장 마지막 커밋에 해당하는 파일을 복사하고 해당 저장소의 파일과 git 객체들을 로컬 저장소에 새로운 저장소로 생성한다.

 

  • branch 개념을 추가하려면 어떤 구조로 어떻게 구현해야 할까 각자 의견을 정리하고 토론한다.

 branch도 결국 commit이 연결되어 만들어지는 구조로 생각하면, 해당 branch 생성시에 부모 branch에 해당하는 마지막 commit 로그 및 파일들을 가져와서 새로운 저장소 공간을 생성하는 식으로 구현하면 될 것 같다.

'프로그래밍 > Git' 카테고리의 다른 글

[Git] Git 개념과 흐름 / Branch 전략  (0) 2021.07.19