git submodule 중첩된 깃 사용하기
- 깃 아래 깃..!
상황
1 | super |
- 이런 구조의 프로젝트가 있다
- super에서
git init
하여 프로젝트를 관리하다 보면 - 깃 히스토리가 client 내용, server 내용이 합쳐져 있다
- 구분하기 위해 커밋 메시지를 적을 때도 어떻게 적어야 할지 망설이게 된다
- 그래서 super, client, server에 모두
git init
하고 - super에서는 client와 server를 gitignore에 추가하고 사용해봤는데,
- 이것도 좋은 방법은 아닌 것 같았다
- 그래서 nested git repository 라는 키워드로 검색했고
submodule
이라는 것을 사용하면 된다는 것을 알게 되었다 - submodule을 사용하면 super 디렉터리에서 명령어 하나로 하위의 서브모듈 깃 프로젝트를 업데이트(pull) 할 수 있다
공부
- 생활코딩님의 강의를 보고 공부했다
1 | // 전제조건 |
- super에서는 하위 서브모듈의 변경을 감지하고,
- 하위 모듈의 해시(특정 버전을 가리키는)를 기억하는 방식으로 관리된다
git submodule update
명령을 사용하여 super에서 저장하고 있는 특정 버전의 하위 모듈로 업데이트한다git submodule update --remote
명령을 사용하여 각 하위 모듈을 최신 상태로 업데이트할 수 있다- 여러 컴퓨터에서 작업할 때 super를 클론하고
git pull && git submodule update
명령으로 한 번에 가져올 수 있겠다!
발생한 문제
1 | git submodule update --remote |
git submodule update --remote
명령을 실행하니 이런 에러가 발생했다- 나는 submodule을 알기 전에 그냥 하위에 또 다른 깃 디렉터리를 사용하고 있었는데,
- 그 상태 그대로
submodule add
하고 사용했더니 위 에러가 발생했다
- 해결방법은 기존 하위 레포를 삭제하고 다시
git submodule update --remote
를 실행한다
1 | rm -rf lib/ |
- 혹시 특정 브랜치에 대해 가져오고 싶으면
.gitmodules
파일을 열고 branch 값을 명시해준다
1 | // 수정 전 |