누군가의 repository를 기반으로 이뤄진 프로젝트의 경우
해당 repository의 특정 commit에 종속될 수밖에 없다
이를 관리하기 위해 git에는 submodule 기능이 있다
npm, pip, apt 등의 설치 매니저로 설치할 수 없으며
그 사람이 올린 코드가 필요한 경우에는 submodule로
내 프로젝트에 이식하면 된다
여기까지가 대부분의 git submodule 사용 방법인데
다른 방식으로 써볼 수 있다
한 프로젝트에는 여러 repository가 들어가야할 수 있다
이걸 꼭 하나의 repository에 엉겨 넣으면 협업하기 복잡하고
대량의 코드가 될 경우 git에 올리는 것자체 불가능해질 수 있기 때문
github를 보다보면
어떤 폴더에 -> 표시가 있기도 하다
그 폴더를 클릭하면 또다른 repository로 넘어간다
눈 여겨 볼 점은 폴더 옆에 적혀있던 commit일 때로 간다는 점이다
그렇기에
submodule로 심어둔 repository의 최신 상태 반영을
개발자가 직접 해야 하며
다르게 생각하면
특정 커밋 기반으로 작성됨을 증명할 수 있어졌다
submodule 있다면 VSCode 상에서는 "S"로 표시되어 있다
CLI에서 확인하고 싶다면 git submodule
submodule을 git cli에서 만나게 되는 경우는 다음과 같다
특정 폴더를 add 하려고 하는데 그 안에 내장된 git repository가 있다는 경고
그래서 submodule을 하던가
아예 git에서 관리 안 하도록 하던가 결정하라고 한다
그래서 clone한 것을 지우고 submodule을 통해 glone한다
마지막 폴더명을 적지 않으면 repository 이름과 동일하게 생성된다
git submodule add {repository 주소} {폴더명}
.gitmodules 파일이 생성되면서
방금 add 내용이 추가되어 있다
submodule add를 하면
clone부터 add까지 진행되고
commit과 push는 개발자가 직접 해줘야 remote에도 반영된다
특정 submodule에 대해 update --init을 하면
새롭게 git clone을 해오고
각 submodule 별로 git pull을 하여
최신 커밋을 가져오는 코드
git submodule update --init application/afarm_drone
git submodule foreach 'git pull'
foreach 다음의 '' 안에 git pull 외에
원하는 명령어를 적어도 모든 서브 모듈에 동일하게 적용된다
공식 : https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-%EC%84%9C%EB%B8%8C%EB%AA%A8%EB%93%88