🚨 12/1 업데이트 🚨

  • 서브 레포를 기준 레포에 한 번 합치고 끝내는 것이 아니라, 기준 레포의 하위 디렉토리를 서브 레포가 업데이트할 때마다 주기적으로 업데이트 해야 한다면 아래 작업 과정 중 8번의 내용을 생략하여 원격 저장소와의 연결을 유지해야 한다.
  • 만약 두 레포 간 동기화를 [서브 레포 변경 작업 → 기준 레포에서 fetch 후 merge하여 하위 디렉토리 내용 업데이트]하는 방식이 아닌, [기준 레포에서 하위 디렉토리 변경 작업  서브 레포 쪽으로 변경 사항 push]하는 방식으로 진행하게 될 경우 push 명령어 입력 시 다음과 같은 경고 문구가 뜨며 push가 이루어지지 않는다.

이미지 출처: https://velog.io/@jisoo/Git-warning-adding-embedded-git-repository

  • submodule이라는 개념을 이번에 처음 알았는데, 이걸 이용하면 서브 레포를 하위 디렉토리로서 가져오는 것처럼 구현이 가능할지 한번 확인해봐야겠다.

용어 정의

A레포 - 메인 레포

B레포 - 메인 레포의 서브 디렉토리로 들어갈 레포

 

작업 과정

1. A레포와 B레포를 각각 클론한다.

git clone 레포A주소

git clone 레포B주소

 

2. B레포 쪽 먼저 작업하자. B레포에 브랜치를 생성한다. (브랜치 이름은 원하는대로 생성. 여기선 temp라고 지었다.)

# 메인 브랜치로 이동
git checkout main

# 신규 브랜치 생성
git checkout -b temp

 

3. B레포의 루트 디렉토리에 디렉토리를 하나 생성한다. 이 디렉토리는 A레포의 하위 디렉토리로 들어가게 되므로 적절한 이름으로 잘 짓는다.

 

4. B레포의 루트 디렉토리의 모든 디렉토리 및 파일을 3에서 생성한 디렉토리로 옮긴다. 이로 인한 변경사항에 대해 git add, commit, push를 차례대로 진행한다.

git add .

git commit -m "커밋메시지 작성"

git push origin 2에서생성한브랜치명

 

5. 이제 A레포로 가서 다음 작업을 진행해보자. A레포의 원격 저장소 목록에 B레포를 추가해줄 것이다. (임시로 연결하는 것이고, 모든 작업이 마무리되면 연결을 다시 끊을 것이다.)

git remote add 원격저장소를가리킬이름 원격저장소 주소

# 예
git remote add tempRepo https://github.com/ahnanne/unit-test.git

기존 origin 저장소는 그대로 잘 연결되어 있다. 불안하다면 git remote -v 명령어를 입력하여 연결되어있는 원격 저장소 목록을 조회해보자.

 

6. 아래 명령어를 입력하여, 5에서 임시로 연결한 원격 저장소의 최신 사항을 로컬로 가져온다.

git fetch tempRepo

 

7. (하위 디렉토리를 추가하는 작업을 main 브랜치에서 바로 진행해도 된다면 이 작업은 main 브랜치에서 바로 진행하고, 그게 아니라면 브랜치를 생성 및 이동해서 작업을 진행하자.) 아래 명령어를 입력하여, 5에서 임시로 연결한 원격 저장소를 A레포의 하위 디렉토리로서 가져오자.

git merge 임시연결한원격저장소별명/2에서생성한브랜치명 --allow-unrelated-histories

# 예
git merge tempRepo/temp --allow-unrelated-histories

 --allow-unrelated-histories 옵션은 독립적인 두 프로젝트를 병합하려고 할 때 사용하는 옵션으로서, 여기서 사용하게 되면 B레포의 로그를 A레포로 가져오게 된다.

 

8. 5에서 임시로 연결했던 원격 저장소와의 연결을 끊는다.

git remote rm tempRepo

 

9. 7에서의 변경사항을 A레포의 원격 저장소(origin)로 push한다. 7에서 브랜치를 따로 생성하지 않고 main 브랜치에서 바로 작업을 했다면 아래와 같이 입력하고, 그게 아니라면 main 대신 해당하는 브랜치명을 입력하면 된다.

git push origin main

 

10. 원격 저장소에 가서 하위 디렉토리가 잘 추가되었는지 확인해본다!

기존에 없던 week02 디렉토리가 추가되었다! 들어가보면 B레포에 있던 내용들이 모두 들어가있다. 굳..

 

참고

How to move a git repository to subdirectory of another repository

 

How to move a git repository to subdirectory of another repository

You might come across a situation when working with Git where you want to move a repository to another repository (i.e., make it a subdirectory of the other` repository) while maintaining its full …

ahmadatwi.me

 

복사했습니다!