서브모듈 통합
hextra 테마 설치 시, 서브모듈로 추가하였다면, 클라우드 환경에 배포할 때 서브모듈의 수정 내용이 반영되지 않습니다. 이는 서브모듈이 별도의 git 으로 관리되기 때문이며, 일반적으로 submodule 을 별도로 커밋하고 푸시하여 해결합니다. 여기에서는 theme 를 부모 저장소의 트리 구조에 포함시키는 방법을 사용합니다. 서브모듈을 베타적 디렉토리로 변환하여 직접 포함시키는 방법과 서브트리 병합(subtree merge) 방법이 있으며, 이 글에서는 첫 번째 방법을 중점적으로 다룹니다.
1. 서브모듈을 디렉토리로 변환
진행 과정 요약
서브모듈(Submodule)을 일반 디렉토리로 변환하여 메인 저장소에 통합하는 과정은 다음과 같이 진행됩니다.
- 서브모듈의
.git
디렉토리를 삭제하여 서브모듈의 독립성을 제거. - 서브모듈 디렉토리를 메인 저장소에 일반 디렉토리로 추가.
- 변경 사항을 커밋하고 원격 저장소에 푸시.
- (선택 사항)
.gitmodules
파일과 인덱스에서 서브모듈 정보를 제거하여 완전히 통합.
서브모듈의 현재 상태 확인
서브모듈이 제대로 설정되어 있고, 원하는 브랜치나 커밋을 가리키고 있는지 확인합니다.
git submodule status
이 명령어를 통해 현재 서브모듈이 어떤 커밋을 가리키고 있는지 확인할 수 있습니다.
서브모듈의 .git
디렉토리 제거
서브모듈을 일반 디렉토리로 변환하기 위해 서브모듈 디렉토리 내의 .git
디렉토리를 제거해야 합니다. 이는 서브모듈을 독립적인 Git 저장소에서 부모 저장소의 일부로 전환하는 작업입니다.
Remove-Item -Recurse -Force themes/hextra/.git
이 명령어는 themes/hextra
디렉토리 내부의 .git
디렉토리를 삭제하여, 이 디렉토리를 더 이상 독립적인 Git 저장소로 취급하지 않게 합니다.
메인 저장소에 서브모듈 디렉토리 추가
서브모듈을 제거한 후, 해당 디렉토리를 메인 저장소의 일반 디렉토리로 추가합니다.
git add themes/hextra
이제 themes/hextra
디렉토리는 메인 저장소의 일부로 포함됩니다.
커밋 및 푸시
변경 사항을 메인 저장소에 커밋하고, 원격 저장소로 푸시합니다.
git commit -m "Converted submodule to regular directory"
git push origin <branch_name>
<branch_name>
은 현재 작업 중인 브랜치 이름을 의미합니다.
서브모듈 정보 제거
서브모듈로서의 정보를 완전히 제거하려면, .gitmodules
파일에서 해당 서브모듈의 정보를 삭제하고, 인덱스에서도 서브모듈 정보를 제거합니다.
.gitmodules
파일에서 해당 서브모듈에 대한 항목 삭제
git rm --cached .gitmodules
themes/hextra
관련 캐시 삭제:
git rm --cached themes/hextra
.gitmodules
파일 변경 사항을 커밋:
git commit -m "Remove submodule reference"
2. 서브트리(Subtree)로 서브모듈 포함
서브모듈을 서브트리(Subtree)로 포함하여 메인 저장소에 통합하는 방법은 다음과 같습니다. 서브트리는 서브모듈과 달리 서브모듈의 변경 사항을 메인 저장소에 병합하여, 독립적인 Git 저장소로 관리하면서도 메인 저장소와 함께 전체 내용을 포함시킬 수 있습니다.
진행 과정 요약
- (선택 사항) 기존 서브모듈을 인덱스와
.gitmodules
파일에서 제거. - 서브트리로 병합할 저장소의 URL과 브랜치를 지정하여 메인 저장소의 특정 디렉토리에 서브트리를 병합 (
git subtree add
). - 원본 저장소에서 변경 사항이 발생할 때마다 서브트리를 업데이트 (
git subtree pull
). - 변경 사항을 커밋하고 원격 저장소에 푸시.
서브모듈 제거 (선택 사항)
이미 서브모듈로 설정되어 있는 경우, 서브트리로 변환하기 전에 서브모듈을 제거할 수 있습니다.
- 서브모듈을 인덱스에서 제거
git rm --cached themes/hextra
.gitmodules
파일에서 서브모듈 항목 제거.gitmodules
파일에서 해당 서브모듈 정보를 수동으로 삭제하거나 다음 명령어를 사용하여 제거할 수 있습니다.
git rm .gitmodules
git commit -m "Removed submodule"
서브트리로 서브모듈 병합
이제 서브모듈을 서브트리로 메인 저장소에 병합합니다.
- 서브모듈을 서브트리로 메인 저장소에 병합하기 위해 다음 명령어를 사용합니다.
git subtree add --prefix=themes/hextra <repository_url> <branch_name> --squash
<repository_url>
: 서브모듈(즉, 서브트리로 변환할 저장소)의 URL입니다.<branch_name>
: 서브트리로 병합할 브랜치입니다.--prefix=themes/hextra
: 서브트리를 메인 저장소의 어떤 디렉토리에 포함시킬지를 지정합니다.- 여기에서는 기존 서브모듈 디렉토리였던
themes/hextra
로 지정합니다.
- 여기에서는 기존 서브모듈 디렉토리였던
--squash
: 서브트리로 병합할 때 서브모듈의 전체 커밋 이력을 하나의 커밋으로 압축합니다.
서브트리 업데이트 (서브모듈 변경 반영)
서브모듈(이제 서브트리로 포함된 디렉토리)의 원본 저장소에서 변경 사항이 발생할 경우, 이를 메인 저장소에 반영할 수 있습니다.
- 서브트리 업데이트
- 원본 저장소에서 변경된 내용을 메인 저장소의 서브트리에 반영하려면 다음 명령어를 사용합니다.
git subtree pull --prefix=themes/hextra <repository_url> <branch_name> --squash
- 이 명령은 원본 저장소의 최신 내용을 메인 저장소의 서브트리에 병합합니다.
커밋 및 푸시
서브트리를 메인 저장소에 병합한 후, 변경 사항을 커밋하고 원격 저장소에 푸시합니다.
git commit -m "Added/Updated subtree for themes/hextra"
git push origin <branch_name>
서브트리의 유지 관리
서브트리로 포함된 디렉토리는 메인 저장소의 일부로 간주되지만, 여전히 독립적인 Git 저장소로 관리될 수 있습니다. 서브트리를 업데이트하거나, 필요에 따라 병합할 수 있습니다.