본문 바로가기
[Git]

로컬 폴더를 그대로 깃 레파지토리로 만들기, gitHub 폴더 업로드 에러 해결(You've added another git repository inside your current repository, 폴더 화살표 표시 해결 방법)

by 황원용 2023. 6. 3.
728x90
💡 최근에 여러 강의를 듣고 코드를 작성하게 되면서 gitHub 레파지토리 한 곳에서 여러 프로젝트를 관리하려고 했다. 그런데 하나의 폴더에 프로젝트 파일을 모두 넣고 업로드하려고 하니 잘 되지 않았다. 어찌어찌 해결하여 폴더를 업로드해도 열리지 않거나 하는 문제도 있었다. 예전에 분명히 폴더 단위로 업로드한 경험이 있는데 지금은 되지 않으니 뭔가 꼬인 것 같았다. 여러 문제가 복합적으로 얽혀있는 것 같아 손을 놓고 있다가 어제 해결하여 그 과정을 보여주려고 한다. 이 과정의 목표는 로컬 환경에서 하나의 폴더에 여러 프로젝트를 관리할 때 그 폴더 그대로 깃허브 레파지토리로 만들어 깃허브와 연결시키는 것이다.

 

 

1. 로컬 환경 파악하기 

  • 나는 맥OS 환경에서 진행함을 밝힌다.
  • 여기 studyCode라는 폴더가 있다.
  • 이 폴더 안에는 jpashop이라는 자바 프로젝트가 있다.

 

  • 현재 studyCode 폴더는 깃허브와 어떠한 연결도 되어있지 않다. 이 폴더를 그대로 깃허브 레파지토리에 업로드하려고 한다.

 

 

2. git init

 이 명령어는 새로운 git 저장소를 로컬에 생성한다. 그동안은 다른 사람이 만들어 놓은 github 원격 저장소에서 git clone 명령어를 통해 파일을 내려받거나, 내가 레파지토리를 만들고 파일을 드래그로 업로드하는 방식만 사용했다. 항상 레파지토리를 만들고 파일을 업로드하고 그걸 다시 클론 하는 방식으로 써왔는데 굉장히 비효율적이라고 생각은 했었다. 처음부터 로컬 경로를 그대로 로컬 레파지토리로 만드는 방법이 없나? 했는데.. 역시 있었다.

 

 git init을 통해 비어있는 studyCode 경로에 git 로컬 레파지토리가 생기고 studyCode 폴더 안에 .git 디렉터리가 생겼다. 이 디렉터리는 git이 버전관리를 하기 위한 메타정보가 잠겨있다. 중요한 점은 이 디렉터리를 지우면 해당 git 저장소의 모든 변경 이력이 소실되며 일반 디렉터리로 돌아온다는 것이다.

 

 

3. .gitignore

  • gitHub Desktop에서 Add Local Repository를 통해 studyCode를 불러왔다. 여기서 맥OS의 .DS_Store를 .gitignore에 추가해 주었다.
  • .DS_Store는 맥 OS에서만 생기는 파일인데 쓸데없는 파일이므로 git 관리 대상에서 제외하려고 한다. 이처럼 만약 업로드하려고 하는 폴더 안에 gitHub에 올리고 싶지 않은 파일이 있다면 .gitignore에 추가하는 작업을 통해 git이 관리하지 않게 만들 수 있다.

 

  • .gitignore에 추가했다.
  • gitHub Desktop이 없다면 직접 .gitignore 파일을 만들어 추가해 주면 된다. 방법은 구글링을 통해 찾아보자.

 

 

4. gitHub에 원격 저장소와 연결하기

  • 자 이 부분이 첫 번째 에러이다.
  • 터미널에서 git status로 확인해보니 .gitignore와 jpashop 폴더가 tracking 되지 않는 파일이라고 나와 git add . 명령어로 tracking 되게 추가하려고 하니 위 에러가 나왔다. 가장 윗줄을 읽어보면 문제의 원인이 나온다.
  • You've added another git repository inside your current repository.
  • 해석하면 너의 현재 레파지토리 내부에 다른 깃 레파지토리가 추가되어 있다.
  • 그렇다. jpashop은 이미 과거에 별도의 프로젝트로 gitHub에 업로드했었다. 그때 jpashop 내부에 .git이 생겼을 것이다. 이 때문에 위의 에러 문구가 나온 것 같았다.

 

 

5. 첫 번째 문제 해결

  • jpashop 경로로 들어가 ls -a 명령어로 확인해 보니 역시나 .git이 있었다. 이제 이걸 지워주도록 하자.

 

rm -rf .git

  • 명령어를 실행하고 상위폴더(studyCode)로 돌아가 git add . 명령어를 사용하니 아까와는 다르게 잘 추가되었다.

 

git add .
git commit -m "커밋 메시지 내용"
git push origin main
  • git 로컬 레파지토리에 정상적으로 push 되었다.

 

 

6. gitHub 원격 저장소와 연결하기

  • gitHub Desktop을 통해 gitHub 원격저장소에 로컬 레파지토리를 등록한다.
  • gitHub Desktop이 없다면 따로 gitHub 페이지에서 만들면 된다.

 

  • 정상적으로 업로드되었다.

 

 

7. 두 번째 문제 해결하기

  • 원격 저장소에 들어가 보니 jpashop 폴더가 화살표 표시가 뜨면서 열리지 않았다.
  • 구글링을 해보니 열리지 않는 이유는 jpashop 폴더 안에 .git 디렉터리가 있기 때문이라고 한다.
  • 그런데 분명 아까 전에 .git 디렉터리를 삭제해 줬다.
  • 좀 더 찾아보니 스테이지 파일까지 제거해줘야 하는 것 같았다.

 

git rm -rf --cached
  • 다시 문제의 폴더에 들어가 위 명령어로 스테이지에 존재하는 파일을 제거한다.
  • 그리고 다시 push를 해준다.

 

  • 정확히는 모르겠지만 jpashop 폴더 내의 submodule이 삭제되었다는 걸 보니 .git으로 관리되는 폴더(studyCode) 안에 또 다른 .git 디렉토리가 있는 폴더(jpashop)가 있다면 이를 submodule이라고 부르는 것 같다.
  • 그리고 jpashop 폴더 내 파일들이 전부 새로 추가된 것 같다
  • .git 관련 기록이 캐시까지 완전히 지워야 하나보다.

 

 

정리

  1. 기존의 .git 및 관련 캐시 삭제(jpashop 내 스테이지 캐시 삭제)를 해야 하며 이 과정을 거쳐야 jpashop submodule이 완전히 삭제된 것으로 처리된다.
  2. 이후에 폴더 내 파일을 전부 새로 추가해야 한다.(완전히 리셋해야 하는 듯)

 

git add .
git commit -m "커밋 메시지 내용"
git push origin main
  • 다시 tracking 시키고 커밋하고 push 한다.

 

  • 화살표가 사라지고 정상적으로 접근이 가능해졌다.

 

  • 다른 폴더도 마찬가지로 git 레파지토리로 관리한 적이 있다면 위의 방식대로 .git과 관련 캐시 기록을 전부 지우고 올리면 문제없이 업로드 가능하다.

 

 

 

참고

https://zzang9ha.tistory.com/346

https://www.daleseo.com/git-init/

https://heytech.tistory.com/400

728x90