Jost Do It.

그냥 IT해.

서버 및 환경/Git

[git] copy한 레포에서 submodule이 있을 때 초기화 방법

그냥하Jo. 2023. 12. 20. 16:01
반응형

문제 상황

 

성질이 다른 데이터에 대해 거의 비슷한 작업을 해야해서 기존에 작업했던 모듈을 copy해 작업했다.

기존에 작업했던 모듈들은 git submodule을 가지고 있는데 copy한 작업을 git에 올리니까 submodule로 인식이 안됐다.

 

.gitmodules에는 submodule 경로와 url이 잘 잡혀있지만...

 

push된 결과는 일반 레포로 잡힌걸 확인할 수 있다.

 

 

git submodule status를 확인 해보니 기존 레포와 달리 서브모듈이 인식안되는걸 확인할 수 있었다 (결과가 안나옴).

 

 

원래 레포에선 이렇게 서브모듈에 대한 상태정보가 나온다.

 

원인

 

깃을 초기화하고 새로운 원격 레포에 push 하면 git은 submodule에 대한 정보를 알 수 없다.

즉, submodule에 대한 정보를 입력해줘야 깃은 해당 레포들이 submodule인지를 알 수 있다.

실제로 push 후에 .git/config 와 .git/modules 경로를 확인해보면 submodule에 대한 정보가 없다.

따라서 submodule에 대한 정보를 넣어줘야 한다.

 

 

해결방법

 

기존 submodule 레포들을 삭제하고 git에 submodule 정보들을 입력하자.

 

1. 기존 레포 경로 삭제

rm -rf ./{서브 디렉터리 경로}

 

 

2. .gitmodules 삭제

rm .gitmodules

 

 

3. 서브모듈 관련 git 캐시 삭제

git rm -r --cached {서브 디렉터리 경로}

 

 

4. 서브모듈 등록

git submodule add {서브 디렉터리 url} {서브 디렉터리 경로}

 

서브 모듈을 등록하면 해당 경로에 서브디렉터리가 복제된다.

 

 

5. git push

git add .
git commit -m "fix submodule"
git push origin {브랜치명}

 

 

결과

 

정상적으로 서브모듈로 인식됨을 확인할 수 있다.

 

Reference

Issue with adding common code as git submodule: "already exists in the index"

반응형