서브 모듈은 여기에서 의도 한대로 특히 부드럽게 작동하는 것이 아닙니다. 당신은 아마 눈치 챘을 때, (아마도 영원히, 힘내 V1.7 기준) 서브 모듈에서 프로젝트에 대한 변경을 커밋하려면 다음을 수행해야합니다
- 는 서브 모듈의 변화를 확인합니다.
- 하위 모듈에 커밋하여 새 SHA 해시를 가져옵니다.
- 외부 프로젝트의 .gitmodules 파일을 새 해시로 업데이트하십시오.
- 외부 프로젝트에 커밋하십시오.
하위 모듈과 외부 프로젝트를 록 스텝으로 개발할 경우이 작업은 번거로울 수 있습니다. 코드베이스를 혼합 할 때 단순함보다 안정적인 소프트웨어 구성을 선호하는 것이 "올바른 방법"이지만 명령 시퀀스는이 경우 병리학 적으로 길다.
터지는 스택 왜하지만, 서브 모듈 와 록 스텝 개발 아마 몇 가지 큰 문제 중 하나를 나타냅니다
- 당신은 당신의 하위 구성 요소 사이에 명확한 인터페이스를 가지고 있지 않고, 구현 세부 사항은 경계를 넘어 누출.
- 하위 구성 요소에 대해 잘 생각한 인터페이스가 없으므로보다 흥미로운 문제를 해결할 때 계속 재발견해야합니다.
- 인터페이스가 안정적이고 고품질이지만 하위 모듈 코드에 대한 품질 보증 프로세스가 좋지 않으므로 다른 작업을 수행하는 동안 계속해서 문제를 해결할 수 있습니다.
- (A와 B가 다른 것을 계속 변경하는 경우) "공통"코드는 실제로 생각보다 훨씬 작거나 다르게 나누어 져야합니다. 이러한 경우의
아무도 당신의 반드시 해당하지 않지만이는 데있어 끔찍한 록 스텝 서브 모듈 업데이트 워크 플로우를 일으키는 원인이되는 문제들입니다. 서브 모듈은 꽤 잘 작동합니다. 거의은 공유 라이브러리와 헤더 파일을 사용하지만 근원에서 컴파일하기 위해서는 (예 : 이상한 컴파일 플래그가 있어야합니다.) 내 접근 방식은 실제 문제의 근본 원인 인 경우 이러한 문제를 해결하는 것입니다.
그러나 이러한 문제가없는 경우 잘못된 도구 일 수 있습니다. 그것은 내게 말하기가 힘들지만, 이것은 확실히 가능합니다.
매우 밀접하게 관련된 : [고도로 결합 된 git submodules] (http://stackoverflow.com/questions/3712917/highly-coupled-git-submodules). 나는 실제로 그 설정을 사용하기 시작하지 않았다. (나의 동료는 병합 방법을 간신히 알기 때문에 나를 깜짝 놀라게한다.) 그러나 당신을 도울 수있는 몇 가지 갈고리가있다. – Cascabel
@ 제프롬미 - 우! 동료들과 어디서 왔는지 알아.나는이 작업을 진행하는 것을 조금 주저하고있다. 다만, 프로덕션 지점의 공통 코드에서 버그를 패치 할 수 있다는 점에서 많은 확신을 줄 것이라고 생각한다. 링크 주셔서 감사합니다! – kelloti