Notice
Recent Posts
Recent Comments
Link
거의 알고리즘 일기장
기존 프로젝트를 git history를 유지한 상태로 monorepo에 프로젝트 합치기 (git history 유지한채로 repo 두개 합치기) 본문
web
기존 프로젝트를 git history를 유지한 상태로 monorepo에 프로젝트 합치기 (git history 유지한채로 repo 두개 합치기)
건우권 2023. 8. 29. 23:51최근에 회사에서 따로 관리하던 프로젝트 repo를 monorepo에 넣기로 결정이 되어 해당 작업을 맡아 하게 되었다.
그래서 오늘 작성할 주제는
monorepo 마이그레이션 중 git history 유지를 하는 방법이다.
디렉토리 구조는 turbo repo의 구조로 가정한다.
상황 및 조건
monorepo repo, proj-b repo 따로 따로 있다고 가정한다.
1. 현재 이러한 구조의 monorepo 가 있다.
2. proj-b를 monorepo에 추가하고 싶다. (app directory 안에)
3. git history는 유지된 상태여야 한다.
계획
1. proj-b 를 그대로 monorepo에 merge를 때리면 root에 있는 설정파일과 겹치기 때문에 conflict 난다.
2. proj-b 의 파일구조를 변경 (여기서는 app/proj-b 폴더를 만들어서 이곳에 모두 옮기고 commit을 한다.)
3. monorepo로 가서 local에 있는 proj-b를 git remote로 추가한다.
4. 추가한 remote의 작업한 branch를 merge 한다.
5. clean up 한다.
작업흐름
위의 계획에 따라 작업하면 명령어 흐름은 다음과 같다.
// 처음은 proj-b 루트, branch naming은 prepare-monorepo로 가정
mkdir proj-b
// proj-b 루트로 다시 가서
git mv -k ^proj-b proj-b (proj-b를 제외하고 proj-b로 전부 옮겨주는거임)
mkdir app
git mv -k ^app app (app을 제외하고 app으로 전부 옮겨주는거임)
git add.
git commit
// 3. 모노레포로 이동해서 proj-b를 git remote로 추가
git remote add -f proj-b [proj-b의 상대위치]
// 4. 추가한 remote의 작업한 branch를 현재 브랜치에 merge 한다.
git merge proj-b/prepare-monorepo -allow-unrelated-histories
// 5. 이후 클린 작업들, 설정 필요없는거 삭제 등등
// 위에 적힌 --allow-unrelated-histories 옵션은 Git에서 git merge나 git pull 명령을 실행할 때,
두 개의 브랜치나 두 개의 저장소가 서로 관련 없는(commit되지 않은) 이력을 가지고 있을 때,
이를 병합하거나 통합할 수 있도록 허용하는 옵션이다
팁
- 합치기 전에 최대한 proj-b(병합하고 싶은 레포)를 monorepo(base가 되는 레포)와 sync를 맞춰라
e.g. package manager - monorepo로 넣게 되면 필요없는 세팅들도 미리 삭제해놓는게 편하다.
- 위의 작성해놓은 작업흐름은 참고로만 사용하는게 좋다. (명령어는 상황에 따라 다를수 있다.)
하고 나서 생각해보면 별로 어렵지 않은 작업이었는데, 해본적이 없어서
git history를 어떻게 유지하면서 병합하지?
한참 고민했다ㅠ
반응형
'web' 카테고리의 다른 글
circle ci에서 ssh key가 있음에도 repo를 가져오지 못하는 현상 (0) | 2023.08.11 |
---|---|
svg drawing 구현과 문제, 그리고 simplify 방법 (0) | 2023.04.29 |
github issue template 추가하기 (0) | 2023.03.15 |
react context rerender 방지하기 (with: constate, use-context-selector) (0) | 2023.03.14 |
cra 환경에서 배포환경에 따라 .env 나누기 & 동작에 대해 톺아보기(with: env-cmd) (0) | 2023.03.13 |
Comments