반응형
Git
Git
- 분산형 버전 관리 시스템(VCS)의 한 종류
- 빠른 속도로 업무처리하는데 중점을 둔 시스템
- 복사, 백업, 저장 등의 역할 수행
VCS(Version Control system)
- 시간에 따라 파일 변화를 기록하고 특정 시점의 버전을 찾아 사용할 수 있는 시스템
- 동시에 작업할 경우 발생할 수 있는 충돌 문제를 해결해줌
- 여러 명이 동시에 작업하는 병렬 개발 가능
- 분산 버전 관리이므로 인터넷이 연결되지 않은 곳에서도 개발 가능
동작 순서
- 작업 디렉토리에 있는 파일을 add 명령어를 통해 staging 영역으로 전달
- staging 영역에 저장된 파일은 commit 명령어를 통해 local repository로 커밋 파일을 저장
- local repository에 있는 메타 데이터 및 데이터 정보가 push 명령어를 통해 원격 repository에 저장
※ 질문 받은 부분
Git add 명령어의 동작
- 작업 디렉토리와 인덱스 디렉토리로 나누어 동작
- add 명령어를 받으면 파일 상태를 확인
- Untracked : 새롭게 생성된 파일
- Modified : 마지막 커밋 이후 변경된 파일
- staged : 인덱스에 추가되어 다음 커밋에 포함될 파일.
- 인덱스에 추가하기 전에 SHA-1 해시를 계산하여 고유 식별자로 사용
- 해시를 기반으로 Blob객체를 만들어 파일 내용과 함께 git의 객체 데이터베이스에 저장
- Blob 객체를 기반으로 인덱스 업데이트
- Blob 객체가 생성되면 인덱스 파일(.git/index)를 업데이트 하여 파일 경로와 해시 값 저장
- 인덱스 파일은 특정 형식을 가진 바이너리 파일
Git commit 명령어의 동작
- 현재 인덱스의 상태를 확인
- 사용자가 입력한 커밋 메시지를 수집
- 인덱스를 바탕으로 트리 객체를 생성
- 인덱스의 모든 항목을 기반으로 디렉토리 구조 작성
- 각 디렉토리에 대해 트리 객체를 생성하고, 각파일에 대해 블롭 객체 생성
- 트리 객체를 git의 객체 데이터베이스(.git/object)에 저장
- 커밋 객체를 트리 객체의 해시, 부모 커밋의 해시, 작성자 정보, 커밋 메시지 등을 포함한 커밋 객체 생성
- 커밋 객체를 git의 객체 데이터베이스(.git/objects)에 저장
- 현재 브랜치가 새로운 커밋을 가리키도록 참조를 업데이트
Git log 명렁어의 동작
- 현재 브랜치의 HEAD를 확인하여 브랜치가 가리키는 최신 커밋을 git의 HEAD에서(.git/HEAD) 찾음
- HEAD가 가리키는 커밋의 해시 값을 기반으로 해당 커밋 객체를 Git 객체 데이터베이스(.git/object)에서 역방향으로 탐색
- 부모 커밋의 해시를 추적하며 반복해서 값을 읽고, 커밋 히스토리를 역방향으로 탐
반응형
'컴퓨터 사이언스(CS) > 기타 CS' 카테고리의 다른 글
[CS/Javascript] 비동기 처리 및 이벤트 핸들러 (0) | 2024.07.29 |
---|---|
[CS] 디자인 패턴 (옵저버 패턴) (0) | 2024.07.25 |
[CS/Regex] 파일 URL의 형식 및 정규표현식의 활용 (1) | 2024.07.23 |
댓글