본문 바로가기
Programming/git, svn

[Git] 깃 서브모듈 (명령)이해하기 (사용법)

by 근육곰돌이 2023. 2. 13.
728x90

git submodule이란?

프로젝트를 수행하다 보면 다른 프로젝트를 함께 사용해야 하는 경우가 종종 있다.
함께 사용할 다른 프로젝트는 외부에서 개발한 라이브러리라던가 내부 여러 프로젝트에서 공통으로 사용할 라이브러리일 수 있다.
이런 상황에서 자주 생기는 이슈는 두 프로젝트를 서로 별개로 다루면서도 그 중 하나를 다른 하나 안에서 사용할 수 있어야 한다는 것이다. (공식 설명)

* 간단하게 이해하기

제품의 (화장품)패키지를 만드려고 한다고 가정을 해보자.
화장품을 팔기위해서는 "화장품"도 중요하지만, 완전한 제품이 되기 위해서는 "화장품"과 부가적인 부속도 같이 포장되어야한다.

제품: "화장품" + "샘플" + "포장지" + "포장박스" 모두가 완전한 합일때 제품으로써 효과를 발휘한다.

위와 같이 "화장품" Git이 존재한다면, 다른 "샘플", "포장지", "포장박스" Git이 따로 있을 것이다.
"화장품"을 제품을 만들기위해 서브 Git("샘플"...)을 포함을 해야할것입니다.

이때 사용해야하는것이 submodule 기능이죠!

 


* 서브 모듈 추가

-- 기본 추가 방법
git submodule add [필수: git 주소]


-- 다른 이름으로 추가 방법
git submodule add [필수: git 주소] [폴더 이름 지정]

 

 

* 서브 모듈 업데이트

(원격지) 모듈 별 각각 업데이트
cd [서브모듈 디렉토리]
git fetch; git pull;    # <-- 이건 설명 필요없쥬?
 
(원격지) 서브 모듈 업데이트 (1 deps)
# github나 원격지의 업데이트된 소스를 내부에 업데이트한다.
git submodule update --remote    
 
(원격지) 서브 모듈 업데이트 (all deps: 서브 모듈 안에 서브 모듈까지 모두 싹다~~!!)
# submodule의 submodule의 submodule 처럼 체인형태로 있어도 모두 ALL 업데이트
git submodule update --remote --recursive 
 
(로컬) 서브 모듈 업데이트
# 내부 로컬 서브모듈로 이동
git submodule update

 

 

* 서브 모듈 버전 확인

# 로컬과 리모트와의 차이가 있는지 확인
git submodule summary 

# 현재 서브모듈의 상태
git submodule

 

 

* 서브 모듈 : 로그 확인

git submodule foreach git log --oneline

 

 

* 다른 컴터에서 clone 받을 시

: 서브모듈이 있는 git이 clone 시 submodule 소스까지 없는 이유는 용량 유지관리 때문인거 같다. (git은 원래 수정사항 기반으로 움직임)
필요 시 서브모듈의 소스를 가져오고, 빌드해보면 좋을듯합니다.

git clone [git주소]

# submodule의 local설정 파일을 구성
git submodule init 


# submodule의 소스를 가져온다.
git submodule update
반응형