Git의 작동 방식을 이해하려고합니다.GIT는 blob에 들어가는 것을 어떻게 결정합니까?
임의의 파일과 임의의 수의 커밋을 감안할 때 git은 어떻게 SHA-1 해시로 고유하게 식별되는 BLOB로 파일을 분할할지 결정할 수 있습니까?
perl/C/java 코드와 텍스트를 새로운 git repo에 약 10 개 커밋하고 파일을 작은 세그먼트로 나눠서 어떻게 분할했는지 결정했습니다.
Git의 작동 방식을 이해하려고합니다.GIT는 blob에 들어가는 것을 어떻게 결정합니까?
임의의 파일과 임의의 수의 커밋을 감안할 때 git은 어떻게 SHA-1 해시로 고유하게 식별되는 BLOB로 파일을 분할할지 결정할 수 있습니까?
perl/C/java 코드와 텍스트를 새로운 git repo에 약 10 개 커밋하고 파일을 작은 세그먼트로 나눠서 어떻게 분할했는지 결정했습니다.
힘내는 동일한 콘텐츠가 이미 존재하지 않는 한 (각 경우에 BLOB를 다시 사용하지 않는 한) 각 파일의 콘텐츠에 대한 BLOB를 만듭니다. 하지만, git은 모든 디렉토리, 커밋 및 서명 된 태그에 대한 객체를 생성합니다. 저장소가 재 포장 될 때까지 (자동적으로 또는 git gc
을 실행함으로써) 모든 객체는 .git/objects에 저장됩니다.이 경우 일부 객체는 함께 묶여 packfile (.git/objects/pack에 있음)로 분리됩니다.
생각하는 것처럼 여러 개의 얼룩 또는 작은 조각 사이에서 단일 파일의 내용을 분할하지 않습니다.
모든 파일이 blob에 저장되지만 반드시 Glob이 blob 당 파일을 저장한다는 것을 의미하지는 않습니다. Git은 물건을 함께 묶는 매우 효율적인 압축 형식을 가지고 있습니다. 내부적으로 Git의 패킹 포맷에 관심이 있다면,리스트를 보거나 아키텍쳐 문서를 읽는 것이 좋습니다.
좋아요, 나는 문서를 읽었지 만, 저와 다음 사람을위한 학습 과정의 속도를 높이려고 노력하고 있습니다. 지금까지 문서를 읽음으로써이 질문에 대답 할 수 없었습니다. 목록에 묻는 것에 대한 좋은 충고, 아무것도 여기에 오지 않으면 나는 그것을 할 것이다. –
이것이 최고의 http://eagain.net/articles/git-for-computer-scientists/ 찾을 수 있지만 질문에 실제로 대답하지 않습니다. –
메일 링리스트는 정말로이 특별한 질문에 사용해야하는 유일한 리소스입니다. (또는 당신은 소스 코드를 읽을 수 있습니다) – Arafangion
기본 (즉, "낮은 수준") 참조 중 일부를 계산할 것을 권합니다. 특정 질문에 대해서는 Git 커뮤니티 북의 Git Object Model 섹션을 참조하십시오.
그런 다음 Git의 낮은 수준의 핀치 ("내용 주소 지정 가능 파일 시스템"및 지시 된 비순환 그래프 관계)에 대한 이해를 위해 Git from the Bottom Up (PDF)이나 우수 Git Internals (PDF, US$9)을 읽는 것이 좋습니다.
좋아, 첫 번째 부분을 주셔서 감사합니다, 마지막 지점에서, 내가 뭘 혼란 스럽습니까, GiTK 파일 뷰어와 함께 특정 파일을 탐색하는 것입니다 힘내는 특정 무엇을 알 것 같다 새롭게 결합 된 파일의 일부가 나왔습니다. 그것이 "세그먼트"를 가지고있는 곳입니다. Git이 결심을하고 그 세그먼트가 어디에서 왔는지, 그리고 예를 들어 "make"와 같은 반복되는 라인이 고유 한 부분인지 어떻게 알 수 있습니까? 세그먼트 자체가 반복되는 변화가 아닌가? –
무슨 뜻인지 잘 모르겠습니다. 마지막 버전과의 차이점을 나타내는 경우 'diff'라고하며 두 파일을 비교하여 즉시 계산됩니다. git gui에서 비난하는 것을 의미하는 경우, 그것은 약간의 비난적 인 비난 알고리즘에 의해 수행됩니다. 명령 행에서 'git blame'을 참조하십시오. diff와 거의 동일하게 작동하지만 각 개정에 대해 수행되며 다른 파일의 제거 된 행을 고려합니다. – Pieter
좋아, 고마워, 내가 지금 undertandd 생각, 다른 하위 SCMs (SVN/CVS/perforce)에서 오는 혼란 스러울 때 일반적으로 자동으로 다른 디렉토리에 다른 이름의 파일에 존재했던 기존의 개정판과 비교할 수 없었습니다. 명시 적으로 수행되었습니다.이 경우에는 Git을 사용하지 않았습니다. 그래서 나는 그것들이 2 개의 별개의 이슈이고, "영리한"diff/blame algo가 어떻게 동작하는지 그리고 어떻게 코드가 얼룩에 저장되는지 이해한다. 답변으로 당신의 것을 표시하고 있습니다. 뭔가 다른 것이 우리에게 마음에 떠오르면 자유롭게 세부 사항을 추가하십시오. Git newbies ... Thanks –