2011-03-09 5 views
4

하나의 파일을 간단한 git repo로 체크인했습니다. 내 조사에서.Git에서 트리와 커밋 유형의 차이점은 무엇입니까?

$ git cat-file -t 8b4e834eba22e60c284c7b77e43d3c29e619f92f 
commit 

$ git cat-file -t c7c5b03aea0b8c970c93de3670c28f2108948266 
tree 

$ git cat-file -t e965047ad7c57865823c7d992b1d046ea66edf78 
blob 

내가 자식-LS-를 실행하려고하는 경우 : .git/objects

  1. 에 배치 객체의 세 가지 유형의 예를 들어
  2. 트리
  3. 방울

커밋이있다 트리를 blob에 놓으면 오류가 발생합니다.

그러나 commit 또는 tree 개체에서도 실행할 수 있습니다. 또한 commit 개체입니다 tree

$ git ls-tree -t c7c5b03aea0b8c970c93de3670c28f2108948266 
100644 blob e965047ad7c57865823c7d992b1d046ea66edf78 readme.txt 

$ git ls-tree -t 8b4e834eba22e60c284c7b77e43d3c29e619f92f 
100644 blob e965047ad7c57865823c7d992b1d046ea66edf78 readme.txt 

인가? 차이점은 무엇입니까?

답변

9

커밋 개체는 트리를 참조하고 다른 메타 데이터 (작성자, 커미터, 타임 스탬프 등)를 해당 개체와 연관시키는 개체입니다.

  Commit 
    /  \ 
    /  \ 
(parent SHA)  Tree 
(author)  / \ 
(committer) Blob Blob 
(timestamps) 
(etc) 

여러 커밋 개체가 동일한 트리를 참조 할 수 있습니다 (각 커밋의 파일 상태가 동일한 경우).

예를 들어 두 사람이 파일을 동일하게 변경하고 커밋하면 두 개의 다른 커밋 개체가 생성됩니다 (타임 스탬프와 작성자가 모두 다르기 때문에). 그러나 최종 결과는 동일한 파일 내용이기 때문에 두 커밋 모두 같은 트리를 가리 킵니다.

커밋 SHA에서 git ls-tree을 실행하면 커밋에 의해 참조되는 트리 SHA가 자동으로 사용됩니다.

관련 문제