안녕하세요? 약 4시간동안 깃 오류를 해결하다보니 지금 목 신경쪽이 짜릿해요
누군가는 이 글을 보고 그러지 말았으면 좋겠습니다
팀원들끼리 메인 레포에
깃허브 아이디/SpringBoot/원본 파일
이 루트로 각자 브랜치에 푸시하기로 약속했습니다
로컬에서 경로 수정하고 폴더채로 푸시해버리려고 그냥 원본 파일 복사해서 nanna29/SpringBoot/원본파일 에 넣었습니다
그렇게 서브모듈이 뭔지도 모르던 저는 그냥 평소처럼 intellij에서 커밋과 푸시를 했습니다.
근데 갑자기 제 프로젝트가 저렇게 내부 코드도 안보이는 화살표 파일 아이콘으로 바뀐것입니다!
찾아보니 저게 Submodule이라고 하더군요
저런게 어느 단계에서 생긴지도 모르고 저는 정말 만들지도 않았는데 왜 생겼는지는 아직까지 의문입니다...
사진에서는 testPj만 서브모듈인데
수없이 많은 커밋과 푸시를 반복한 후 그 상위폴더인 SpringBoot 폴더부터 서브모듈이 되어버렸습니다...
SpringBoot 폴더가 서브모듈이 되었다고 생각하고 글 읽어주세요
정말 열심히 돌아다니면서 해결책을 찾았는데 다들 Submodule 만드는법, 만든거 삭제하는법 밖에 안알려주서 진짜 울것같았습니다... 저는 안만들었다구요...
그때 이 글을 봤고 드디어 해결했습니다!
https://tonylogs.tistory.com/1
지금부터 방식을 정리하려고 합니다
1. 서브모듈 존재 확인하기
$ git submodule--helper list
# 혹은
$ git ls-files --stage | grep ^160000
저는 밑에 코드로 확인했습니다.
저 명령어를 치면 160000~~~ 하면서 Submodule이 생긴 경로? 같은게 나옵니다
저 같은 경우에는 nanna29/SpringBoot에 생겨있었습니다
2. Submodule을 일반 디렉터리로 변경하기
# 현재의 repository에 submodule의 commit들을 가져온다.
# submodule URL 경로는, 위의 예시의 경우 hyperledger repository가 있는
# https://github.com/SeiwonPark/hyperledger.git를 입력한다.
$ git remote add submodule_origin <submodule이 있는 repository URL>
$ git fetch submodule_origin
# fake merge를 하는데, confilct가 발생할 경우, submodule이 아닌,
# parent repository(위의 예시의 경우, hyperledger repository)를 우선 반영한다.
$ git merge -s ours --no-commit submodule_origin
# submodule HEAD를 가리키고 있는 reference를 제거한다.
# 위의 예시의 경우, ./fabric-samples를 입력한다.
$ git rm --cached <submodule folder>
$ git rm .gitmodules
$ rm -rf <submodule folder>/.git # Windows의 경우, del <submodule folder>\.git
# 이제 해당 파일들을 푸시한다.
$ git add <submodule folder>
$ git commit -m "fix: removed submodule"
$ git remote rm submodule_origin
$ git push
사진에는 커밋 후 푸시가 생략되어 있습니다
다만 나는 nanna29 폴더 하위 폴더인 SpringBoot 폴더에 Submodule이 생성이 되어있었다.
$ git rm --cached <submodule folder>
$ git rm .gitmodules
$ rm -rf <submodule folder>/.git # Windows의 경우, del <submodule folder>\.git
# 이제 해당 파일들을 푸시한다.
$ git add <submodule folder>
근데 그냥 <submodule folder> 부분에 SpringBoot만 적어주니 계속 gitbash가 못찾겠다고 오류를 냈다...
꼭 깃에 업로드 되어있는 파일 경로를 무시하지 말자!!
$ git rm --cached nanna29/SpringBoot
이렇게 모든 <submodule folder> 부분에 내가 없애고 싶은 서브모듈 경로대로 적어줘야한다
지금은 멀쩡해졌다!
그리고 추가로 서술하자면 폴더안에폴더안에폴더안에프로젝트 넣는 방식 상당히 비추다...
관리하기도 어렵고 보기도 안좋고 깔끔하지 않다...
필요한 만큼의 폴더만 만들어서 사용하도록 하자...