git은 repo의 내용이 어떻게 변경되었음을 알 수 있습니까?


1

이전에 정리 된 파일을 수정하면 git notices가 나타납니다. 해당 파일의 수정 된 데이터를 이전의 내용으로 다시 설정해도 마찬가지입니다. 그러나 git은 작업 디렉토리에서 추적 된 모든 파일의 데이터를 읽지 않습니다. 너무 빠르기 때문에 할 수 없습니다. 나는 많은 GB 크기를 repos하고 있으며 repo의 git status모든 데이터를 빨리 읽을 수있는 매우 빠릅니다.

  • 자식은 어떻게합니까?
  • git이 모든 추적 파일의 내용을 확인하여 마지막으로 커밋 된 후 손상되지 않았는지 어떻게 확인할 수 있습니까? 다른 위치에서 repo의 내용을 확인하지 않고 작업 디렉토리의 가능한 차이에 대해 diff 도구에 요청하지 않는 것이 좋습니다.

진행할 수없는 작업 (몇 가지 옵션 제외)을 더 잘 이해하기 위해이 실험을 수행했습니다. 파일 내에 파일 시스템을 만들고 문서 저장소 (3GB의 추적 된 파일)를 복사했습니다. 그런 다음 마운트를 해제하고 파일 시스템이 16 진 편집기에 저장된 파일을 열고 "무관하다"라는 단어를 검색 한 후 "무자비한"이라는 단어로 대체했습니다 (동일한 저장 공간이 필요하므로 레이아웃을 망쳐 놓지 마십시오).

그런 다음 파일 시스템을 다시 마운트하고 충분히 확인했습니다 .git은 무언가 변경된 것을 보지 못했습니다. 변경 한 파일을 열고 "relentless"라는 단어를 검색하여 파일을 추적했는지 확인했습니다. 실제로, 처음으로 백업 파일 ( *~파일) 의 단어를 바꾸었을 때 나는 그 단어를 추적하지 않습니다. 그러나 두 번째로 변경 내용이 추적 된 파일에서 발생했습니다.

파일을 본 후에도 (접근 시간 스탬프가 변경됨) git은 변경 사항을 알지 못했습니다. 우주 광선이 내 하드 드라이브에 닿아 서이 사건에서 "무자비한"이라는 단어를 "무자비한"것으로 바꾸어 부패한 경우, 어떻게하면 git이이를 알아 차릴 수 있습니까?


"너무 빠르기 때문에 할 수 없습니다."가끔. 나는 짓을 git status상대적으로 작은 저장소에 그 과정이 중단됩니다.
JakeGould

git statusUSB를 통해 연결된 외부 하드 드라이브에 저장된 50GB보다 큰 repos를 수행 했으며 명령이 1 초 안에 반환되었습니다. 나는 git status현재 작업 트리에 3GB의 추적 된 데이터를 보유하고있는 문서 저장소에서 매일 작업합니다. 물론 SSD를 사용하지만 SSD는 600MB / s 미만으로 읽으며 명령을 반환하는 데 5 초가 걸리지 않습니다. 순간적으로 돌아갑니다. 그러나 인간에게는 즉시 time다음과 같이 측정합니다. real 0m0.032s; user 0m0.008s; sys 0m0.028s(줄 바꿈을 세미콜론으로 바꿨습니다.) 6 초 미만의 길.
UTF-8

Git이 파일 시스템과 상호 작용하는 경우 inode 를 통해 "변경된"또는 "수정 된"또는 "새"로 표시된 파일을 신속하게 감지 한 다음 파일에서 MD5를 빠르게 확인하여 내용이 변경되었는지 확인할 수 있습니다. 물론 이것은 큰 파일을 완전히 고려하지는 않지만 여기에 해당되는 것처럼 보입니다.
JakeGould

@JakeGould Git은 md5를 사용하지 않습니다. sha1을 사용합니다.
UTF-8
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.