해당 글에서는 커밋 기록을 유지하면서 repository를 정리하는 방법에 대해 알아보겠습니다.
github에 repository를 생성해서 프로젝트를 진행하다보면 repository의 개수가 너무 많아져 정리할 필요성을 느끼게 되는 경험을 할 때가 있습니다.
repository를 정리하는 방법은 2가지가 있습니다.
합쳐져서 남는 repository를 main-repo, 합쳐질 repository를 sub-repo라고 정의하겠습니다.
먼저 두 repo를 git clone 해줍니다.
git clone https://github.com/your-github-name/main-repo
git clone https://github.com/your-github-name/sub-repo
이제 clone을 통해 다운 받은 sub-repo를 main-repo로 이동시키고 main-repo를 git add, commit & push 과정을 진행합니다.
git add .
git commit -m "Migrate sub repo" # 커밋 메시지는 마음대로 바꾸셔도 됩니다.
git push origin main # branch 명은 원하는 branch로 지정합니다.
이제 github에서 main-repo로 이동하여 main-repo 안에 sub-repo가 존재하는 것을 확인했다면 sub-repo를 git clone했던 폴더로 이동하여 sub-repo를 삭제합니다.
그리고 github의 sub-repo에 들어가 Settings - Danger Zone - Delete this repository - I want to delete this repository - your-github-name/sub-repo 입력 후 삭제하시면 최종적으로 repository가 main-repo만 남아있는 상태를 확인하실 수 있습니다.
이 방식으로 repository를 통합하고 삭제하는 경우, 기존 sub-repo에서 commit했던 기록들은 sub-repo를 삭제할 때 같이 삭제되게 됩니다.
git에는 git subtree라는 명령어가 있습니다.
git subtree는 서브프로젝트를 별도로 유지하면서 기본 리포지토리와 서브프로젝트 간의 양방향 협업을 허용합니다.
사용 방법은 다음과 같습니다.
합쳐져서 남는 repository를 main-repo, 합쳐질 repository를 sub-repo라고 정의하겠습니다.
먼저 main-repo를 git clone시켜줍니다.
git clone https://github.com/your-github-name/main-repo
이제 main-repo로 이동하여 아래와 같이 명령어를 작성해줍니다.
git subtree add --prefix="새로 생성할 폴더명" "https://github.com/your-github-name/sub-repo" main
위의 명령어에서 주의해야 할 점은 새로 생성할 폴더명
이 sub-repo와 동일한 이름이면 안 된다는 것입니다.
뒤의 main은 sub-repo에서 default로 지정되어 있는 branch를 입력하시면 됩니다.
이제 명령어를 실행해보시면 main-repo에 새로 생성할 폴더명
을 가진 폴더가 생겨 있는 것을 보실 수 있습니다.
이제 git push를 통해 저장소를 최신화시켜주시고 github에 가서 확인해보시면 sub-repo의 commit 기록이 유지되어 있는 상태로 commit log가 저장되어 있는 모습을 확인하실 수 있습니다.