안녕하세요? 약 4시간동안 깃 오류를 해결하다보니 지금 목 신경쪽이 짜릿해요
누군가는 이 글을 보고 그러지 말았으면 좋겠습니다
팀원들끼리 메인 레포에
깃허브 아이디/SpringBoot/원본 파일
이 루트로 각자 브랜치에 푸시하기로 약속했습니다
로컬에서 경로 수정하고 폴더채로 푸시해버리려고 그냥 원본 파일 복사해서 nanna29/SpringBoot/원본파일 에 넣었습니다
그렇게 서브모듈이 뭔지도 모르던 저는 그냥 평소처럼 intellij에서 커밋과 푸시를 했습니다.
근데 갑자기 제 프로젝트가 저렇게 내부 코드도 안보이는 화살표 파일 아이콘으로 바뀐것입니다!
찾아보니 저게 Submodule이라고 하더군요
저런게 어느 단계에서 생긴지도 모르고 저는 정말 만들지도 않았는데 왜 생겼는지는 아직까지 의문입니다...
사진에서는 testPj만 서브모듈인데
수없이 많은 커밋과 푸시를 반복한 후 그 상위폴더인 SpringBoot 폴더부터 서브모듈이 되어버렸습니다...
SpringBoot 폴더가 서브모듈이 되었다고 생각하고 글 읽어주세요
정말 열심히 돌아다니면서 해결책을 찾았는데 다들 Submodule 만드는법, 만든거 삭제하는법 밖에 안알려주서 진짜 울것같았습니다... 저는 안만들었다구요...
그때 이 글을 봤고 드디어 해결했습니다!
https://tonylogs.tistory.com/1
[Git] Submodule을 일반 폴더로 변경
Submodule이란? 공식문서의 설명은 다음과 같다. 프로젝트를 수행하다 보면 다른 프로젝트를 함께 사용해야 하는 경우가 종종 있다. 함께 사용할 다른 프로젝트는 외부에서 개발한 라이브러리라던
tonylogs.tistory.com
지금부터 방식을 정리하려고 합니다
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> 부분에 내가 없애고 싶은 서브모듈 경로대로 적어줘야한다
지금은 멀쩡해졌다!
그리고 추가로 서술하자면 폴더안에폴더안에폴더안에프로젝트 넣는 방식 상당히 비추다...
관리하기도 어렵고 보기도 안좋고 깔끔하지 않다...
필요한 만큼의 폴더만 만들어서 사용하도록 하자...