Programming/git, svn

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

근육곰돌이 2023. 2. 13. 17:32
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
반응형