여러 Git Repository를 하나로 합치기
- git subtree를 사용하는 방식
- git subtree : Git의 서브모듈과 비슷하며 서브모듈보다 간편하게 여러 Git 레포지토리의 내용을 병합하고 관리할 수 있는 도구다.
- 특정 디렉토리에 다른 Git 레포지토리를 서브트리 형식으로 추가하고, 여러 Git 레포지토리의 커밋 히스토리를 하나의 레포지토리에 통합할 때 사용한다.
- 다른 레포지토리의 이력을 유지하면서 그 레포지토리의 내용을 서브디렉토리로 병합할 수 있기에 여러 레포지토리의 변경 사항을 하나의 레포지토리에서 관리하고자 할 때 유용
- 레포지토리 병합 시 자동으로 새로운 커밋을 생성한다.
- ex) Add 'JavaSpringBoot/' from commit '232be42d...
- 서브모듈과 달리 병합 후에도 독립적으로 관리할 수 있으며 커밋 히스토리를 보존한다.
- 사용법
- git clone 부모레포지토리URL
- 클론 후 부모 레포지토리 디렉토리로 이동
- git remote add origin 부모레포지토리URL
- git subtree add --prefix=레포지토리명 자식리포지토리주소 branch명
- 'ambiguous argument 'HEAD': unknown revision or path not in the working tree.' 오류가 뜨는 경우
- 부모 레포지토리에 아무 커밋이 없어서 발생하는 오류로
git commit --allow-empty -n -m "메시지"로 해결할 수 있다.
- 부모 레포지토리에 아무 커밋이 없어서 발생하는 오류로
- git subtree 사용 시 레포지토리 병합을 하면서 자동으로 커밋 메시지가 생겨나기에
git commit --amend -m "메시지"를 통해 커밋 메시지를 수정할 수 있다. - git push origin main
- git clone 부모레포지토리URL
- 사용법
- git subtree : Git의 서브모듈과 비슷하며 서브모듈보다 간편하게 여러 Git 레포지토리의 내용을 병합하고 관리할 수 있는 도구다.
- git filter-repo를 사용하는 방식
- git filter-repo : 레포지토리 커밋 이력을 재구성하고 여러 레포지토리를 하나로 합칠 때 사용한다.
- git subtree와의 차이점으로는 병합 과정에서 별도의 커밋 메시지를 생성하지 않는다.
- git filter-repo 사용법
- pip install git-filter-repo
- git filter-repo는 기본 Git에 포함되지 않기에 별도로 설치
- git clone 부모레포지토리URL
- 부모 레포지토리를 클론 후 해당 디렉토리로 이동
- git remote add repo1 병합할레포지토리URL
git fetch repo1
git filter-repo --path-rename '' --path repo1 --source-branch main- 해당 레포지토리의 기존 커밋 이력을 유지하면서 서브디렉토리로 병합할 수 있다.
- --path-rename은 해당 레포지토리의 내용을 특정 디렉토리로 병합하는데 사용
- git push origin main
- pip install git-filter-repo
- git filter-repo : 레포지토리 커밋 이력을 재구성하고 여러 레포지토리를 하나로 합칠 때 사용한다.
- git Submodule을 사용하는 방식
- git 서브모듈 : Git Repository 안에 다른 Git Repository를 포함시키는 방법이다.
- 서로 다른 프로젝트를 독립적으로 관리하면서도 하나의 메인 프로젝트 안에 포함시킬 수 있다.
- 사용법
- 서브모듈 추가 - git submodule add <레포지토리 URL> <디렉토리 경로>
- 프로젝트를 클론한 후 서브모듈을 초기화해야 할 경우
- git submodule init
git submodule update
- git submodule init
- 한번에 클론 및 서브모듈 초기화
- git clone --recurse-submodules <메인 레포지토리 URL>
- 서브모듈 업데이트
- git submodule update --remote
- 서브모듈 커밋 반영
- git add <서브모듈 경로>
git commit -m "~"
- git add <서브모듈 경로>
- 서브모듈 추가 - git submodule add <레포지토리 URL> <디렉토리 경로>
- 사용법
'Git' 카테고리의 다른 글
[Git] 브랜치 전략 & 커밋 메시지 컨벤션 (1) | 2024.09.27 |
---|---|
[Git] 용어 / CLI 명령어 (4) | 2024.09.27 |