커밋 로그를 유지하면서 깃허브 저장소 합치기
나의 올해 신년 다짐중 하나는 의미있는 내용으로 1일 1커밋을 하는 것이다!
다짐을 지키기 위해 스프링을 공부하면서 실습 내용들을 커밋하고 있었다. 공부 중에 여러 서브 프로젝트들이 생겼고, 계속 늘어나는게 보기 좋지 않아 저장소를 하나로 합치기로 마음 먹었다! 새로운 폴더를 만들어서 내용을 옮긴 뒤 push를 하면 정말 빠르고 쉽게 합칠 수 있지만,공부 중 주제별로 커밋해놓은 로그와 애써 심어놓은 잔디가 사라지기 때문에 로그를 유지하면서 합치는 방법에 대해 포스팅 하겠다!
1. 여러 저장소를 통합할 새로운 저장소를 생성한다.
-깃허브에 만든 뒤 clone을 하던, local에 만든 뒤 깃허브와 연결하던 원하는 방법으로 새로운 저장소를 만든다.
-이 때 새로운 커밋내역을 반드시 하나 남겨줘야한다고 한다! 아무 변경사항이 없으면 커밋이 되지 않기 때문에, 필자는 temp파일을 하나 만들어서 커멋하였다.
2. 새로운 저장소에 합칠 저장소를 옮겨준다.
※ 새로운 저장소를 메인 저장소, 옮겨올 저장소들을 서브 저장소로 칭하겠다.
git subtree add --prefix=[폴더명] [서브저장소 깃허브 주소] [서브저장소의 브랜치명]
git subtree add --prefix=sub_repo https://github.com/****/sub_repo.git master
-폴더명은 새로운 저장소에 저장 될 파일 이름이기 때문에 원하는 이름으로 설정해주면 된다.
3. 새로운 저장소에 push 해준다.
2번까지 진행해서 성공했다면, 저장소가 옮겨졌을 텐데 이제 깃허브에 push를 해주면 된다.
git push origin HEAD:main (또는 master)
위와 같은 명령어를 써서 push 해줘도 되고, git add -> commit -> push를 진행해도 된다.
위 과정을 통해 진행하면 기존의 저장소는 삭제해도 된다! 새로운 저장소에 기존 저장소의 커밋 로그가 잘 남아있을 것이다!
에러가 나는 경우는 주로 옮겨올 저장소가 현재 최신버전이 아니거나(git push를 통해 기존 저장소를 최신으로 업데이트)
서브저장소의 브랜치명을 잘못 입력하는 경우이다. 잘 확인한 뒤 다시 진행해보자!