クイズ: サブモジュール
한국어 원문으로 표시합니다.
부모 저장소의 트리에서 서브모듈 자리는 어떤 모습인가?
.gitmodules에 적힌 브랜치 이름을 가리키는 심볼릭 참조- 모드
160000에 서브모듈의 커밋 해시가 든 항목 하나 - 서브모듈 저장소 전체를 담은 packfile 한 덩어리
- 서브모듈의 최신 태그 이름이 든 일반 텍스트 파일
서브모듈 디렉터리 안에서 git status 를 하면 항상 detached HEAD 인 이유는?
- 서브모듈 저장소가 읽기 전용으로 마운트되기 때문
.gitmodules에 브랜치를 적지 않으면 git 이 브랜치 생성을 막기 때문- 부모가 기록한 것이 브랜치가 아니라 커밋이라 그 커밋으로 체크아웃되기 때문
- 서브모듈에는
refs/heads디렉터리 자체가 만들어지지 않기 때문
git submodule status 의 앞 글자가 - 인 것은 무슨 뜻인가?
- 서브모듈이 아직 초기화되지 않아 디렉터리가 비어 있다
- 서브모듈이 부모가 기록한 것보다 오래된 커밋에 있다
- 서브모듈에 커밋되지 않은 변경이 남아 있다
- 서브모듈 원격 주소에 접근할 수 없다
서브모듈에서 최신 커밋을 받아 쓰고 잘 되는 것을 확인했다. 동료도 같은 코드를 쓰게 하려면?
- 서브모듈 저장소에서 새 태그를 찍어 둔다
.gitmodules의 url 을 최신 저장소 주소로 고쳐 커밋한다- 동료에게
git submodule update --remote를 돌리라고 알린다 - 부모에서
git add vendor/lib로 gitlink 를 커밋해 올린다
CI 러너에서만 빌드가 깨지고 로컬은 멀쩡하다. 서브모듈과 관련해 가장 먼저 볼 것은?
- 러너의 clone 에
--recurse-submodules가 빠져 디렉터리가 비었는지 - 러너의 git 버전이 부모 저장소보다 낮은지
- 서브모듈 저장소의 기본 브랜치 이름이 바뀌었는지
.gitmodules파일이.gitignore에 걸려 있는지
로컬 경로를 서브모듈로 추가하려는데 transport 'file' not allowed 가 난다. 무엇인가?
- 해당 디렉터리에 읽기 권한이 없어 git 이 접근을 포기한 것
- 로컬 경로 서브모듈은 절대 경로로만 쓸 수 있다는 제약
- CVE-2022-39253 이후 서브모듈의 file 전송이 기본으로 막힌 것
.gitmodules에 url 대신 path 만 적혀 있을 때 나는 오류