git의 submodule에 대해 알아봅니다.
⇒ 프로젝트에 지금 필요한 모듈만 선택적으로 복제하여 사용하면, 전체 저장소 용량도 줄이고 관리 효율도 높일 수 있다.
super/ # 메인 저장소
├── lib/ # sub1 저장소가 들어갈 폴더
└── module/ # sub2 저장소가 들어갈 폴더
git submodule add submodule저장소주소 디렉토리명
git submodule add https://github.com/user/sub1.git lib
# lib 디렉토리 안에 sub1저장소가 clone된다
git submodule add https://github.com/user/sub2.git module
# module 디렉토리 안에 sub2저장소가 clone된다
git remote -v
git status
, diff --cached
: 현재 submodule(lib/module)이 어떤 커밋(버전)에 연결되어 있는지 확인.git submodule
git submodule summary
: commit하지 않은 submodule 변경사항을 요약.submodule이 업데이트 되었을때 그것을 반영시키는 법
git pull
: 각 submodule은 독립된 저장소이기 때문에, 해당 디렉토리에서 직접 pull 가능.cd lib
git pull
git submodule update
: 디렉토리에 연결된 현재 커밋으로 checkout.git submodule update --remote
: 연결된 원격저장소의 최신 커밋으로 checkout. 모든 submodlue을 한번에 업데이트.git submodule update --remote --recursive
: submodule의 하위 submodule까지 포함해서 모두 업데이트.git submodule foreach git 명령어
: 각 submodlue에 동일한 명령 실행.
git submodule foreach git log --oneline
git submodule foreach "git log --oneline;ls -al"
# 여러 명령어를 입력하고 싶다면 ""필요
git clone submodlue이포함된저장소주소
git submodule init
: .gitmodules 기준으로 모든 submodule 정보 초기화.git submodule init 특정submodule의path
: 특정 submodule을 정보 초기화.git submodule update
: 각 submodule을 .gitmodules에 명시된 커밋 버전으로 checkout.git submodule init lib
# 특정 서브모듈만 초기화
# .gitmodules에 path = lib 가 있어야 정상 작동
git submodule update
# 각 submodule을 지정된 버전으로 checkout
git clone --recurse-submodules 저장소주소
: 저장소와 함께 모든 submodule까지 자동으로 clone.