2011-03-29 2 views
3

Git은 개별 객체를 .git/objects/ab/cdefgh...에 저장합니다. 여기서 ab은 SHA1 다이제스트의 첫 번째 바이트입니다.Git 팩 파일 이름 - 요약은 무엇입니까?

그러나 팩 파일은 동일한 명명 정책을 따르지 않으므로 이름이 어떻게 지정되었는지에 대한 문서는 찾을 수 없습니다. 어떤 통찰력?

답변

7

팩 파일은 objects/pack에 보관되며 gitrepository layout에 문서화되어 있습니다. 이 디렉토리 내에서, 그들은 예를 들어, 전화, 인덱스 파일과 팩 파일 자체의 쌍으로 저장됩니다

pack-a862cfa8b080773290073999c800a2e655ef9b5d.idx 
pack-a862cfa8b080773290073999c800a2e655ef9b5d.pack 

그 파일 이름에서 SHA1sum이 git-pack-objects 문서 (내 강조)에 설명되어 계산 방법 :

파일 쌍의 쓰기 (.pack 및 .IDX), 생성 된 파일의 이름을 결정할 <베이스 > 이름을 사용. 이 옵션을 사용하면 두 파일은 < 기본 이름 >-<SHA1>으로 작성됩니다. < 팩, idx > 파일 <SHA1>은 팩 내용에 따라 결과 파일 이름을 만들려는 정렬 된 객체 이름의 해시이며이며 명령의 표준 출력에 기록됩니다.

object names은 팩 파일 내의 개체의 SHA1입니다.

+0

일부 파일 시스템은 단일 디렉토리에서 많은 수의 항목으로 성능이 떨어집니다. 느슨한 객체는 각 디렉토리가 보유해야하는 항목의 수를 제한하기 위해 객체/[0-9a-f] [0-9a-f] /'에 "팬 아웃"합니다. 느슨한 객체가'objects /'아래에 직접 저장 되었다면, 자동으로 압축되기 전에 수천 개의 엔트리로 끝날 수 있습니다. 'objects/pack /'는 대개 매우 적은 수의 파일 만 저장해야하기 때문에 펼쳐지지 않습니다. –

+0

이것은 작성 당시에는 정확했지만 2013 년에 변경되었습니다 (https://github.com/git/git/commit/1190a1ac/ https://github.com/git/git/commit/40a4f5a7). 이제는 트레일러 체크섬입니다 (파일의 마지막 20 바이트의 16 진수와 같습니다). – mgiuca

0

대답은 "전체 팩 파일의 SHA-1 해시, 마지막 20 바이트 빼기"또는 "마지막 20 바이트의 16 진수 요약"입니다 (둘 다 동일합니다).

last 20 bytes of the file은 그 자체가 SHA-1 hash of the entirety of the file (마지막 20 바이트를 뺀 것) 인 "트레일러 체크섬"입니다.

이것은 changed in 2013 (이전에는 파일에있는 모든 해시의 SHA-1 합계)이었습니다. documentation은 이제 "팩 내용을 기반으로하는 해시"라고 간단히 읽습니다. 저자는 명시 적으로 SHA-1이 계산되는 방법을 보장하지 않습니다 (commit log : "이것은 독자가 이전 계산 또는 새로운 계산에 의존하지 않기를 바랍니다.").