.git/* 파일의 간단한 파서를 작성하고 있습니다. 객체, 심판, 팩 파일 등 거의 모든 것을 다루었지만 문제가 있습니다. 내가 300M이라는 큰 저장소를 가지고 있다고 가정 해보자. 그리고/some/deep/inside/file 파일을 바꾼 모든 커밋을 찾고 싶다. 내가 지금하고 있어요 것은 : 반복적으로 I 때까지 반복 git은 파일과 관련된 커밋을 어떻게 가져 옵니까?
- :
- 에 의해 그 안에 파일을 찾는
- 를 저지 마지막 가져 오는 파일로 들어가십시오.
- 추가적으로 파일로가는 각 하위 폴더의 해시를 점검하고 있습니다. 이전 커밋과 같이 그 중 하나가 동일한 경우, 그 파일이
- 가 나는 파일의 해시를 저장하고 부모가 커밋 가져 오기 (이 때문에 부모 디렉토리가 변경되지 않은) 변경되지 않았습니다 가정
- 해시 변화가
- 를 발생하면 다시 파일을 찾아 선택하면 예 다음 원래 커밋 (즉, 부모 전에 하나) 파일
내가 이상과 유엔을 통해 그것을 반복을 변경했다 내가 처음 커밋을 할 때까지.
이 솔루션은 효과가 있지만 좋지 않습니다. 최악의 경우, 처음 검색하는 데 3 분이 걸릴 수 있습니다 (300M 팩의 경우).
속도를 높이는 방법이 있습니까? 나는 너무 큰 물체를 메모리에 두는 것을 피하려고 노력했지만, 지금은 다른 어떤 방법도 보지 못했습니다. 그리고 심지어 초기 메모리로드 영원히 걸릴 것 :(
접견 및 덕분에 어떤 도움을 자식이 특정 파일의 변경 내용을 추적하는 데 사용하는 기본 알고리즘의
내가 궁금한데 - 왜 자식 코드가 이미 복제 한거야? 그리고 어떻게 코드를 볼 수없는 이유가 있습니까?('git log'를 실행할 때 무슨 일이 일어나는 지 추적해라.) –
Cascabel