Unity 개발일지

[Git] 서브모듈 라이브러리 생성 및 등록하기 본문

Unity 개발

[Git] 서브모듈 라이브러리 생성 및 등록하기

아머르 2025. 6. 10. 22:45

[서브모듈이란?]

서브모듈은 하나의 Git 레포지토리 내에 다른 Git 레포지토리를 포함시키는 기능으로, 이를 통해 큰 프로젝트를 여러 독립적인 모듈로 나누어 관리하고나, 여러 프로젝트에서 공통된 라이브러리를 재사용할 수 있다.

 

주로 GameManager, PlayerController, Singleton, ObjectPool 등의 주로 사용하는 스크립트들을 재사용할 수 있어서 프로젝트 초반 개발 속도를 매우 단축시켜준다.

 

[서브모듈 사용 이유]

1. 코드 재사용성 향상

  • 여러 프로젝트에서 동일한 라이브러리나 모듈을 사용할 때, 해당 모듈을 서브모듈로 포함시켜 코드 중복 감소
  • 유지보수와 업데이트 편리함

2. 독립적인 버전 관리

  • 서브모듈은 독립적으로 버전 관리가 가능하여, 특정 프로젝트에 맞는 버전을 지정하고 사용할 수 있음
  • 각 프로젝트의 특정 기능 쉽게 유지 가능

3. 모듈화된 개발

  • 프로젝트를 모듈화하여 각 모듈을 독립적으로 개발하고 테스트할 수 있음
  • 개발의 효율성을 높이고, 문제를 격리하여 해결할 수 있음

[폴더 구조]

.gitignore와 REAME파일은 외부에 있고 SortHurry가 유니티 프로젝트인 구조이다.

 

 

혹시 다음과 같이 처음 프로젝트를 Init했는데 다음과 같이 용량이 크다고 뜨는 이유는 .gitignore가 하위 폴더에 있는 파일을 추적하지 못해서 생기는 이유인데, .gitignore 파일을 조금 수정해주었다.

# This .gitignore file should be placed at the root of your Unity project directory
#
# Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore
#
.utmp/
**/[Ll]ibrary/
**/[Tt]emp/
**/[Oo]bj/
**/[Bb]uild*/
**/[Ll]ogs/
**/[Uu]ser[Ss]ettings/
**/[Mm]emoryCaptures/
**/[Rr]ecordings/

# Blender backup files
*.blend1
*.blend1.meta

# IDE and build-related
.vs/
.vscode/
.idea/
.gradle/
ExportedObj/
.consulo/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb
*.mdb
*.opendb
*.VC.db

# Unity autogenerated files
*.pidb.meta
*.pdb.meta
*.mdb.meta
sysinfo.txt
mono_crash.*

# Build results
*.apk
*.aab
*.unitypackage
*.app

# Crashlytics
crashlytics-build.properties

# Test runner files
InitTestScene*.unity*

# Addressables and Visual Scripting
/ServerData
**/[Aa]ssets/StreamingAssets/aa*
**/[Aa]ssets/AddressableAssetsData/*/*.bin*
**/[Aa]ssets/Unity.VisualScripting.Generated/**

# OS generated
.DS_Store
Thumbs.db

# Ensure consistent line endings
* text=auto
*.cs text eol=lf
*.shader text eol=lf
*.cginc text eol=lf
*.compute text eol=lf

하위 폴더까지 ignore되도록 해서 2만건 가까히 되는 변경점이 65건으로 줄어들었다.

 

[Unity 프로젝트  Git에 올리기]

해당 작업은 처음 서브모듈을 추가할 때만 하는 작업이고,

이후에는 서브모듈 수정 -> 커밋 -> 상위 저장소에 반영 하기만하면 된다.

 

1. Git 저장소 초기화 및 Git 캐시 초기

터미널에서 루트 폴더로 이동 후

cd "E:/Unity Games/SortHurry"(본인경로 입력)
git init

 

하게되면 .git 폴더가 생기며, 이제 이 폴더가 Git 저장소의 루트가 된다.

 

 

2. GitHub의 기존 커밋 가져오기

먼저 원격 연결을 확인한다.

git remote add origin https://github.com/amor1523/SortHurry.git(레포지토리명.git)
git branch -M main

그리고 GitHub의 기존 커밋을 가져와서 로컬과 병합해준다.

git pull origin main --allow-unrelated-histories

 

git status

 로 병합결과를 확인한다.

 

 

3. 스테이징 (추적시작) 및 첫 커밋 생성

git add .
git commit -m "Initial commit SortHurry"(프로젝트명)

 

4. 기존 GitHub 저장소의 커밋과 병합

git pull origin main --allow-unrelated-histories

 

 

5. 충돌이 없으면 푸시

git push -u origin main

-u 옵션은 앞으로 git push만 입력해도 자동으로 origin main으로 푸시되게 해주는 설정이다.

 

[서브모듈 추가하기]

1. 서브모듈 추가

git submodule add https://github.com/CocoBear-Games/CBLib.git SortHurry/Assets/CBLib(깃허브주소.git 폴더경로)
git submodule update --init --recursive

아까의 폴더 구조에서는 SortHurry의 SortHurry 폴더 내부에 Assets 폴더에 CBLib이라는 서브모듈 폴더를 생성해줄 예정이었다.

그리고 나서는 git submodule update --init --recursive 로 서브모듈을 초기화 및 다운로드 해주었다.

 

[서브모듈의 변경사항 저장 및 원격 저장소에 푸시]

 

1. 서브모듈 수정하기

cd SortHurry/Assets/CBLib

서브모듈 폴더로 이동

 

2. 일반적인 Git 절차로 커밋

git add .
git commit -m "Update submodules to latest commits"(커밋 내용)
git push origin main

 

3. 상위 저장소(Root)에 서브모듈 변경 반영하기

서브모듈의 커밋 해시가 바뀌었기 때문에 상위 프로젝트에서는 그 커밋 포인터를 갱신해야 한다.

cd ../../
git add Assets/CBLib
git commit -m "Update CBLib submodule reference"
git push

 

[다른 사람이 이 프로젝트를 받을 때]

다른 PC나 팀원이 clone할 경우, 서브모듈까지 받아야 하므로 해당 코드 입력

git clone https://github.com/amor1523/SortHurry.git
cd SortHurry
git submodule update --init --recursive

 

혹은 최신 버전으로 갱신하려면

git submodule update --remote --merge

 

해당 방법은 서브모듈 수정 시 다른 팀원들이 매번 pull받을 때마다 git submodule update --init --recursive 명령어를 입력하여 서브모듈을 갱신해주어야한다.

 

git config --global submodule.recurse true 명령어를 이용하면 git pull이나 git merge 시에도 서브모듈이 자동으로 같이 업데이트 되지만 로컬 Git 클라이언트 설정이기 때문에, GitHub 서버(웹UI)에는 영향을 주지 않는다.

 

팀 프로젝트에서 서브모듈을 다루기 위한 자세한 내용은 다음 포스트에서 다루도록 하겠다.

반응형