programing

"델타를 해결하고 있다"고 표시될 때 깃은 무엇을 하고 있습니까?

elecom 2023. 7. 2. 19:03
반응형

"델타를 해결하고 있다"고 표시될 때 깃은 무엇을 하고 있습니까?

저장소의 첫 번째 클론 동안 git는 먼저 개체를 수신한 다음 "델타를 해결"하는 데 거의 같은 시간을 소비합니다.클론의 이 단계에서 실제로 어떤 일이 발생합니까?

의 단계들git clone다음과 같습니다.

  1. repo 데이터베이스에 있는 모든 개체의 "팩" 파일을 수신합니다.
  2. 수신된 팩에 대한 인덱스 파일 만들기
  3. 헤드 리비전을 확인하십시오(비 베어 레포의 경우 분명히).

"Deltas 해결"은 두 번째 단계에 표시되는 메시지로, 팩 파일("git index-pack")을 인덱싱합니다.

팩 파일에는 실제 개체 ID가 없고 개체 내용만 있습니다.그래서 객체 ID가 무엇인지 결정하기 위해서, git는 압축 해제를 해야 합니다+개체 ID를 생성하기 위해 팩에 있는 각 개체의 SHA1이 생성된 다음 인덱스 파일에 기록됩니다.

팩 파일의 개체는 델타로 저장될 수 있습니다. 즉, 다른 개체에 대해 수행할 일련의 변경 사항입니다.이 경우 git는 기본 개체를 검색하고 명령을 적용한 다음 SHA1 결과를 적용해야 합니다.기본 개체 자체는 일련의 델타 명령을 적용하여 파생되어야 할 수 있습니다. (클론의 경우 기본 개체가 이미 발견되었지만 메모리에 캐시된 제조된 개체의 수에는 제한이 있습니다.)

요약하자면, "델타 해결" 단계에는 전체 repo 데이터베이스의 압축을 풀고 체크섬을 검사하는 작업이 포함되는데, 이 작업에는 시간이 오래 걸리지 않습니다.SHA1의 압축을 풀고 계산하는 데는 실제로 델타 명령을 적용하는 것보다 더 많은 시간이 소요됩니다.

후속 가져오기의 경우, 수신된 팩 파일은 수신 깃이 이미 가지고 있을 것으로 예상되는 다른 개체에 대한 참조(델타 개체 기반)를 포함할 수 있습니다.이 경우 수신 깃은 실제로 수신된 팩 파일을 다시 작성하여 이러한 참조된 개체를 포함하므로 저장된 팩 파일이 모두 자급자족할 수 있습니다.여기서 "델타 해결" 메시지가 시작되었을 수 있습니다.

Git는 델타 인코딩을 사용하여 일부 개체를 팩 파일에 저장합니다.그러나 현재 버전을 가져오기 위해 지정된 파일의 모든 변경 사항을 재생할 필요는 없으므로 Git에는 때때로 파일 내용의 스냅샷도 저장됩니다."델타 해결"은 이 모든 것이 일관성을 유지하도록 하는 단계입니다.

여기 온라인에서 이용 가능한 Pro Git 책의 "Git Internals" 섹션의 한 장이 있습니다. 이것은 이것에 대해 이야기하는 입니다.

앰버는 머큐리얼 또는 유사한 모델을 사용하는 객체 모델을 설명하고 있는 것 같습니다.Git는 개체의 후속 버전 간 델타를 저장하지 않고 매번 개체의 전체 스냅샷을 저장합니다.그런 다음 델타 압축을 사용하여 이러한 스냅샷을 압축하여 기록의 위치에 관계없이 사용하기 좋은 델타를 찾습니다.

언급URL : https://stackoverflow.com/questions/4689844/what-is-git-doing-when-it-says-it-is-resolving-deltas

반응형