Git

여러 repositories 하나로 합치기

Developer-Michelle 2023. 2. 3. 21:27

연습하면서 여러 개의 repositories 생성했던거 하나의 repository 로 합치기

0. Github 원격 저장소에 새로운 repository 빈걸로 생성

 

1. git clone { 위에서 새로 생성한 repository 주소 }

//원격 저장소를 local로 클론하는 작업

 

2. cd { 방금 생성한 repository가 local에 저장된 위치 경로 }

 

3.  git subtree add --prefix={폴더 이름} {repository 주소} {branch 이름}

 

-> 이 과정에서 오류가 날 경우 (ambiguous argument 'HEAD': unknown revision or path not in the working tree.' )

-> 해결 방법: git commit --allow-empty -n -m "Initial commit."

 

4. git push

 

트러블슈팅 & 주의사항

위의 작업을 하다가 중간에 원격저장소(github 사이트) 에서 README를 추가한다던지 수정하면 에러남... 여기부터 지옥임 ㅠㅠ

 

그 이유는 원격 저장소와 로컬 저장소의 내용이 달라졌기 때문에 git에서 원래 파일 손실을 막기 위해서 에러를 자꾸 뱉어줌

pull 해야 되는데 이 과정에서 자꾸 에러가 남.. rebase 했다가.. 별 난리를 다 쳐야 하기 때문에 왠만하면 원격저장소에서 README 파일을 수정하거나 추가하지 말자 ㅠㅠ

-> 원인: git pull 하다가 꼬였음-> 해결: 새로운 폴더를 만들고 여기에다가 git pull 한 다음에 원래 폴더에 대치 (switch)

 

여튼 깃헙 원격 사이트에서 README 수정 또는 추가시 git pull을 해야 원격 = 로컬 일치가 된다.

 

 

위의 케이스가 아니더라도 보통 꼬였을 때 해결 방법 ??

꼬였던 원인 : git add 하기 전에 branch 지정해준 경우가 대다수였다.

branch 지정하지 않고 바로 add했다면 별 문제 없었을건데..

 

여튼 해결책: 

repository 원격으로 올린 폴더 안에 같은 이름으로 폴더 생성

여기에 원격으로 올렸던 폴더를 git clone + 해당 원격 폴더 주소

그리고 터미널에서 cd + 새로 만든 같은 이름의 폴더로 이동

git add .

git commit -m " ~~~ "

git push -u origin main

그럼 이제 원격 repository = local 같아졌을거임.

그렇다면 이제 새로 만든 폴더를 상위 폴더로 당기고 (원래 폴더는 이름 잠시 _2 이런식으로 바꿔놓고 원래 폴더 삭제. 새로 만든 폴더만 파인더에 남긴다)

 

참고 사이트

https://homoefficio.github.io/2015/07/18/git-subtree/

 

https://hanong.tistory.com/6

 

https://xtring-dev.tistory.com/entry/Git-%EC%97%AC%EB%9F%AC-%EA%B0%9C%EC%9D%98-repository%EB%A5%BC-%ED%95%98%EB%82%98%EB%A1%9C-%EB%AA%A8%EC%95%84%EB%B3%B4%EC%9E%90

https://hanco.tistory.com/9