오늘은 기존에 toy_project라는 레포지토리에서 여러 폴더를 통해서, 프로젝트를 진행하고 있었는데, 각 commit 내용들이 섞이는게 싫어서 지금까지 만들던 폴더를 새로운 레포지토리로 이동하고자했다.
그냥 새로 만들어서 옮기면 지금까지의 기록들이 사라지기 때문에, commit내역을 보존하면서 옮기는 방법을 수행하였다.
우선 내 toy_project 라는 Repository안에 pdf_merge, voice secretary 라는 두개의 프로젝트 폴더가 있었고, 나는 pdf_merge 를 새로운 레포지토리로 생성하고자 하였다.
toy_project/
pdf_merge/
voice_secretary/
1. Github에 새로운 repository 생성.
우선 github에서 새로운 repository를 생성한다.(본인=Pdf-merger)
이 때, readme나 gitignore, license등은 만들지말자. (만들어도 나중에 방법이 있긴한데, 나중에 추가하는게 훨씬 편한 것 같다.)
2. 프로젝트 폴더로 이동
git bash를 이용해서 기존의 repository(본인=toy_project)로 이동한다.
$ cd <본인 프로젝트 경로>
$ cd toy_project
3. subtree로 옮길 폴더 복사
git의 subtree 명령어를 이용하여, 옮길 폴더(본인=pdf_merge)를 복사한다. 마지막 브랜치 이름은 임의로 정하였다.(본인=moved)
toy_project/
pdf_merge/
voice_secretary/
Pdf-merger
$ git subtree split -P <옮길 폴더 명> -b <브랜치 이름>
$ git subtree split -P pdf_merge -b moved
4. 새로운 레포지토리의 로컬 저장소 생성 후 이동
이제 새로운 repository(본인=Pdf-merger)를 로컬에 저장할 폴더(본인=Pdf-merger)을 생성하고 이동한다.
-> 위에서 새로 만든 repository*본인=Pdf-merger을 clone해와도 된다. clone했다면 아래 5번에서 git init은 진행 x)
$ cd <새로만든폴더>
$ cd Pdf-merger
5. 본인의 브랜치에 git init ( 4번에서 clone했을 경우 생략)
새로 만든 폴더(본인=Pdf-merger)에서 git init을 한다. (git 저장소로 만듦)
git init을 안하면 아래와 같은 오류 발생.(fatal: not a git repository (or any of the parent directories): .git
-> 이 때 git init 전에 반드시 본인의 default 브랜치가 main인지, master인지 확인해야한다.
나의 경우에는 원래 main을 사용하는데, git init을 하니까 자동으로 master로 지정되어 레퍼지토리에 쓸모없는 브랜치가 만들어졌다.
만약 모르겠다면, 아래 코드를 이용하여 현재 자신의 default branch가 무엇인지 확인해보고
$ git config --get init.defaultBranch
내가 원하는 branch로 설정이 잘 되었다면, git init을 진행하고 그렇지 않다면 아래 코드를 이용하여 원하는 브랜치(본인=main)를 기본으로 설정해준다.
$ git config --global init.defaultBranch <원하는브랜치>
$ git config --global init.defaultBranch main
6. 생성한 임시 브랜치 pull
기존의 repositroy(본인=toy_project)에서 방금 생성한 3번에서 생성한 브랜치이름을 pull한다.
$ git pull <기존 레포지토리> <브랜치 이름>
$ git pull ../toy_project moved
7. 로컬 저장소와 새로운 레포지토리 연결
4번에서 생성한 새로운 레포지토리의 로컬저장소(본인:Pdf-merger)와 기존 레포지토리(본인:toy_project)를 연결한다. 새로운 레포지토리의 https를 복사해서 붙여넣어주면 된다.
$ git remote add origin <원격지주소>
$ git remote -v
$ git remote add origin https:~~~
$ git remote -v
-> 본인의 기존(예전) repository와 연결하는 방법은 여러가지가 있는데, 다른 방법들은 아래 더보기를 확인하면 된다.
1. 새로 만든 repository를 clone으로 로컬 저장소에 추가한 사람.
위의 순서대로 4번에서 폴더를 새로 생성한게 아니라, 새로 옮기고자 하는 repoistory를 clone해서 로컬에 저장해놓은 사람은 이미 연결이 되어있는 것이다. (즉 이런 사람은 위의 git init도 진행하지 않았어도 된다.)
2. 새로 만든 repository의 https로 연결
이게 가장 쉬운 방법인데, https 주소를 복사해서 위의 <원격지주소>에 적어주고 진행하면 된다.
3. 새로 만든 repository의 ssh로 연결
이건 git을 내가 잘 몰라서 모르겠지만, 아무나 연결할 수 없도록 비번?을 거는 것 같은데 귀찮아서 안찾아봤다..
이 방법으로 진행하면 앞으로 pull, push 등을 할때 비번을 입력해야 한다.
우선 ssh-keygen을 통해서 개인키를 내 pc에 보관하고, 공개키를 github에 등록해서 인증하는 방식으로 진행된다.
우선 아래 코드를 git bash에서 실행한다.
$ ssh-keygen
그러면 아래와 같이 나올텐데,
우선 첫번째 Enter file in which to save the key (/c/Users/DESKTOP/.ssh/id_rsa): 여기는 아무것도 입력하지 않아도 된다.
두번째 Enter passphrase (empty for no passphrase): 여기에는 자신만이 알 수있는 비밀번호를 입력한다.
->이때 쳐도 프롬프트에 안보이기때문에 신중하게 치길 바란다.(잘못친거같으면 백스페이스 1000번정도 누르고 ㄱ)
세번째에서 방금 입력한 비밀번호를 입력한다. 이것또한 프롬프트에선 안보인다.
위까지 맞추면 이상한 코드들이 뜰것이고, 아래 코드를 작성하면, 또 알 수없는 코드들이 나온다.
$ cat /c/Users/jongholee/.ssh/id_rsa.pub
그럼 나오는 코드들에서 시작 ssh-rsa부터 끝까지 전부 복사한다.
이후, github의 설정에 들어가서 ssh key등록에 복사한 것을 전부 입력해준다.
이제 공개키는 github에 등록됐고, 개인키는 내 pc에 저장되어 있다.
마지막으로 7번에서와 동일한 코드를 https 주소대신 새 repository의 ssh 주소로 입력해주면 동일한과정이 실행된다.
-> 난 아직 굳이 ssh로 왜 하는지...git 초보라서 몰라서 그냥 https로 했다. (ssh도 진행해봤었음)
8. 코드 Push
마지막으로 이제 새로운 repository에 파일들을 올린다. 자신의 브랜치가 main인지 master인지 확인하고 둘 중 한 코드를 실행시키면 끝이다.
$ git push origin -u master
또는
$ git push origin -u main
그럼 이제 github에 새로운 repository와 이전 다른 repo에 있던 폴더들이 commit기록이 보존된 채로 옮겨진다.!!!!!!!
이제 예전 레포지토리에 남아있던 프로젝트 폴더(pdf_mrege)는 삭제하고 싶으면 삭제해도 된다.
하다가 궁금하시면 댓글로 남겨주세요.
'알쓸신잡' 카테고리의 다른 글
git commit message를 visual studio code로 작성하기 (0) | 2023.11.17 |
---|---|
[Git] 오류 모음 (0) | 2023.11.02 |
카카오톡 api로 친구한테 메세지 보내기 (0) | 2023.10.27 |
카카오톡 api로 나에게 메세지 보내기 (1) | 2023.10.27 |
파이썬 오류 모음 zip (0) | 2023.10.27 |