개발관련/Git

Git에서 HEAD, 작업 트리 및 인덱스의 차이점

Rateye 2021. 12. 7. 10:22
728x90
반응형
질문 : Git에서 HEAD, 작업 트리 및 인덱스의 차이점은 무엇입니까?

누군가 Git에서 HEAD, 작업 트리 및 인덱스의 차이점을 말할 수 있습니까?

내가 이해하는 바에 따르면 그들은 모두 다른 지점의 이름입니다. 내 가정이 맞습니까?

나는 이것을 찾았다

단일 git 저장소는 임의의 수의 브랜치를 추적 할 수 있지만 작업 트리는 브랜치 중 하나 ( "현재"또는 "체크 아웃"브랜치)에만 연결되고 HEAD는 해당 브랜치를 가리 킵니다.

이것은 HEAD와 작업 트리가 항상 동일하다는 것을 의미합니까?

답변

해당 주제에 대한 몇 가지 다른 좋은 참고 자료 :

워크 플로우

색인을 체크 포인트 로 사용합니다.

내가 잘못 될 수있는 변화를 만들려고 할 때-내가 따라갈 수 있는지 또는 개념적으로 요구되는 리팩토링이나 변경과 같은 좋은 아이디어인지 확실하지 않은 방향을 탐색하고 싶을 때 표시 유형 — 내 작업을 색인에 체크 포인트합니다.

이것이 마지막 커밋 이후 처음으로 변경 한 경우 로컬 저장소를 체크 포인트로 사용할 수 있지만 종종 일련의 작은 단계로 구현하는 개념적 변경 사항이 하나 있습니다.
각 단계 후에 체크 포인트를 원하지만 테스트 된 코드로 돌아갈 때까지 커밋을 저장합니다.

메모:

  1. 작업 공간 은보고 편집하는 (소스) 파일의 디렉토리 트리입니다.
  2. 인덱스 <baseOfRepo>/.git/index 있는 하나의 큰 바이너리 파일로, 현재 브랜치의 모든 파일, sha1 체크섬, 타임 스탬프 및 파일 이름을 나열합니다. 그 안에 파일.
  3. 로컬 저장소 는 압축 된 "blob"파일로 저장소에있는 모든 파일의 모든 버전 (로컬 브랜치 및 원격 브랜치의 복사본)을 포함하는 objects 디렉터리를 포함하는 숨겨진 디렉터리 ( .git

 

 

위의 이미지에 표시된 4 개의 '디스크'를 저장소 파일의 개별 복사본으로 생각하지 마십시오.

3 개 주

기본적으로 Git 커밋에 대한 명명 된 참조입니다. ref에는 태그와 헤드의 두 가지 주요 유형이 있습니다.

  • 태그는 v2.6.29와 같이 기록의 특정 지점을 표시하는 고정 참조입니다.
  • 반대로 머리는 항상 프로젝트 개발의 현재 위치를 반영하기 위해 움직입니다.

커밋

(참고 : Timo Huovinen의 주석 에 따르면 해당 화살표는 커밋이 가리키는 것이 아니라 워크 플로 순서 이며 기본적으로 화살표를 1 -> 2 -> 3 -> 4 여기서 1 은 첫 번째 커밋이고 4 는 마지막입니다)

이제 우리는 프로젝트에서 무슨 일이 일어나고 있는지 알고 있습니다.
그러나 바로 여기에서 무슨 일이 일어나고 있는지 알기 위해 HEAD라는 특별한 참조가 있습니다. 두 가지 주요 목적을 제공합니다.

  • 체크 아웃 할 때 파일을 가져올 커밋을 Git에 알려줍니다.
  • 커밋 할 때 새 커밋을 넣을 위치를 Git에 알려줍니다.

git checkout ref 를 실행하면 HEAD 가 지정한 참조를 가리키고 여기에서 파일을 추출합니다. git commit 을 실행하면 HEAD 의 자식이되는 새 커밋 객체가 생성됩니다. 일반적으로 HEAD 는 헤드 중 하나를 가리 키므로 모든 것이 잘 작동합니다.

점검

출처 : https://stackoverflow.com/questions/3689838/whats-the-difference-between-head-working-tree-and-index-in-git
728x90
반응형