2011-09-21 3 views
1

스냅의 개념은 basic terminology입니다.스냅 샷의 개념

이 개념은 망할 놈의 워크 플로우에 사용됩니다 : 당신은 당신의 작업 디렉토리에있는 파일을 수정

  1. .

  2. 스냅 샷 개를 준비 용 영역에 추가합니다.

  3. 당신은 그들이 준비 영역에 저장 스냅 샷 영구적으로 힘내에 디렉토리에있는 파일을 커밋 않습니다.

당신은 스냅 샷이 정확히 무엇을 설명하고 파일 중 일부 작은 예를 표시하고이 스냅 샷을 그리고 왜 망할 놈의 다른 VCSs에 같이 차이를 만드는 대신이를 사용 수 있을까요?

답변

6

스냅 샷은 파일의 특정 시점에 있었던 내용을 의미합니다. 모든 버전 제어 시스템은 개념적으로 스냅 샷에서 작동합니다. 과거의 어떤 시점에서 소스 코드가 어떻게 보이는지 알고 싶습니다. 또한 저장 공간을 절약하기 위해 diff를 모두 저장합니다. 자식이 고유 한 것은 두 가지 방식입니다. 즉, diff 파일을 내부적으로 계산하고 저장하는 방식은 파일의 기록과 직접 관련이 없으며 diff 파일은 매번 다시 계산되지 않습니다.

실제로 모든 빌드에서 업데이트되는 1000 바이트 파일이 있다고 가정 해 보겠습니다. 1 바이트를 변경하면 git는 으로 임시로에 파일의 새로운 사본을 저장하고 1 바이트를 변경합니다. 이것은 사람들이 뒤집어서 "OMG, 자식이 너무 바보 같아서, 당장 diffs 파일을 저장해야합니다."라고 말합니다. 나는 전복을 고수하고 있습니다. "

그러나 소스 컨트롤을 실제로 어떻게 사용하는지 생각해보십시오. 비교를 원하는 거의 모든 것은 마지막으로 푸시 한 이후로 변경된 사항입니다. 그것은 diff를 아직 계산하지 않았기 때문에 git은 최근에 변경된 모든 파일을 쉽게 액세스 할 수있는 캐시를 가지게됩니다. 다른 버전 제어 시스템은 버전 1로 시작하여 수백 개의 diff를 적용하여 동일한 내용을 재구성해야합니다. .

변경 사항을 공유하기 위해 밀어 넣기를 수행하면 git gc이 네트워크를 통해 전송할 때 파일을보다 효율적으로 저장하기 위해 자동으로 실행되고 diffs가 계산되어 저장됩니다. 그러나 파일의 버전 n-1에서 버전 n까지의 차이는 아닙니다. 콘텐츠가 여러 파일에서 반복되는 경우 git이이를 고려할 수 있습니다. 동일한 변경 사항이 여러 분기에서 이루어진다면 git은이를 고려할 수 있습니다. 파일이 옮겨지면 git이이를 고려할 수 있습니다. 미래에 발견되는 휴리스틱 (heuristic)이 더 효율적으로 발견 될 경우, git는 기존 클라이언트를 손상시키지 않고이를 고려할 수 있습니다. diff가 항상 하나의 연속 된 버전에서 다음 버전으로 이어져야한다는 생각에 집착하지 않습니다.

다른 버전 제어 소프트웨어와 비교하여 git를 매우 빠르게 만드는 기본적인 설계 결정입니다.