programing

Git는 서브모듈에 대한 커밋의 SHA1을 어디에 저장합니까?

newstyles 2023. 6. 28. 21:25

Git는 서브모듈에 대한 커밋의 SHA1을 어디에 저장합니까?

Git 저장소에 하위 모듈을 추가하면 해당 sha1에서 참조하는 하위 모듈의 특정 커밋이 추적된다는 것을 알고 있습니다.

이 sha1 값이 저장된 위치를 찾고 있습니다.

.gitmodules그리고..git/config파일은 하위 모듈의 경로만 표시하고 커밋의 sha1은 표시하지 않습니다.

git-submodule(1) 참조는 다음에 대해서만 설명합니다.gitlink엔트리 및 깃 모듈(5) 참조에도 이에 대한 내용이 없습니다.

Git의 객체 데이터베이스에 직접 저장됩니다.하위 모듈이 있는 디렉터리의 트리 개체에는 하위 모듈의 커밋에 대한 항목이 있습니다(이를 "gitlink"라고 함).

해보세요git ls-tree master <path-to-directory-containing-submodule>(또는 그냥)git ls-tree master하위 모듈이 최상위 디렉터리에 있는 경우).

개체 데이터베이스($GIT_DIR/objects/하위 모듈 트리 개체가 저장되는 위치는 최근에 진화하고 있습니다.

Git 2.34 (Q4 2021)에서는 서브모듈로 다시 만들기 git grep(man)위한 코드가 업데이트되어 서브모듈 객체 저장소를 대체 객체 저장소로 추가(최적이 아닌) 메커니즘으로 마이그레이션되었습니다.

커밋 18a2f66, 커밋 3e8bf0, 커밋 0693806, 커밋 dd45471, 커밋 78ca584, 커밋 50d92b5, 커밋 8d33c3a, 커밋 35e03d(2021년 8월 16일)를 Jonathan jhowtanTan()에 의해 커밋합니다.
(주니오 C 하마노에 의해 합병 -- -- 11e5d0a 커밋, 2021년 9월 20일)

서브모듈 ODB를 교대로 submodule게으르게 추가합니다.

사인 오프 바이: 조나단 탄
리뷰 담당자: 에밀리 셰이퍼
리뷰 담당: 마테우스 타바레스

Git에게 서브모듈 ODB를 객체 저장소에 대한 대안으로 추가하도록 티칭합니다.the_repository에 없는 물체에 처음 접근할 때만the_repository,그리고 언제가 아니라도add_submodule_odb()이 호출됩니다.

이렇게 하면 대체 방법을 통해 하위 모듈의 개체에 액세스하는 것에서 해당 리포지토리 개체를 명시적으로 전달하여 하위 모듈의 개체에 액세스하는 방법으로 점진적으로 마이그레이션할 수 있습니다.
모든 Git 명령은 호출을 통해 하위 모듈 개체에 액세스할 수 있음을 선언할 수 있습니다.add_submodule_odb()(지금처럼) 그러나 하위 모듈 ODB 자체는 필요할 때까지 추가되지 않으므로 개별 명령 및/또는 인수 조합을 하나씩 마이그레이션할 수 있습니다.

[명시 저장소-객체 전달의 장점은 코드 명확성(객체 읽기가 어떤 저장소에서 왔는지 분명함), 성능(슈퍼프로젝트든 서브모듈이든 어떤 저장소에서 개체에 액세스할 때마다 모든 서브모듈 ODB를 선형적으로 검색할 필요가 없음),부분 클론 하위 모듈과 같은 미래 기능의 가능성(객체가 누락된 경우 어떤 저장소에 레이지 모드로 전환할지 모르기 때문에 현재로서는 불가능)]

이 커밋은 또한 코드 경로에 이 등록이 필요하지 않음을 입증하기 위해 테스트가 대체의 실제 등록을 치명적으로 만들기 위해 설정할 수 있는 환경 변수를 도입합니다.

언급URL : https://stackoverflow.com/questions/5033441/where-does-git-store-the-sha1-of-the-commit-for-a-submodule