Git 레포지토리 병합하기2 - 커밋 히스토리도 가져오기

반응형

지난 1편에 이어서 써본다.

wooogy-egg.tistory.com/3?category=937959

 

Git 레포지토리 병합하기

현재 상황 현재 Flutter & DRF 프로젝트를 진행한 상황이다. 하지만 실제 Flutter 부분과 아래의 Django+DRF 부분을 분리하여 레포지토리를 만들고 push 하였다 깔끔하게 Flutter-DRF 레포안에 두 레포를 한번

wooogy-egg.tistory.com

이후에 완벽하게 해당 레포지토리 병합 문제(커밋 히스토리 전부 다 가져오기)를 이해하고 있지 못했었는데, 

이번 기회에 한번 더 공부해 보았다.

 

상황

예를들어서

내가 백엔드 관련 작업을 A 라는 레포지토리에서 진행하고 해당 부분은 커밋을 push하며 작업을 하고 있다고 가정하자.

그와 동시에 프론트엔드 담당자는 B 라는 레포지토리에서 자신의 작업을 진행하며 커밋을 push하며 작업을 하고 있다고 가정하자.

이때 나는 이 A, B 두개 레포지토리의 커밋 히스토리를 전부 가진 상태로

Project(루트 폴더)
- A 내용
- B 내용

형식으로 구성을 해주고 싶다.

이때 어떻게 해야할까?!

실제로 루트 폴더(레포지토리 명)의 이름은 같이 안 가져오고 내용물만 가져온다.

시도

실제로 로컬에서 clone 해온 A 디렉토리에 B 디렉토리를 옮기고 해봐도 해결이 안되었다.

첫째로는 .git 파일이 여러개면 충돌이 나서 문제가 생겼었고.

둘째로는 한쪽의 .git 파일이 없는 상태로 합치면 한쪽의 커밋 히스토리가 남지 않았다...

해결

git pull origin master --allow-unrelated-histories
Git refusing to merge unrelated histories on rebase
Asked During git rebase origin/development the following error message is shown from Git: fatal: refusing to merge unrelated histories Error redoing merge 1234deadbeef1234deadbeef My Git version is 2.9.0. It used to work fine in the previous version. How can I continue this rebase allowing unrelated histories with the forced flag introduced in the new release?
https://stackoverflow.com/questions/37937984/git-refusing-to-merge-unrelated-histories-on-rebase/41765529#41765529

위 명령어를 쓰면 해결이 될 것이라는 스택오버플로우 자료를 공유받았다.

생각한 방향은 이렇다.

A. 둘 중 하나를 선택시

  1. A나 B 레포지토리 중 한개를 선택해서 들어간다.
  1. git remote -v 를 했을때 origin 부분만 설정되어 있을텐데 내가 선택한다.
  1. 해당 위치에서 남은 레포지토리를 upstream 으로 설정한다.
git remote add upstream B의 주소 # A 를 선택했을 시

git remote add upstream A의 주소 # B 를 선택했을 시

4. pull로 --allow-unrelated-histories 로 upstream의 master 브랜치를 가져옴

git pull upstream master --allow-unrelated-histories

B. 새로운 레포지토리를 만들시

  1. 새로운 레포지토리를 생성한다.(이후에 당연히 clone으로 로컬로 땡겨온다)
  1. 새로운 레포지토리에서 A를 upstream으로 설정하고 --allow-unrelated-histories 로 땡겨온다.
    git remote add upstream A의 주소
    git pull upstream master --allow-unrelated-histories
  1. 새로운 레포지토리에서 B를 upstream으로 설정하고 --allow-unrelated-histories 로 땡겨온다.
    git remote add upstream B의 주소
    git pull upstream master --allow-unrelated-histories


결과

나는 A 방식으로 진행했는데 결과는 성공!!

  • B 레포지토리의 커밋 기록

응용

그렇다면

A          |      B
- django   |     - front

로 나눠져 있는 레포지토리를

Project
	- server
		- django
	- front

이와 같은 구조로 변경해주려면 어떻게 해야할까?!
  1. 새로운 레포지토리를 Project 이름으로 만든다.
  1. A 레포지토리를 remote upstream으로 등록하고 pull --allow-unrelated-histories 한다.
  1. B 레포지로티를 remote upstream으로 등록하고 pull --allow-unrelated-histories 한다.
  1. 이때 구조는
Project
- django
- front

일 것이다.

5. 이후에는 오히여 간단하다. 루트 위치에서 server라는 폴더를 만들어주고 django를 넣어준다.

끝!!!

반응형