2009-04-23 2 views
1

Git의 작동 방식을 이해하려고합니다.GIT는 blob에 들어가는 것을 어떻게 결정합니까?

임의의 파일과 임의의 수의 커밋을 감안할 때 git은 어떻게 SHA-1 해시로 고유하게 식별되는 BLOB로 파일을 분할할지 결정할 수 있습니까?

perl/C/java 코드와 텍스트를 새로운 git repo에 약 10 개 커밋하고 파일을 작은 세그먼트로 나눠서 어떻게 분할했는지 결정했습니다.

답변

7

힘내는 동일한 콘텐츠가 이미 존재하지 않는 한 (각 경우에 BLOB를 다시 사용하지 않는 한) 각 파일의 콘텐츠에 대한 BLOB를 만듭니다. 하지만, git은 모든 디렉토리, 커밋 및 서명 된 태그에 대한 객체를 생성합니다. 저장소가 재 포장 될 때까지 (자동적으로 또는 git gc을 실행함으로써) 모든 객체는 .git/objects에 저장됩니다.이 경우 일부 객체는 함께 묶여 packfile (.git/objects/pack에 있음)로 분리됩니다.

생각하는 것처럼 여러 개의 얼룩 또는 작은 조각 사이에서 단일 파일의 내용을 분할하지 않습니다.

+0

좋아, 첫 번째 부분을 주셔서 감사합니다, 마지막 지점에서, 내가 뭘 혼란 스럽습니까, GiTK 파일 뷰어와 함께 특정 파일을 탐색하는 것입니다 힘내는 특정 무엇을 알 것 같다 새롭게 결합 된 파일의 일부가 나왔습니다. 그것이 "세그먼트"를 가지고있는 곳입니다. Git이 결심을하고 그 세그먼트가 어디에서 왔는지, 그리고 예를 들어 "make"와 같은 반복되는 라인이 고유 한 부분인지 어떻게 알 수 있습니까? 세그먼트 자체가 반복되는 변화가 아닌가? –

+0

무슨 뜻인지 잘 모르겠습니다. 마지막 버전과의 차이점을 나타내는 경우 'diff'라고하며 두 파일을 비교하여 즉시 계산됩니다. git gui에서 비난하는 것을 의미하는 경우, 그것은 약간의 비난적 인 비난 알고리즘에 의해 수행됩니다. 명령 행에서 'git blame'을 참조하십시오. diff와 거의 동일하게 작동하지만 각 개정에 대해 수행되며 다른 파일의 제거 된 행을 고려합니다. – Pieter

+0

좋아, 고마워, 내가 지금 undertandd 생각, 다른 하위 SCMs (SVN/CVS/perforce)에서 오는 혼란 스러울 때 일반적으로 자동으로 다른 디렉토리에 다른 이름의 파일에 존재했던 기존의 개정판과 비교할 수 없었습니다. 명시 적으로 수행되었습니다.이 경우에는 Git을 사용하지 않았습니다. 그래서 나는 그것들이 2 개의 별개의 이슈이고, "영리한"diff/blame algo가 어떻게 동작하는지 그리고 어떻게 코드가 얼룩에 저장되는지 이해한다. 답변으로 당신의 것을 표시하고 있습니다. 뭔가 다른 것이 우리에게 마음에 떠오르면 자유롭게 세부 사항을 추가하십시오. Git newbies ... Thanks –

1

모든 파일이 blob에 저장되지만 반드시 Glob이 blob 당 파일을 저장한다는 것을 의미하지는 않습니다. Git은 물건을 함께 묶는 매우 효율적인 압축 형식을 가지고 있습니다. 내부적으로 Git의 패킹 포맷에 관심이 있다면,리스트를 보거나 아키텍쳐 문서를 읽는 것이 좋습니다.

+0

좋아요, 나는 문서를 읽었지 만, 저와 다음 사람을위한 학습 과정의 속도를 높이려고 노력하고 있습니다. 지금까지 문서를 읽음으로써이 질문에 대답 할 수 없었습니다. 목록에 묻는 것에 대한 좋은 충고, 아무것도 여기에 오지 않으면 나는 그것을 할 것이다. –

+0

이것이 최고의 http://eagain.net/articles/git-for-computer-scientists/ 찾을 수 있지만 질문에 실제로 대답하지 않습니다. –

+0

메일 링리스트는 정말로이 특별한 질문에 사용해야하는 유일한 리소스입니다. (또는 당신은 소스 코드를 읽을 수 있습니다) – Arafangion

3

기본 (즉, "낮은 수준") 참조 중 일부를 계산할 것을 권합니다. 특정 질문에 대해서는 Git 커뮤니티 북의 Git Object Model 섹션을 참조하십시오.

그런 다음 Git의 낮은 수준의 핀치 ("내용 주소 지정 가능 파일 시스템"및 지시 된 비순환 그래프 관계)에 대한 이해를 위해 Git from the Bottom Up (PDF)이나 우수 Git Internals (PDF, US$9)을 읽는 것이 좋습니다.

관련 문제