Programing

Git에서 HEAD, 작업 트리 및 인덱스의 차이점은 무엇입니까?

lottogame 2020. 2. 17. 22:05
반응형

Git에서 HEAD, 작업 트리 및 인덱스의 차이점은 무엇입니까?


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

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


편집하다

나는 이것을 찾았다

단일 git 저장소는 임의의 수의 분기를 추적 할 수 있지만 작업 트리는 그 중 하나 ( "현재"또는 "체크 아웃 된"분기) 와만 관련되며 HEAD는 해당 분기를 가리 킵니다.

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


이러한 주제에 대한 몇 가지 좋은 참고 자료 :

대체 텍스트

색인을 검사 점 으로 사용합니다 .

내가 엉망이 될 수있는 변화를 만들려고 할 때 — 어떤 방향으로 탐색 할 수 있는지, 또는 개념적으로 까다로운 리팩토링 또는 변화와 같은 좋은 아이디어인지 확신 할 수없는 방향을 탐색하고 싶을 때 표현 유형 — 작업을 색인에 체크 포인트합니다. 이것이 마지막 커밋 이후 처음으로 변경 한 경우 로컬 리포지토리를 검사 점으로 사용할 수 있지만 종종 작은 단계 집합으로 구현하는 개념적 변경 사항이 있습니다. 각 단계 후에 체크 포인트를 만들고 싶지만 테스트되고 작동하는 코드로 돌아갈 때까지 커밋을 저장하십시오.

노트:

  1. 작업 영역 (소스)의 디렉토리 트리 당신이 확인하고 수정할 수 있음을 파일.

  2. 인덱스 에 하나의 큰, 이진 파일입니다 <baseOfRepo>/.git/index현재의 모든 지점에있는 파일들이 나열, SHA1의 체크섬, 타임 스탬프 및 파일 이름을 - 그것의 파일의 사본을 다른 디렉토리가 아니다.

  3. 로컬 저장소는 숨겨진 디렉토리입니다 ( .git포함) objects압축 "덩어리"파일과의 repo에있는 모든 파일의 모든 버전 (현지 지사 및 원격 지점의 사본)을 포함하는 디렉토리.

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

대체 텍스트

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

  • 태그는 기록에서 특정 지점을 표시하는 고정 참조입니다 (예 : v2.6.29).
  • 반대로, 헤드는 항상 프로젝트 개발의 현재 위치를 반영하도록 움직입니다.

대체 텍스트

(주 : 같은 주석 에 의해 티모 Huovinen , 그 화살표가 아니라 커밋 가리 무엇인가, 그것은의 워크 플로우 순서 기본적으로 화살표 보여주는 1 -> 2 -> 3 -> 4경우 1에 첫 번째로 커밋됩니다 및 4마지막입니다)

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

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

당신이 git checkout ref그것을 실행할 때 당신 HEAD이 지정한 심판을 가리키고 그것에서 파일을 추출합니다. 실행 git commit하면 새로운 commit 객체가 생성되어 current의 자식이 HEAD됩니다. 일반적으로 HEAD헤드 중 하나를 가리 키므로 모든 것이 잘 작동합니다.

대체 텍스트


HEAD (현재 브랜치 또는 현재 브랜치에서 마지막 커밋 된 상태), 인덱스 (일명 스테이징 영역) 및 작업 트리 ( 체크 아웃 파일 상태 ) 의 차이점 "1.3 Git 기본 " 의 "3 가지 상태"섹션에 설명되어 있습니다. Scott Chacon Pro Git 서적 (크리에이티브 커먼즈 라이센스).

이 장의 이미지는 다음과 같습니다.

로컬 작업-작업 디렉토리 대 준비 영역 (인덱스) 대 자식 저장소 (HEAD)

In the above image "working directory" is the same as "working tree", the "staging area" is an alternate name for git "index", and HEAD points to currently checked out branch, which tip points to last commit in the "git directory (repository)"

Note that git commit -a would stage changes and commit in one step.


Your working tree is what is actually in the files that you are currently working on.

HEAD is a pointer to the branch or commit that you last checked out, and which will be the parent of a new commit if you make it. For instance, if you're on the master branch, then HEAD will point to master, and when you commit, that new commit will be a descendent of the revision that master pointed to, and master will be updated to point to the new commit.

The index is a staging area where the new commit is prepared. Essentially, the contents of the index are what will go into the new commit (though if you do git commit -a, this will automatically add all changes to files that Git knows about to the index before committing, so it will commit the current contents of your working tree). git add will add or update files from the working tree into your index.


Working tree

Your working tree are the files that you are currently working on.

Git index

  • The git "index" is where you place files you want commit to the git repository.

  • The index is also known as cache, directory cache, current directory cache, staging area, staged files.

  • Before you "commit" (checkin) files to the git repository, you need to first place the files in the git "index".

  • The index is not the working directory: you can type a command such as git status, and git will tell you what files in your working directory have been added to the git index (for example, by using the git add filename command).

  • 인덱스는 git 리포지토리가 아닙니다. git 인덱스의 파일은 git commit 명령을 사용하면 git이 git 리포지토리에 커밋하는 파일입니다.

참고 URL : https://stackoverflow.com/questions/3689838/whats-the-difference-between-head-working-tree-and-index-in-git


반응형