[Git] 레포지토리와 연결된 local 폴더가 여러 개일 때

Yunhye Park·2023년 9월 14일
0
post-thumbnail

문제 상황

  • git clone으로 레포지토리와 local 폴더 연결.

  • 그런데 local를 뒤적여보니 레포지토리와 동명의 폴더들이 사방에 존재.
    - desktop에도 abc 폴더가 있고, abc폴더 속에도 abc폴더가, 하다못해 qwe폴더 속에도 abc폴더가 있고..

  • 요약 :

해결과정

  1. 해당 레포지토리와 현재 연결된 local 폴더 찾기

git remote -v

  1. 어느 위치의 local 폴더를 사용할지 정하고, 그외 동명의 폴더들 삭제

clone을 이곳저곳에 해둬서 헷갈리면, 원격 끊기부터
git remote remove origin 입력 후,
git remote -v로 원격 끊김 확인

  1. 이번엔 제대로 clone
  • 로컬 위치 이동
cd 원하는 폴더 장소

cf. 하위 폴더로 한 번에 이동하려면
/를 기준으로 쭉 입력 (ex. cd desktop/hello/abc)

  • 폴더 생성
mkdir 새 폴더 이름 (or 기존 폴더 사용 시 과정 생략)
  • git과 연결
git clone 레포지토리 주소 (or 기존 폴더 사용 시 {주소}로 입력)

이미 존재하는 로컬 디렉토리와 clone하려면?

  1. local에 git 저장소(.git으로 된 파일/숨김 상태라 보이지 않음) 생성

git init

  1. 원격 레포지토리와 연결

git remote add origin 레포지토리 주소

이후엔 두 방법 중 택일.

  • 기존 파일 수정 후

git add > commit > push

혹은

  • 원격 저장소 내용 가져오기

git pull origin master --allow-unrelated-histories

위 내용이 복잡하다면
아예 모든 폴더를 삭제한 후,

cd 원하는 위치
mkdir 로컬에서 쓸 디렉토리명
cd 로컬에서 쓸 디렉토리명
git clone 레포지토리 주소

위내용을 순서대로 입력.

왜 이런 위치 꼬임이 발생했을까?

이유는 크게 두 가지다.

  • 이미 클론된 디렉토리인데, 현재 위치에서 또 클론을 해서 중첩 폴더 발생.
  • cd 이동할 위치를 설정하지 않고 냅다 클론

유의사항
1. git clone 레포지토리 주소는 한 번만 하면 유지되므로, 다른 레포지토리와 원격 연결할 때가 아닌 이상 생략하기.
2. 긴가민가할 땐 현재 위치 확인(pwd) 후 진행.
3. 로컬에서 디렉토리 바꾸면

git clone 끊기
git remote add
add > commit > push

순으로 진행

git init vs git clone ?

  • git init

이 명령어로 .git 폴더가 생겨서 git을 관리할 수 있다.

하지만 레포지토리가 생긴 건 아니다.최초 1회 commit을 통해 main branch가 생기는데, 그게 있어야 레포지토리가 생성된다. 그래서 README.md 등 어떤 파일이든 해당 디렉토리에 add-commit 해야 한다.

이토록 긴 과정을 한 방에 줄여주는

  • git clone

: git init + git remote add + git fetch + git checkout

새 레포지토리 생성 + 레포지토리에 URL 추가 + 그 URL에 있는 모든 branch를 local로 가져옴 + local에 main branch의 모든 파일 생성


덧붙이는 생각

  • terminal에서 git에 관한 명령을 내리지, local의 폴더나 파일 자체를 변경하지 않는다는 걸 몰랐다. git과 local이 서로 주고받긴 해도 로컬 디렉토리에 접근해서 클론하고 커밋하고 이러다 보니까 원격 저장소든 로컬이든 다 터미널로 해결한다고 잘못 생각했다.
    terminal 사용에 익숙해져야 한다는 생각으로 모든 과정을 여기서 처리하려다 보니 되려 시야가 좁아졌던 것 같다.

  • git init은 레포지토리를 새로 생성할 때 쓴다고 수업에서 들었는데, 같은 표현이라 그런지 clone과 구분 지어 이해하기 어려웠다. 명칭이 달라서 기능이 다르겠거니 예상하는 거 외엔.. 그런데 첫번째 커밋을 해야 main 브랜치가 생기고, 메인이 있어야 레포지토리가 생성된다는 게 신기하다.

  • git파일이 생기는 것은 또 뭘까? 숨김 상태라서 안 보인다는 사실은 어딘가에서 읽었는데 그게 생김으로써 뭐가 달라지는 건지 모르겠다. git을 관리할 수 있다면 수정, 삭제 등을 할 수 있다는 건가? git은 파일을 관리하는데, 이건.. 파일을 관리하는 git을 관리한다..? 단어만 같고 쓰임은 다른 게 아닌가 싶고. 더 조사해봐야 한다.


참고

Do I need to do 'git init' before doing 'git clone' on a project?
Git 개념 - init, clone
[Git] 비어있지 않은 로컬 저장소로 Clone하기

profile
일단 해보는 편

0개의 댓글