Git 레포지토리 병합하기2 - 커밋 히스토리도 가져오기
지난 1편에 이어서 써본다.
wooogy-egg.tistory.com/3?category=937959
이후에 완벽하게 해당 레포지토리 병합 문제(커밋 히스토리 전부 다 가져오기)를 이해하고 있지 못했었는데,
이번 기회에 한번 더 공부해 보았다.
상황
예를들어서
내가 백엔드 관련 작업을 A 라는 레포지토리에서 진행하고 해당 부분은 커밋을 push하며 작업을 하고 있다고 가정하자.
그와 동시에 프론트엔드 담당자는 B 라는 레포지토리에서 자신의 작업을 진행하며 커밋을 push하며 작업을 하고 있다고 가정하자.
이때 나는 이 A, B 두개 레포지토리의 커밋 히스토리를 전부 가진 상태로
Project(루트 폴더)
- A 내용
- B 내용
형식으로 구성을 해주고 싶다.
이때 어떻게 해야할까?!
실제로 루트 폴더(레포지토리 명)의 이름은 같이 안 가져오고 내용물만
가져온다.
시도
실제로 로컬에서 clone 해온 A 디렉토리에 B 디렉토리를 옮기고 해봐도 해결이 안되었다.
첫째로는 .git 파일이 여러개면 충돌이 나서 문제가 생겼었고.
둘째로는 한쪽의 .git 파일이 없는 상태로 합치면 한쪽의 커밋 히스토리가 남지 않았다...
해결
git pull origin master --allow-unrelated-histories
위 명령어를 쓰면 해결이 될 것이라는 스택오버플로우 자료를 공유받았다.
생각한 방향은 이렇다.
A. 둘 중 하나를 선택시
- A나 B 레포지토리 중 한개를 선택해서 들어간다.
- git remote -v 를 했을때 origin 부분만 설정되어 있을텐데 내가 선택한다.
- 해당 위치에서 남은 레포지토리를 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. 새로운 레포지토리를 만들시
- 새로운 레포지토리를 생성한다.(이후에 당연히 clone으로 로컬로 땡겨온다)
-
새로운 레포지토리에서 A를 upstream으로 설정하고
--allow-unrelated-histories
로 땡겨온다.git remote add upstream A의 주소 git pull upstream master --allow-unrelated-histories
-
새로운 레포지토리에서 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
이와 같은 구조로 변경해주려면 어떻게 해야할까?!
- 새로운 레포지토리를 Project 이름으로 만든다.
-
A 레포지토리를 remote upstream으로 등록하고 pull
--allow-unrelated-histories
한다.
-
B 레포지로티를 remote upstream으로 등록하고 pull
--allow-unrelated-histories
한다.
- 이때 구조는
Project
- django
- front
일 것이다.
5. 이후에는 오히여 간단하다. 루트 위치에서 server라는 폴더를 만들어주고 django를 넣어준다.
끝!!!