티스토리 뷰
내용 구성
- 맥락
- 문제점
- 해결 방법
- 진행 과정
- ① 통합 레포지터리 생성 및 clone
- ② 옮기려는 레포지터리를 remote로 등록
- ③ 레포지터리 옮기기
- --allow-unrelated-histories
참고
1. 맥락
문제점
템플릿 엔진으로 혼자 진행했던 풀 스택 레포지터리 A가 있고, 나중에 프론트엔드 팀원이 합류하여 템플릿 엔진에서 React로 프론트 구현 방식을 변경한 레포지터리(fork) B가 있었습니다.
즉, 똑같은 나아라 프로젝트인데 서로 버전이 다른 레포지터리가 따로따로 존재하고 있었습니다.
해결 방법
레포지터리 2개가 따로 있는 것보단 하나의 레포지터리에서 브랜치로 관리하는 것이 더욱 타당하다고 생각했습니다.
이에, 기존 레포지터리의 히스토리를 유지하면서 새로운 나아라 레포지터리로 통합하고자 합니다.
템플릿 엔진을 사용한 버전은 template-engine 브랜치로, React를 사용한 버전은 express-react 브랜치로 이동시킬 예정입니다.
2. 진행 과정
위 그림은 TemplageEngine 레포지터리와 React 레포지터리를 새로운 레포지터리인 Na-A-Ra에 통합하는 과정을 간략히 보여줍니다.
① 통합 레포지터리 생성 및 clone
GitHub에서 Na-A-Ra라는 새 레포지터리 생성한 후 clone합니다. README.md 파일은 자동으로 생성하였습니다.
git clone https://github.com/A/Na-A-Ra.git
cd Na-A-Ra
② 옮기려는 레포지터리를 remote로 등록
git remote add r1 https://github.com/A/TemplateEngine.git
git remote add r2 https://github.com/B/React.git
③ 레포지터리 옮기기
템플릿 엔진으로 작업한 레포지터리(r1)를 먼저 옮기겠습니다. main에서 template-engine 브랜치를 생성합니다. 그리곤 나중에 레포지터리를 옮겨 왔을 때 충돌이 발생하지 않도록 미리 README.md 파일을 삭제합니다.
git switch -c tempalte-engine
rm README.md
git add .
git commit -m "chore: README 제거"
r1 레포지터리 이력을 가져와 병합하고, origin의 template-engine 브랜치로 push 합니다.
git fetch r1
git merge r1/main --allow-unrelated-histories
git push origin templage-engine
다시 main 브랜치로 이동한 후, React로 작업한 레포지터리도 위와 같은 방식으로 히스토리를 옮겨줍니다.
git switch main
git switch -c express-react
rm README.md
git add .
git commit -m "chore: README 제거"
git fetch r2
git merge r2/main --allow-unrelated-histories
git push origin express-react
3. --allow-unrelated-histories
git merge 명령어의 옵션 중 하나입니다. 일반적으로 git merge는 병합하려는 두 브랜치 간의 공통 조상 커밋을 찾아서 자동으로 병행합니다. 그러나 --allow-unrelated-histories 옵션을 사용하면 두 브랜치 간 공통 조상이 없을 때도 병합할 수 있습니다.
위에서 서로 다른 레포지터리의 히스토리를 유지한 채 새로운 레포지터리로 통합한 것처럼 완전히 다른 프로젝트를 통합할 때 위 옵션을 사용하면 됩니다.
'개발 > Git' 카테고리의 다른 글
VScode-깃허브GitHub 연동 꿀팁 - git clone 사용 (0) | 2022.03.08 |
---|---|
VScode와 깃허브 연동하기 (0) | 2022.01.08 |
[맥MAC] 깃Git 완전 삭제 명령어 (0) | 2022.01.04 |