본문 바로가기
카테고리 없음

[GIT] 서브모듈 연습

by 미소여우 2023. 1. 4.
728x90

CI/CD까지 공부해보니 서브 모듈이라는것을 접하게 되었다. 생활코딩 유튜브에 아주 정리가 잘 되어있어서 따라 쳐봤다.

super, lib, module 레포지토리를 만들어 주었다.

그리고 sub-module-prac이라는 디렉토리에서 테스트하였다.

git clone https://github.com/somefood/super.git
git clone https://github.com/somefood/lib.git
git clone https://github.com/somefood/module.git

각각 서브 모듈이 될 레포지토리에 간단하게 내용들을 입력해주었다.

이후 스테이지에 올리고 커밋 후 원격 레포지토리에 업로드 하였다.

그러고 super 레포지토리에 들어가서 다음과 같은 명령어를 입력해주었다.

git submodule add https://github.com/somefood/lib.git
git submodule add https://github.com/somefood/module.git

git status로 확인해보니 다음과 같이 추가 되었다.

여기서 .gitmodules는 자동으로 생성되었는데 내용은 아래와 같았다.

어떤 서브모듈들이 적용되었는지와 함께, path와 url이 기입되었다.

ls 해서 보면 내가 lib과 module에 입력했던 내용들이 들어와있다.

git diff --cached를 통해 현재 내 서브모듈이 어떤 커밋인지 확인할 수 있다.

git commit -am "init submodule" 이후 내 super 레포지토리는 두 개의 서브 모듈을 갖게 된 것이다.

push하면 내 서브 모듈이 반영된 것이 보인다! @ 뒤에는 커밋 히스토리라 보면 되겠다.

이제 한 번 서브 모듈 내용을 변경해 보겠다.

lib.conf의 내용을 v1에서 v2로 바꾼 후 add -> commit -> push까지 해두었다.

이렇게 하고 super에서 pull해보면 아무것도 안 될 것이다. 왜냐하면 lib은 독립적인 녀석이기 때문이다. lib으로 이동해서 pull하면 최신 사항을 반영할 것이다.

git status를 해보면 lib에 새로운 커밋이 있음을 볼 수 있다. 이후 내가 변경된 v2로 작업을 하고 잘 반영이 되었다 싶으면 커밋하여 push하면 되겠다.

lib이 v2로 되었다!

만약 서브 모듈 두 곳에서 변화가 일어나면?

이번엔 lib과 module 둘 다 변화를 주었다 lib v3, module v2. 위에 방식대로 내가 서브 모듈로 들어가서 pull하는 것은 여간 귀찮은 작업이다. 이런 번거로움을 한 번에 해결해주는 명령어가 있다!

git submodule update --remote

이렇게 --remote 명령어를 주면 원격지의 서브 모듈과 동일하게 업데이트 해준다.

그냥 git submodule update를 하면 내 커밋 기록에 있는 서브 모듈로 돌려준다.

만약 서브모듈에도 또 서브모듈이 있고 업데이트 하고 싶으면? --recursive 명령어로 반영해주자.

git submodule update --remote --recursive

내 서브 모듈 버전을 보고 싶다

git submodule [summary]

다음과 같이 치면 내 서브 모듈 정보를 볼 수 있다.

업데이트 전
리모트로 업데이트 후
git submodule summary하면 변경점을 친절히 알려준다!

git에도 반복문 같은게 있다?!

"git submodule foreach 명령어"를 사용하면 서브 모듈에 대해 모두 실행할 수 있다.

lib
module

다른데서 clone해간다면?

super2라는 이름으로 새로 클론을 해봤다.

ls명령어로 봤지만, 아무것도 없다. 이유는 서브 모듈은 클론해주지 않기 때문이다. 만약에 엄청나게 복잡한 프로젝트에서 서브 모듈까지 같이 클론하게 되면 상당히 비효율적으로 발생할 수 있기 때문이다. 이 경우는 내가 명시적으로 입력해주어야 한다.

git submodule init lib

cat .git/config하면 lib 서브 모듈이 등록됨을 볼 수 있다.

이후 위에서 배운 git submodule update를 입력하면 서브 모듈의 내용들을 갖고오게 된다.


https://www.youtube.com/watch?v=TAe4uZqYt6c&ab_channel=%EC%83%9D%ED%99%9C%EC%BD%94%EB%94%A9 

 

728x90

댓글